# systemd Rust มาแล้ว: รับโค้ด Rust เฉพาะโปรแกรมใหม่ ไม่ใช้ cargo และไม่แตะโค้ด C เดิม

> systemd Rust เริ่มแล้ว: systemd รวม PR ที่ให้เขียนโปรแกรมด้วย Rust เมื่อ 24 ต.ค. 2026 ใช้กับโปรแกรมใหม่ปลายทางเท่านั้น ไม่ใช้ cargo และเปิดปิดได้ตอน build

- ประเภท: ข่าว · หมวด: Software
- เผยแพร่: 2026-10-25T11:47:00.000Z · อัปเดต: 2026-10-25T11:47:00.000Z
- โดย: กองบรรณาธิการ THAI DATA, THAI DATA IT BUSINESS ENTERPRISE
- ที่มา: https://thaidata.co.th/software/systemd-rust-support-merged-no-cargo-no-std/

## สรุปประเด็นสำคัญ

- systemd รวม pull request **#44324** ที่ให้เขียนโปรแกรมของ systemd ด้วย Rust เมื่อ **24 ตุลาคม 2026** เป็นงาน **19 commit** เพิ่มโค้ด **5,144 บรรทัด** ใน **54 ไฟล์**
- กติกาที่ผู้ดูแลตกลงกันในงาน hackfest ที่เบอร์ลิน: Rust ใช้กับ**โปรแกรมใหม่ปลายทาง**เท่านั้น ไม่ย้ายโค้ด C เดิม **ไม่ใช้ cargo** build ด้วย meson และใช้แค่ crate core, alloc กับ libc แบบ no_std
- การรองรับ Rust เป็นตัวเลือก (**-Drust=auto** เป็นค่าเริ่มต้น) ต้องใช้ **rustc 1.85**, **bindgen 0.71.1** และ **meson 1.4.0** ขึ้นไป ซึ่งตรงกับที่ **Debian 13** มีให้
- โปรแกรมทดสอบ test-cli-rust ที่ strip แล้วมีขนาด **32 KB** เทียบกับ **20 KB** ของโปรแกรมแบบเดียวกันที่เขียนด้วย C เมื่อเปิด LTO
- โปรแกรม Rust ตัวแรกที่จะใช้คือ **systemd-keyring-setup** สำหรับลงทะเบียนใบรับรอง X.509 เข้า keyring ของเคอร์เนลตอนบูต ซึ่ง ณ 25 ต.ค. 2026 ยังอยู่ใน PR **#44114** ที่ยังไม่รวม

โครงการ systemd รวมการรองรับภาษา Rust เข้า branch หลักแล้วเมื่อวันที่ 24 ตุลาคม 2026 ผ่าน pull request หมายเลข 44324 ทำให้เขียนโปรแกรมใหม่ของ systemd ด้วย Rust ได้ แต่ systemd Rust มาพร้อมกติกาเข้ม คือใช้กับโปรแกรมใหม่ปลายทางเท่านั้น ไม่ย้ายโค้ด C เดิม ไม่ใช้ cargo และเปิดหรือปิดได้ตอน build

systemd คือชุดส่วนประกอบพื้นฐานของระบบลินุกซ์ที่ทำหน้าที่ตัวจัดการระบบและบริการ ทำงานเป็น PID 1 แล้วเริ่มส่วนที่เหลือของระบบ ตามคำอธิบายบนเว็บไซต์ systemd.io การเปลี่ยนแปลงในโครงการนี้จึงกระทบลินุกซ์ดิสโทรจำนวนมากที่ใช้ systemd อยู่

![หน้าเว็บไซต์ systemd.io อธิบายว่า systemd เป็นชุดส่วนประกอบพื้นฐานของระบบลินุกซ์ ทำงานเป็น PID 1 และเริ่มส่วนที่เหลือของระบบ](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/systemd-rust-support-merged-no-cargo-no-std/s-soft-1025-systemd-io-homepage.webp?v=98e2b119) _(ภาพ: systemd (ภาพหน้าจอ))_

