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

สรุปประเด็นสำคัญ
- 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 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 เป็นข้อตกลงที่ผู้เรียกต้องจำเอง |

โค้ด 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 ตัว 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 เต็มตัว แนวทาง 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 และลินุกซ์เพิ่มเติมได้ที่หมวดซอฟต์แวร์
คำถามที่พบบ่อย
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 — systemd (GitHub)
- keyring-setup: add systemd-keyring-setup · Pull Request #44114 · systemd/systemd — systemd (GitHub)
- HACKING.md — systemd (GitHub)
- System and Service Manager — systemd
บุคคล องค์กร และสถานที่ในข่าวนี้
เลือกชื่อเพื่ออ่านข่าวทั้งหมดที่กล่าวถึง ตัวเลขคือจำนวนข่าว
- ผลิตภัณฑ์และเทคโนโลยี
- systemd6Rust15Debian9Fedora Linux7Linux62
พบข้อมูลคลาดเคลื่อน? แจ้งกองบรรณาธิการ