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

Miguel Ojeda ผู้เขียนโครงการ Rust-for-Linux เสนอการเปิดตัวส่วนประกอบ v5 สำหรับการพัฒนาไดรเวอร์อุปกรณ์ในภาษา Rust เพื่อพิจารณาโดยนักพัฒนาเคอร์เนล Linux นี่เป็นแพทช์รุ่นที่หก โดยคำนึงถึงเวอร์ชันแรก ซึ่งเผยแพร่โดยไม่มีหมายเลขเวอร์ชัน การสนับสนุน Rust ถือเป็นการทดลอง แต่ได้รวมอยู่ในสาขา linux-next แล้ว และได้รับการพัฒนาอย่างเพียงพอที่จะเริ่มทำงานในการสร้างเลเยอร์นามธรรมเหนือระบบย่อยเคอร์เนล เช่นเดียวกับการเขียนไดรเวอร์และโมดูล การพัฒนานี้ได้รับทุนจาก Google และ ISRG (Internet Security Research Group) ซึ่งเป็นผู้ก่อตั้งโครงการ Let's Encrypt และส่งเสริม HTTPS และการพัฒนาเทคโนโลยีเพื่อปรับปรุงความปลอดภัยของอินเทอร์เน็ต

โปรดจำไว้ว่าการเปลี่ยนแปลงที่เสนอทำให้สามารถใช้ Rust เป็นภาษาที่สองในการพัฒนาไดรเวอร์และโมดูลเคอร์เนลได้ การสนับสนุน Rust จะแสดงเป็นตัวเลือกที่ไม่ได้เปิดใช้งานตามค่าเริ่มต้น และไม่ส่งผลให้ Rust ถูกรวมไว้เป็นการพึ่งพาการสร้างที่จำเป็นสำหรับเคอร์เนล การใช้ Rust สำหรับการพัฒนาไดรเวอร์จะช่วยให้คุณสร้างไดรเวอร์ที่ปลอดภัยและดีขึ้นได้โดยใช้ความพยายามเพียงเล็กน้อย ปราศจากปัญหาต่างๆ เช่น การเข้าถึงหน่วยความจำหลังจากปล่อยว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ และบัฟเฟอร์มากเกินไป

การจัดการที่ปลอดภัยต่อหน่วยความจำมีให้ใน Rust ณ เวลาคอมไพล์ผ่านการตรวจสอบการอ้างอิง การติดตามความเป็นเจ้าของอ็อบเจกต์และอายุอ็อบเจกต์ (ขอบเขต) ตลอดจนผ่านการประเมินความถูกต้องของการเข้าถึงหน่วยความจำระหว่างการเรียกใช้โค้ด สนิมยังให้การป้องกันการล้นของจำนวนเต็ม, จำเป็นต้องมีการกำหนดค่าเริ่มต้นที่จำเป็นของค่าตัวแปรก่อนใช้งาน, จัดการข้อผิดพลาดได้ดีขึ้นในไลบรารีมาตรฐาน, ใช้แนวคิดของการอ้างอิงและตัวแปรที่ไม่เปลี่ยนรูปแบบตามค่าเริ่มต้น, เสนอการพิมพ์แบบคงที่ที่แข็งแกร่งเพื่อลดข้อผิดพลาดเชิงตรรกะ

แพทช์เวอร์ชันใหม่ยังคงกำจัดความคิดเห็นที่เกิดขึ้นระหว่างการอภิปรายเกี่ยวกับแพทช์รุ่นที่หนึ่ง สอง สาม สี่ และห้า ในเวอร์ชันใหม่:

  • ชุดเครื่องมือได้รับการอัพเดตเพื่อเผยแพร่ Rust 1.59.0 เวอร์ชันหนึ่งของไลบรารี alloc ยังซิงโครไนซ์กับ Rust เวอร์ชันใหม่อีกด้วย โดยกำจัดการสร้างสถานะ “ตื่นตระหนก” ที่อาจเกิดขึ้นเมื่อเกิดข้อผิดพลาด เช่น หน่วยความจำไม่เพียงพอ ความสามารถในการใช้ตัวแทรกแอสเซมเบลอร์ (“ฟีเจอร์(global_asm)”) ได้รับความเสถียรแล้ว
  • เพิ่มการรองรับสำหรับการสร้างโปรแกรมโฮสต์ใน Rust ที่ใช้ระหว่างการคอมไพล์เคอร์เนล
  • แทนที่จะส่งไฟล์ข้อกำหนดแพลตฟอร์มเป้าหมายที่สร้างไว้ล่วงหน้า ไฟล์เหล่านี้จะถูกสร้างขึ้นแบบไดนามิกตามการกำหนดค่าเคอร์เนล
  • เพิ่มพารามิเตอร์เคอร์เนล HAVE_RUST เพื่อเปิดใช้งานสำหรับสถาปัตยกรรมที่รองรับ Rust
  • มีการเสนอบทคัดย่อเพื่อใช้ในโค้ด Rust สำหรับเครื่องกำเนิดตัวเลขสุ่มหลอกด้วยฮาร์ดแวร์
  • อนุญาตให้ใช้รหัสข้อผิดพลาดโดยไม่มีคำนำหน้า "Error::" (เช่น "return Err(EINVAL)") เพื่อประมาณการจัดการรหัสข้อผิดพลาดใน C
  • เพิ่มประเภท "CString" สำหรับ C-strings ที่กำหนดเอง ประเภทฟอร์แมตเตอร์และบัฟเฟอร์ถูกรวมเข้าด้วยกัน
  • เพิ่มประเภท Bool และ LockInfo
  • การใช้งานระบบล็อคแบบหมุนได้รับการทำให้ง่ายขึ้น

ที่มา: opennet.ru

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