## กติกาของ systemd Rust ที่ผู้ดูแลตกลงกัน

Christian Brauner ผู้เขียน PR อธิบายว่างานนี้มาแทน PR เดิมหมายเลข 43551 และปรับตามแนวทางที่ผู้ดูแลตกลงกันในงาน hackfest ที่เบอร์ลิน สรุปเป็นข้อได้ดังนี้

| เรื่อง | กติกาใน PR #44324 |
| --- | --- |
| ใช้ Rust กับอะไร | เฉพาะคอมโพเนนต์ใหม่ปลายทาง ไม่ย้ายโค้ด C เดิม และไม่เขียนส่วนที่คอมโพเนนต์อื่นต้องพึ่ง |
| ระบบ build | ไม่ใช้ cargo ทุกอย่าง build ด้วย meson |
| ไลบรารีที่ใช้ได้ | เฉพาะ crate core, alloc และ libc โค้ดเป็น no_std และไม่มี crate ภายนอกอื่น |
| การจัดหน่วยความจำ | ไม่ใช้ collections ของ alloc เพราะจะหยุดโปรแกรมเมื่อหน่วยความจำหมด ใช้ Box และ Vec ของ systemd_shared ที่คืนค่า error แทน คล้ายแนวทางของเคอร์เนล |
| การเชื่อมกับ C | ลิงก์ libsystemd-shared แบบ dynamic เหมือนโปรแกรม C ส่วน crate ของ Rust ลิงก์แบบ static เข้าโปรแกรมที่ใช้ |
| ข้อมูลลับ | เก็บใน Vec<u8, Erasing> ที่ลบค่าในหน่วยความจำก่อนคืน ซึ่งในภาษา C เป็นข้อตกลงที่ผู้เรียกต้องจำเอง |

