แพทช์เคอร์เนลฉบับที่ห้า Linux พร้อมการสนับสนุนภาษา Rust

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

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

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

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

  • มีการเพิ่มการตรวจสอบส่วนประกอบ Rust ลงในระบบการรวมระบบอย่างต่อเนื่องโดยใช้บอท 0DAY/LKP ที่ได้รับการสนับสนุนจาก Intel และรายงานการทดสอบได้เริ่มเผยแพร่แล้ว การรวมการรองรับ Rust เข้ากับระบบทดสอบอัตโนมัติ KernelCI อยู่ระหว่างการเตรียมการ การทดสอบ CI ของ GitHub ได้ถูกย้ายไปยังคอนเทนเนอร์แล้ว
  • โมดูลเคอร์เนล Rust ไม่จำเป็นต้องกำหนดแอตทริบิวต์ crate "#![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)
  • ไดรเวอร์ PL061 GPIO ถูกสลับไปใช้แมโคร "dev_*!"
  • ดำเนินการล้างโค้ดทั่วไป

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster