Miguel Ojeda ผู้เขียนโครงการ Rust-for-Linux เสนอส่วนประกอบเวอร์ชันอัปเดตสำหรับการพัฒนาไดรเวอร์อุปกรณ์ในภาษา Rust เพื่อพิจารณาโดยนักพัฒนาเคอร์เนล Linux การสนับสนุน Rust ถือเป็นการทดลอง แต่ได้รับการตกลงให้รวมไว้ในสาขา linux-next แล้ว เวอร์ชันใหม่จะขจัดความคิดเห็นที่เกิดขึ้นระหว่างการอภิปรายเกี่ยวกับแพตช์เวอร์ชันแรก Linus Torvalds ได้เข้าร่วมการสนทนาแล้วและเสนอให้เปลี่ยนตรรกะสำหรับการประมวลผลการดำเนินการบิตบางส่วน
โปรดจำไว้ว่าการเปลี่ยนแปลงที่เสนอทำให้สามารถใช้ Rust เป็นภาษาที่สองในการพัฒนาไดรเวอร์และโมดูลเคอร์เนลได้ การสนับสนุน Rust จะแสดงเป็นตัวเลือกที่ไม่ได้เปิดใช้งานตามค่าเริ่มต้น และไม่ส่งผลให้ Rust ถูกรวมไว้เป็นการพึ่งพาการสร้างที่จำเป็นสำหรับเคอร์เนล การใช้ Rust สำหรับการพัฒนาไดรเวอร์จะช่วยให้คุณสร้างไดรเวอร์ที่ปลอดภัยและดีขึ้นได้โดยใช้ความพยายามเพียงเล็กน้อย ปราศจากปัญหาต่างๆ เช่น การเข้าถึงหน่วยความจำหลังจากปล่อยว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ และบัฟเฟอร์มากเกินไป
การจัดการที่ปลอดภัยต่อหน่วยความจำมีให้ใน Rust ณ เวลาคอมไพล์ผ่านการตรวจสอบการอ้างอิง การติดตามความเป็นเจ้าของอ็อบเจกต์และอายุอ็อบเจกต์ (ขอบเขต) ตลอดจนผ่านการประเมินความถูกต้องของการเข้าถึงหน่วยความจำระหว่างการเรียกใช้โค้ด สนิมยังให้การป้องกันการล้นของจำนวนเต็ม, จำเป็นต้องมีการกำหนดค่าเริ่มต้นที่จำเป็นของค่าตัวแปรก่อนใช้งาน, จัดการข้อผิดพลาดได้ดีขึ้นในไลบรารีมาตรฐาน, ใช้แนวคิดของการอ้างอิงและตัวแปรที่ไม่เปลี่ยนรูปแบบตามค่าเริ่มต้น, เสนอการพิมพ์แบบคงที่ที่แข็งแกร่งเพื่อลดข้อผิดพลาดเชิงตรรกะ
การเปลี่ยนแปลงที่เห็นได้ชัดเจนที่สุดในแพตช์เวอร์ชันใหม่:
- รหัสการจัดสรรหน่วยความจำจะปลอดจากการสร้างสถานะ "ตื่นตระหนก" เมื่อเกิดข้อผิดพลาด เช่น หน่วยความจำไม่เพียงพอ มีการรวมเวอร์ชันของไลบรารี Rust alloc ไว้ด้วย ซึ่งนำโค้ดกลับมาใช้ใหม่เพื่อจัดการกับความล้มเหลว แต่เป้าหมายสูงสุดคือการถ่ายโอนคุณสมบัติทั้งหมดที่จำเป็นสำหรับเคอร์เนลไปยังรุ่นหลักของการจัดสรร (การเปลี่ยนแปลงได้ถูกจัดเตรียมและถ่ายโอนไปยังมาตรฐานแล้ว ห้องสมุดสนิม)
- แทนที่จะสร้างทุกคืน ตอนนี้คุณสามารถใช้คอมไพเลอร์rustcรุ่นเบต้าและรุ่นเสถียรเพื่อคอมไพล์เคอร์เนลด้วยการรองรับ Rust ปัจจุบัน Rustc 1.54-beta1 ถูกใช้เป็นคอมไพเลอร์อ้างอิง แต่หลังจากปล่อย 1.54 ในช่วงปลายเดือน ก็จะได้รับการสนับสนุนเป็นคอมไพเลอร์อ้างอิง
- เพิ่มการรองรับสำหรับการเขียนการทดสอบโดยใช้แอตทริบิวต์ #[test]” มาตรฐานสำหรับ Rust และความสามารถในการใช้ doctests เพื่อจัดทำเอกสารการทดสอบ
- เพิ่มการรองรับสถาปัตยกรรม ARM32 และ RISCV นอกเหนือจากการรองรับ x86_64 และ ARM64 ก่อนหน้านี้
- ปรับปรุงการใช้งาน GCC Rust (ส่วนหน้า GCC สำหรับ Rust) และrustc_codegen_gcc (แบ็กเอนด์rustc สำหรับ GCC) ซึ่งขณะนี้ผ่านการทดสอบพื้นฐานทั้งหมดแล้ว
- มีการเสนอระดับใหม่ของนามธรรมเพื่อใช้ในโปรแกรม Rust ของกลไกเคอร์เนลที่เขียนด้วยภาษาซี เช่น ต้นไม้สีแดงดำ วัตถุที่นับจำนวนอ้างอิง การสร้างตัวอธิบายไฟล์ งาน ไฟล์ และเวกเตอร์ I/O
- ส่วนประกอบการพัฒนาไดรเวอร์ได้รับการปรับปรุงการรองรับสำหรับโมดูล file_operations, โมดูล! มาโคร, การลงทะเบียนแมโคร และไดรเวอร์พื้นฐาน (ตรวจสอบและลบ)
- ขณะนี้ Binder รองรับการส่งไฟล์ descriptors และ LSM hooks
- มีการเสนอตัวอย่างการใช้งานเพิ่มเติมของไดรเวอร์ Rust - bcm2835-rng สำหรับตัวสร้างตัวเลขสุ่มฮาร์ดแวร์ของบอร์ด Raspberry Pi
นอกจากนี้ ยังมีการกล่าวถึงโครงการของบริษัทบางแห่งที่เกี่ยวข้องกับการใช้ Rust ในเคอร์เนลด้วย:
- Microsoft ได้แสดงความสนใจในการเข้าร่วมในงานเพื่อรวมการสนับสนุน Rust เข้ากับเคอร์เนล Linux และพร้อมที่จะให้บริการการใช้งานไดรเวอร์สำหรับ Hyper-V บน Rust ในอีกไม่กี่เดือนข้างหน้า
- ARM กำลังทำงานเพื่อปรับปรุงการรองรับ Rust สำหรับระบบที่ใช้ ARM โครงการ Rust ได้เสนอการเปลี่ยนแปลงที่จะทำให้ระบบ ARM 64 บิตเป็นแพลตฟอร์ม Tier 1 แล้ว
- Google ให้การสนับสนุนโดยตรงสำหรับโครงการ Rust สำหรับ Linux กำลังพัฒนาการใช้งานกลไกการสื่อสารระหว่างกระบวนการ Binder ใหม่ใน Rust และกำลังพิจารณาความเป็นไปได้ในการทำงานไดรเวอร์ต่างๆ ใน Rust ใหม่ Google ได้จัดหาเงินทุนสำหรับการทำงานเพื่อรวมการสนับสนุน Rust เข้ากับเคอร์เนล Linux ผ่าน ISRG (กลุ่มวิจัยความปลอดภัยทางอินเทอร์เน็ต)
- IBM ได้ดำเนินการสนับสนุนเคอร์เนลสำหรับ Rust สำหรับระบบ PowerPC
- ห้องปฏิบัติการ LSE (Systems Research Laboratory) ได้พัฒนาไดรเวอร์ SPI ใน Rust
ที่มา: opennet.ru