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

Miguel Ojeda ผู้เขียนโครงการ Rust-for-Linux เสนอส่วนประกอบเวอร์ชันอัปเดตสำหรับการพัฒนาไดรเวอร์อุปกรณ์ในภาษา Rust เพื่อพิจารณาโดยนักพัฒนาเคอร์เนล Linux การสนับสนุน Rust ถือเป็นการทดลอง แต่ได้รับการตกลงให้รวมไว้ในสาขา linux-next แล้ว เวอร์ชันใหม่จะขจัดความคิดเห็นที่เกิดขึ้นระหว่างการอภิปรายเกี่ยวกับแพตช์เวอร์ชันแรก Linus Torvalds ได้เข้าร่วมการสนทนาแล้วและเสนอให้เปลี่ยนตรรกะสำหรับการประมวลผลการดำเนินการบิตบางส่วน

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

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

การเปลี่ยนแปลงที่เห็นได้ชัดเจนที่สุดในแพตช์เวอร์ชันใหม่:

  • รหัสการจัดสรรหน่วยความจำจะปลอดจากการสร้างสถานะ "ตื่นตระหนก" เมื่อเกิดข้อผิดพลาด เช่น หน่วยความจำไม่เพียงพอ มีการรวมเวอร์ชันของไลบรารี Rust alloc ไว้ด้วย ซึ่งนำโค้ดกลับมาใช้ใหม่เพื่อจัดการกับความล้มเหลว แต่เป้าหมายสูงสุดคือการถ่ายโอนคุณสมบัติทั้งหมดที่จำเป็นสำหรับเคอร์เนลไปยังรุ่นหลักของการจัดสรร (การเปลี่ยนแปลงได้ถูกจัดเตรียมและถ่ายโอนไปยังมาตรฐานแล้ว ห้องสมุดสนิม)
  • แทนที่จะสร้างทุกคืน ตอนนี้คุณสามารถใช้คอมไพเลอร์rustcรุ่นเบต้าและรุ่นเสถียรเพื่อคอมไพล์เคอร์เนลด้วยการรองรับ Rust ปัจจุบัน Rustc 1.54-beta1 ถูกใช้เป็นคอมไพเลอร์อ้างอิง แต่หลังจากปล่อย 1.54 ในช่วงปลายเดือน ก็จะได้รับการสนับสนุนเป็นคอมไพเลอร์อ้างอิง
  • เพิ่มการรองรับสำหรับการเขียนการทดสอบโดยใช้แอตทริบิวต์ #[test]” มาตรฐานสำหรับ Rust และความสามารถในการใช้ doctests เพื่อจัดทำเอกสารการทดสอบ
  • เพิ่มการรองรับสถาปัตยกรรม ARM32 และ RISCV นอกเหนือจากการรองรับ x86_64 และ ARM64 ก่อนหน้านี้
  • ปรับปรุงการใช้งาน GCC Rust (ส่วนหน้า GCC สำหรับ Rust) และrustc_codegen_gcc (แบ็กเอนด์rustc สำหรับ GCC) ซึ่งขณะนี้ผ่านการทดสอบพื้นฐานทั้งหมดแล้ว
  • มีการเสนอระดับใหม่ของนามธรรมเพื่อใช้ในโปรแกรม Rust ของกลไกเคอร์เนลที่เขียนด้วยภาษาซี เช่น ต้นไม้สีแดงดำ วัตถุที่นับจำนวนอ้างอิง การสร้างตัวอธิบายไฟล์ งาน ไฟล์ และเวกเตอร์ I/O
  • ส่วนประกอบการพัฒนาไดรเวอร์ได้รับการปรับปรุงการรองรับสำหรับโมดูล file_operations, โมดูล! มาโคร, การลงทะเบียนแมโคร และไดรเวอร์พื้นฐาน (ตรวจสอบและลบ)
  • ขณะนี้ Binder รองรับการส่งไฟล์ descriptors และ LSM hooks
  • มีการเสนอตัวอย่างการใช้งานเพิ่มเติมของไดรเวอร์ Rust - bcm2835-rng สำหรับตัวสร้างตัวเลขสุ่มฮาร์ดแวร์ของบอร์ด Raspberry Pi

นอกจากนี้ ยังมีการกล่าวถึงโครงการของบริษัทบางแห่งที่เกี่ยวข้องกับการใช้ Rust ในเคอร์เนลด้วย:

  • Microsoft ได้แสดงความสนใจในการเข้าร่วมในงานเพื่อรวมการสนับสนุน Rust เข้ากับเคอร์เนล Linux และพร้อมที่จะให้บริการการใช้งานไดรเวอร์สำหรับ Hyper-V บน Rust ในอีกไม่กี่เดือนข้างหน้า
  • ARM กำลังทำงานเพื่อปรับปรุงการรองรับ Rust สำหรับระบบที่ใช้ ARM โครงการ Rust ได้เสนอการเปลี่ยนแปลงที่จะทำให้ระบบ ARM 64 บิตเป็นแพลตฟอร์ม Tier 1 แล้ว
  • Google ให้การสนับสนุนโดยตรงสำหรับโครงการ Rust สำหรับ Linux กำลังพัฒนาการใช้งานกลไกการสื่อสารระหว่างกระบวนการ Binder ใหม่ใน Rust และกำลังพิจารณาความเป็นไปได้ในการทำงานไดรเวอร์ต่างๆ ใน ​​Rust ใหม่ Google ได้จัดหาเงินทุนสำหรับการทำงานเพื่อรวมการสนับสนุน Rust เข้ากับเคอร์เนล Linux ผ่าน ISRG (กลุ่มวิจัยความปลอดภัยทางอินเทอร์เน็ต)
  • IBM ได้ดำเนินการสนับสนุนเคอร์เนลสำหรับ Rust สำหรับระบบ PowerPC
  • ห้องปฏิบัติการ LSE (Systems Research Laboratory) ได้พัฒนาไดรเวอร์ SPI ใน Rust

ที่มา: opennet.ru

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