แพตช์รุ่นที่ห้าสำหรับเคอร์เนล 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 ได้ถูกเพิ่มเข้าไปในระบบบูรณาการอย่างต่อเนื่องโดยใช้บอท 0DAY/LKP ที่สนับสนุนโดย Intel และการเผยแพร่รายงานการทดสอบได้เริ่มขึ้นแล้ว เรากำลังเตรียมที่จะรวมการสนับสนุน Rust เข้ากับระบบทดสอบอัตโนมัติ KernelCI การทดสอบตาม GitHub CI ได้รับการโอนไปยังการใช้คอนเทนเนอร์แล้ว
  • โมดูลเคอร์เนล Rust เป็นอิสระจากความจำเป็นในการกำหนดแอตทริบิวต์ลัง “#![no_std]” และ “#![feature(…)]”
  • เพิ่มการรองรับเป้าหมายการประกอบเดี่ยว (.o, .s, .ll และ .i)
  • หลักเกณฑ์ด้านรหัสกำหนดกฎสำหรับการแยกความคิดเห็น (“//”) และรหัสเอกสาร (“///”)
  • สคริปต์ is_rust_module.sh ได้รับการแก้ไขแล้ว
  • เพิ่มการสนับสนุนสำหรับการซิงโครไนซ์แบบดั้งเดิมแบบคงที่ (ตัวแปรที่ใช้ร่วมกันทั่วโลก) ตามการใช้งาน "CONFIG_CONSTRUCTORS"
  • การจัดการล็อคทำได้ง่ายขึ้น: Guard และ GuardMut ถูกรวมเข้าด้วยกันและเป็นประเภทที่กำหนดพารามิเตอร์หนึ่งประเภท
  • สามารถกำหนดพารามิเตอร์เพิ่มเติมได้เมื่อลงทะเบียนอุปกรณ์
  • เพิ่มนามธรรม "RwSemaphore" ซึ่งทำหน้าที่เป็นตัวหุ้มเหนือโครงสร้าง rw_semaphore C
  • หากต้องการใช้ mmap จึงมีการเพิ่มโมดูล mm ใหม่และนามธรรม VMA (ตัวหุ้มเหนือโครงสร้าง vm_area_struct)
  • ไดรเวอร์ GPIO PL061 ได้รับการสลับไปใช้มาโคร "dev_*!"
  • ดำเนินการล้างโค้ดทั่วไป

ที่มา: opennet.ru

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