Miguel Ojeda ผู้เขียนโครงการ Rust-for-Linux เสนอส่วนประกอบเวอร์ชันที่สี่สำหรับการพัฒนาไดรเวอร์อุปกรณ์ในภาษา Rust เพื่อพิจารณาโดยนักพัฒนาเคอร์เนล Linux การสนับสนุน Rust ถือเป็นการทดลอง แต่ได้ตกลงกันไว้แล้วว่าจะรวมไว้ในสาขา linux-next และมีความสมบูรณ์เพียงพอที่จะเริ่มทำงานในการสร้างเลเยอร์นามธรรมเหนือระบบย่อยเคอร์เนล เช่นเดียวกับการเขียนไดรเวอร์และโมดูล การพัฒนานี้ได้รับทุนจาก Google และ ISRG (Internet Security Research Group) ซึ่งเป็นผู้ก่อตั้งโครงการ Let's Encrypt และส่งเสริม HTTPS และการพัฒนาเทคโนโลยีเพื่อปรับปรุงความปลอดภัยของอินเทอร์เน็ต
โปรดจำไว้ว่าการเปลี่ยนแปลงที่เสนอทำให้สามารถใช้ Rust เป็นภาษาที่สองในการพัฒนาไดรเวอร์และโมดูลเคอร์เนลได้ การสนับสนุน Rust จะแสดงเป็นตัวเลือกที่ไม่ได้เปิดใช้งานตามค่าเริ่มต้น และไม่ส่งผลให้ Rust ถูกรวมไว้เป็นการพึ่งพาการสร้างที่จำเป็นสำหรับเคอร์เนล การใช้ Rust สำหรับการพัฒนาไดรเวอร์จะช่วยให้คุณสร้างไดรเวอร์ที่ปลอดภัยและดีขึ้นได้โดยใช้ความพยายามเพียงเล็กน้อย ปราศจากปัญหาต่างๆ เช่น การเข้าถึงหน่วยความจำหลังจากปล่อยว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ และบัฟเฟอร์มากเกินไป
การจัดการที่ปลอดภัยต่อหน่วยความจำมีให้ใน Rust ณ เวลาคอมไพล์ผ่านการตรวจสอบการอ้างอิง การติดตามความเป็นเจ้าของอ็อบเจกต์และอายุอ็อบเจกต์ (ขอบเขต) ตลอดจนผ่านการประเมินความถูกต้องของการเข้าถึงหน่วยความจำระหว่างการเรียกใช้โค้ด สนิมยังให้การป้องกันการล้นของจำนวนเต็ม, จำเป็นต้องมีการกำหนดค่าเริ่มต้นที่จำเป็นของค่าตัวแปรก่อนใช้งาน, จัดการข้อผิดพลาดได้ดีขึ้นในไลบรารีมาตรฐาน, ใช้แนวคิดของการอ้างอิงและตัวแปรที่ไม่เปลี่ยนรูปแบบตามค่าเริ่มต้น, เสนอการพิมพ์แบบคงที่ที่แข็งแกร่งเพื่อลดข้อผิดพลาดเชิงตรรกะ
แพตช์เวอร์ชันใหม่ยังคงกำจัดความคิดเห็นที่เกิดขึ้นระหว่างการอภิปรายเกี่ยวกับแพตช์รุ่นแรก สองและสาม ในเวอร์ชันใหม่:
- การเปลี่ยนไปใช้ Rust 1.58.0 รุ่นเสถียรเป็นคอมไพเลอร์อ้างอิงได้ถูกสร้างขึ้นแล้ว ท่ามกลางการเปลี่ยนแปลงที่จำเป็นสำหรับโปรเจ็กต์ ซึ่งยังไม่ได้รวมอยู่ในชุดเครื่องมือหลักของ Rust แฟล็ก “-Z Symbol-mangling-version=v0” (คาดหวังใน Rust 1.59.0) และโหมด “maybe_uninit_extra” (คาดหวังใน Rust 1.60.0) .XNUMX) ถูกบันทึกไว้
- เพิ่มการตรวจสอบอัตโนมัติสำหรับความพร้อมใช้งานของเครื่องมือ Rust ที่เหมาะสม และขยายความสามารถในการทดสอบการรองรับ Rust ในระบบ
- มีการเสนอบทคัดย่อใหม่สำหรับการเข้าถึงตารางตัวระบุอุปกรณ์ (“IdArray” และ “IdTable”) จากโค้ด Rust
- เพิ่มเลเยอร์สำหรับการเข้าถึงฟังก์ชันที่เกี่ยวข้องกับตัวจับเวลา (เฟรมเวิร์กนาฬิกา)
- ขณะนี้ไดรเวอร์แพลตฟอร์มถูกกำหนดผ่านการใช้งานคุณลักษณะ
- มีการเพิ่มมาโครใหม่เพื่อทำให้การลงทะเบียนไดรเวอร์แพลตฟอร์มง่ายขึ้น และมีการเสนอเทมเพลตไดรเวอร์ทั่วไปใหม่
- เพิ่มมาโครสำหรับโครงสร้าง "dev_*"
- เพิ่มวิธีการ "{read,write}*_relaxed" สำหรับประเภท IoMem -
- ลบคุณสมบัติ FileOpener เพื่อให้การดำเนินการไฟล์ง่ายขึ้น
- เพิ่มพารามิเตอร์ "ThisModule" ให้กับอาร์กิวเมนต์ที่ส่งผ่านเมื่อลงทะเบียนไดรเวอร์
- มีการเสนอเทมเพลตมาตรฐานสำหรับการสร้างโมดูลเคอร์เนลในภาษา Rust
ที่มา: opennet.ru