แพตช์รุ่นที่สี่สำหรับเคอร์เนล Linux ที่รองรับภาษา Rust

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

เพิ่มความคิดเห็น