systemd เพิ่มการรองรับภาษา Rust อย่างเป็นทางการสำหรับคอมโพเนนต์ใหม่
โปรเจกต์ systemd ได้ประกาศรองรับการพัฒนาโปรแกรมด้วยภาษา Rust อย่างเป็นทางการ หลังจากมีการควบรวม pull request จาก Christian Brauner นักพัฒนา Linux kernel เข้าสู่สาขาหลัก (main branch) ของโปรเจกต์ ซึ่งถือเป็นการสร้างทางเลือกใหม่ในการพัฒนาควบคู่ไปกับสถาปัตยกรรมเดิมที่ยังคงใช้ภาษา C ไว้ครบถ้วน
อย่างไรก็ตาม ผู้ดูแลโปรเจกต์ยังไม่มีแผนที่จะเขียนโค้ดเดิมใหม่ทั้งหมดด้วยภาษา Rust แต่จะใช้แนวทางที่จำกัดอย่างระมัดระวัง โดยอนุญาตให้ใช้ Rust เฉพาะกับคอมโพเนนต์ใหม่ที่เป็นแบบสแตนด์อะโลน (standalone) ซึ่งไม่มีส่วนประกอบอื่นของ systemd มาพึ่งพาเท่านั้น ส่วนโค้ดภาษา C เดิมจะยังคงอยู่ตามปกติโดยไม่มีการแก้ไขใดๆ
สำหรับการบิลด์โปรเจกต์ systemd ตัดสินใจไม่นำ Cargo ซึ่งเป็นเครื่องมือมาตรฐานของ Rust มาใช้ แต่ยังคงใช้ Meson ต่อไปเพื่อให้การพัฒนาด้วย Rust ถูกรวมเข้ากับโครงสร้างพื้นฐานเดิมได้อย่างไร้รอยต่อ นอกจากนี้ยังมีการจำกัด dependencies อย่างเข้มงวดผ่านแนวทาง no_std ซึ่งจะไม่พึ่งพาไลบรารีมาตรฐานของ Rust หรือ crates ภายนอก แต่จะโต้ตอบกับไลบรารี C ของ systemd ผ่าน bindings ที่สร้างขึ้นแทน
ในส่วนการจัดการหน่วยความจำ systemd ได้พัฒนา container ในรูปแบบ Rust ของตัวเองขึ้นมา โดยกำหนดให้จัดการความล้มเหลวในการจัดสรรหน่วยความจำ (allocation failures) อย่างชัดเจนแทนการยุติการทำงานของโปรแกรม (abort) พร้อมทั้งมี wrappers สำหรับการทำ logging, การจัดการ argument, การประมวลผล event และการจัดการข้อผิดพลาด เพื่อให้ยูทิลิตี้ที่เขียนด้วย Rust ทำงานสอดคล้องกับฝั่งภาษา C
การรองรับ Rust ในปัจจุบันเป็นเพียงทางเลือกที่ระบบจะตรวจพบโดยอัตโนมัติ ซึ่งนักพัฒนาจำเป็นต้องใช้ Rust 1.85, bindgen 0.71.1 และ Meson 1.4 ขึ้นไปเท่านั้น ส่วนระบบที่ไม่มีเครื่องมือเหล่านี้ยังคงสามารถบิลด์ systemd ได้ตามปกติโดยไม่ต้องเปิดการรองรับ Rust โดยจากการทดสอบเบื้องต้นพบว่ายูทิลิตี้ Rust ที่ผ่านการ stripped แล้วจะมีขนาดประมาณ 32 KB ซึ่งมากกว่าฝั่งภาษา C ที่มีขนาด 20 KB เล็กน้อย
แอปพลิเคชันแรกที่จะประเดิมใช้โครงสร้างพื้นฐานนี้คือ systemd-keyring-setup ซึ่งเป็นยูทิลิตี้ใหม่สำหรับจัดการใบรับรองใน Linux kernel keyrings โดยกำลังอยู่ระหว่างการพัฒนาแยกต่างหากพร้อมกับ Rust wrappers สำหรับ shared libraries ของ systemd
สำหรับการนำไปใช้งานใน Linux distributions ต่างๆ การเปลี่ยนแปลงนี้ส่งผลให้ผู้ดูแลแพ็กเกจต้องพิจารณาเรื่อง dependencies ของ Rust compiler และ bindgen เพิ่มเติม หากต้องการเปิดใช้งานฟีเจอร์ใหม่ให้ครบถ้วน ซึ่งในอนาคตต้องจับตาดูว่า Rust จะถูกนำมาใช้งานในวงกว้างภายใน systemd มากน้อยเพียงใด

ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