![หน้า pull request #44324 ของ systemd หัวข้อ rust: support programs written in Rust สถานะ Merged พร้อมรายการกติกาการใช้ Rust](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/systemd-rust-support-merged-no-cargo-no-std/s-soft-1025-systemd-rust-pr-44324.webp?v=e9724ceb) _(ภาพ: systemd / GitHub (ภาพหน้าจอ))_

## โค้ด systemd Rust เชื่อมกับโค้ด C อย่างไร

ผลของกติกา systemd Rust คือไม่มีส่วนใดของ Rust standard library ติดไปกับโปรแกรมหรือ libsystemd-shared โปรแกรมที่เขียนด้วย Rust ใช้กรอบคำสั่งแบบเดียวกับโปรแกรม C ทั้งการแสดง --help การแยกตัวเลือก และคำตอบของ --introspect-cli โดยมีสคริปต์ทดสอบเทียบให้ตรงกันทุกไบต์

ฝั่งการเขียนโค้ด crate ชื่อ systemd_shared ที่โปรแกรม Rust ใช้ทำตามแบบแผนของโค้ด C ทั้งการคืนค่า error แบบ errno ชุดฟังก์ชัน log_*() และมาโคร define_main!() ส่วน binding ของ libsystemd-shared ถูกสร้างตอน build ด้วย bindgen จาก header ชุดเดียวกับที่ใช้ build ไลบรารี ทำให้โค้ด Rust กับโค้ด C ไม่หลุดจากกัน ด้านการตรวจคุณภาพ image ของ mkosi สำหรับดิสโทรที่มีเครื่องมือครบจะ build ด้วย -Drust=enabled และตัว linter รัน rustfmt, clippy และการตรวจ header ของ binding ทุกครั้ง ขณะที่กติกาการเขียนถูกบันทึกไว้ใน HACKING.md และ CODING_STYLE.md ของโครงการ

## systemd Rust ต้องใช้เครื่องมืออะไร และโปรแกรมใหญ่ขึ้นแค่ไหน

คู่มือ HACKING.md ที่อัปเดตพร้อม PR ระบุว่าการรองรับ Rust เป็นตัวเลือก ต้องมี rustc 1.85, bindgen 0.71.1 และ meson 1.4.0 ขึ้นไป ซึ่ง PR ระบุว่าตรงกับเวอร์ชันที่ Debian 13 มีให้ ค่าเริ่มต้น `-Drust=auto` จะปิด Rust เองเมื่อเครื่องมือไม่ครบ ส่วน `-Drust=enabled` บังคับเปิดและให้ build ล้มเหลวถ้าขาดเครื่องมือ คู่มือยังให้คำสั่งติดตั้งเครื่องมือสำหรับ Debian 13, Fedora, Arch Linux และ openSUSE Tumbleweed

![กราฟเทียบขนาดโปรแกรมทดสอบของ systemd: เวอร์ชัน Rust 32 KB และเวอร์ชัน C 20 KB หลัง strip และเปิด LTO](https://thaidata-co-th.s3.ap-southeast-1.amazonaws.com/thaidata.co.th/images/articles/systemd-rust-support-merged-no-cargo-no-std/s-soft-1025-systemd-rust-binary-size.webp?v=1cdb6bd0) _(ภาพ: THAI DATA (ข้อมูล: systemd (GitHub PR #44324)))_

เรื่องขนาดของโปรแกรม systemd Rust ตัว PR ระบุว่าโปรแกรมทดสอบ test-cli-rust ที่ strip แล้วมีขนาด 32 KB เมื่อเปิด LTO เทียบกับ 20 KB ของโปรแกรมแบบเดียวกันที่เขียนด้วย C หรือใหญ่กว่า 12 KB ส่วนตัว PR มี 19 commit เพิ่มโค้ด 5,144 บรรทัดและลบ 11 บรรทัดใน 54 ไฟล์

## ทำไมเรื่องนี้สำคัญ

ลินุกซ์ขยับไปใช้ Rust ในหลายชั้นแล้ว เช่น [Ubuntu 26.10 ที่เปลี่ยนไปใช้ Rust coreutils เต็มตัว](/software/ubuntu-26-10-stonking-stingray-rust-coreutils/) แนวทาง systemd Rust ที่รับ Rust แบบจำกัดวงแสดงให้เห็นอีกแนวทางหนึ่ง คือไม่เขียนใหม่ทั้งหมด แต่เปิดให้โค้ดใหม่ที่ต้องจัดการข้อมูลอ่อนไหวใช้ภาษาที่ปลอดภัยด้านหน่วยความจำกว่า ขณะที่ยังคุมขนาดและ dependency ได้ด้วยการตัด cargo และ crate ภายนอกออก

โปรแกรมแรกที่จะใช้คือ systemd-keyring-setup ใน PR หมายเลข 44114 ซึ่งลงทะเบียนใบรับรอง X.509 จากลำดับชั้น VOA เข้า keyring .dm-verity, .fs-verity และ .bpf ของเคอร์เนลตอนบูตแล้วปิดผนึก PR นี้ระบุว่า prototype ภาษา C ไม่เคยถูกรวม จึงไม่ใช่การย้ายโค้ดเดิม และ ณ 25 ตุลาคม 2026 ยังรอรวมอยู่พร้อม PR ย่อยอีกสองรายการ

## ผลต่อองค์กรไทยและทีมพัฒนา

- **ทีมที่ build systemd หรือดิสโทรเอง** ตรวจ pipeline ที่ใช้ `--auto-features=enabled` เพราะผู้เขียน PR ระบุว่า build ของ Arch และ openSUSE บน OBS ล้มเหลวด้วยเหตุนี้ ต้องใส่ `-Drust=disabled` หรือเพิ่ม rustc กับ bindgen เป็น build dependency
- **องค์กรที่ใช้ลินุกซ์ดิสโทรสำเร็จรูป** ยังไม่ต้องทำอะไร systemd Rust ยังอยู่ใน branch หลักของ systemd และจะมาถึงเครื่องเมื่อดิสโทรนำ systemd รุ่นใหม่ไปใช้
- **ทีมความปลอดภัยและผู้ดูแลระบบที่ใช้ dm-verity หรือ fs-verity** ติดตาม systemd-keyring-setup เพราะเป็นเครื่องมือจัดการใบรับรองตอนบูตที่จะเขียนด้วย Rust ตั้งแต่แรก
- **ผู้ดูแลเครื่องมือ build ภายในองค์กร** ถ้าจะเปิด Rust ให้ตรวจว่า rustc, bindgen และ meson ใน image ที่ใช้ build ใหม่พอตามเกณฑ์ขั้นต่ำ มิฉะนั้นค่า auto จะปิด Rust ไปเงียบ ๆ และโปรแกรมที่เขียนด้วย Rust จะไม่ถูก build
- **นักพัฒนาที่อยากร่วมโครงการ** อ่านหัวข้อ Writing programs in Rust ใน HACKING.md ก่อน เพราะกติกาต่างจากการเขียน Rust ทั่วไปที่ใช้ cargo และ crate จาก crates.io

ติดตามข่าวโครงการ Open Source และลินุกซ์เพิ่มเติมได้ที่[หมวดซอฟต์แวร์](/software/)

## คำถามที่พบบ่อย

### systemd Rust คืออะไร systemd จะเขียนใหม่ด้วย Rust ทั้งหมดหรือไม่?

ไม่ใช่ systemd Rust คือการเปิดให้เขียนโปรแกรมใหม่ของ systemd ด้วยภาษา Rust ได้ ตามคำอธิบายใน pull request #44324 ที่รวมเมื่อ 24 ตุลาคม 2026 Rust ใช้กับคอมโพเนนต์ใหม่ปลายทางเท่านั้น โค้ด C เดิมไม่ถูกย้าย และส่วนที่คอมโพเนนต์อื่นต้องพึ่งจะไม่เขียนด้วย Rust

### ต้องมีอะไรบ้างถ้าจะ build systemd พร้อม Rust?

การ build แบบ systemd Rust ต้องมีเครื่องมือตามคู่มือ HACKING.md ของ systemd ซึ่งระบุว่าต้องใช้ rustc 1.85, bindgen 0.71.1 ที่โหลด libclang ได้ และ meson 1.4.0 ขึ้นไป ค่าเริ่มต้น -Drust=auto จะปิด Rust เองถ้าเครื่องมือไม่ครบหรือเก่าเกินไป ส่วน -Drust=enabled จะทำให้ build ล้มเหลวแทน

### ดิสโทรลินุกซ์ต้องเปลี่ยนอะไรหลัง systemd รองรับ Rust?

หลังรวม systemd Rust ผู้เขียน PR ระบุว่า build ของ Arch และ openSUSE บน OBS ล้มเหลวเพราะใช้ --auto-features=enabled โดยไม่มี rustc และ bindgen ผู้ทำแพ็กเกจจึงต้องเลือกระหว่างใส่ -Drust=disabled หรือเพิ่ม rustc กับ bindgen เป็น build dependency

### โปรแกรม systemd ที่เขียนด้วย Rust ตัวแรกคืออะไร?

โปรแกรม systemd Rust ตัวแรกคือ systemd-keyring-setup ซึ่งลงทะเบียนใบรับรอง X.509 จากลำดับชั้น VOA เข้า keyring .dm-verity, .fs-verity และ .bpf ของเคอร์เนลตอนบูต แล้วปิดผนึก keyring ภายหลัง ณ 25 ตุลาคม 2026 ยังอยู่ใน pull request #44114 ที่รอรวม


## แหล่งอ้างอิง

- [rust: support programs written in Rust · Pull Request #44324 · systemd/systemd](https://github.com/systemd/systemd/pull/44324) — systemd (GitHub)
- [keyring-setup: add systemd-keyring-setup · Pull Request #44114 · systemd/systemd](https://github.com/systemd/systemd/pull/44114) — systemd (GitHub)
- [HACKING.md](https://github.com/systemd/systemd/blob/main/docs/HACKING.md) — systemd (GitHub)
- [System and Service Manager](https://systemd.io/) — systemd
