หกเดือนหลังจากการตีพิมพ์ฉบับที่สอง, มิเกล โอเจด้าผู้เขียนโครงการ Rust-for-Linux ทำให้ทราบข้อเสนอของทางเลือกที่สาม สำหรับการพัฒนาไดรเวอร์อุปกรณ์ในภาษา Rust ใน Linux Kernel
การสนับสนุนการเกิดสนิมถือเป็นการทดลอง แต่ได้มีการตกลงที่จะรวมไว้ในสาขา linux-next แล้ว การพัฒนาได้รับทุนจาก Google และองค์กร ISRG (Internet Security Research Group) ซึ่งเป็นผู้ก่อตั้งโครงการ Let's Encrypt และมีส่วนช่วยในการส่งเสริม HTTPS และการพัฒนาเทคโนโลยีเพื่อปรับปรุงความปลอดภัยทางอินเทอร์เน็ต
ควรจำไว้ว่าการเปลี่ยนแปลงที่เสนอให้ Rust ถูกใช้เป็นภาษาที่สองในการพัฒนาไดรเวอร์เคอร์เนลและโมดูล
การสนับสนุน Rust ถูกโฆษณาเป็นตัวเลือกที่ไม่ได้ใช้งานโดยค่าเริ่มต้น และไม่ส่งผลให้ Rust ถูกรวมอยู่ในการพึ่งพาการสร้างพื้นฐานที่จำเป็น การใช้ Rust สำหรับการพัฒนาไดรเวอร์จะช่วยให้คุณสร้างไดรเวอร์ที่ดีขึ้นและปลอดภัยยิ่งขึ้นด้วยความพยายามเพียงเล็กน้อย โดยไม่ต้องวุ่นวายกับการเข้าถึงพื้นที่หน่วยความจำเมื่อว่างแล้ว ยกเลิกการอ้างอิงพอยน์เตอร์ว่าง และเกินขีดจำกัดของบัฟเฟอร์
แพตช์เวอร์ชันใหม่ยังคงลบความคิดเห็นที่เกิดขึ้นระหว่างการสนทนาเกี่ยวกับแพตช์เวอร์ชันแรกและเวอร์ชันที่สอง และการเปลี่ยนแปลงที่โดดเด่นที่สุดที่เราพบ:
เปลี่ยนเป็นเวอร์ชันเสถียรของ Rust 1.57 ในฐานะคอมไพเลอร์อ้างอิงและการผูกมัดกับรุ่นเสถียรของภาษา Rust 2021 ได้รับการรักษาความปลอดภัยแล้ว การเปลี่ยนไปใช้ข้อกำหนด Rust 2021 pได้รับอนุญาตให้เริ่มทำงานเพื่อหลีกเลี่ยงการใช้คุณสมบัติที่ไม่เสถียรดังกล่าว ในแพตช์เช่น const_fn_transmute, const_panic, const_unreachable_unchecked และ core_panic และ try_reserve
และยังโดดเด่นอีกด้วย การพัฒนาเวอร์ชันการจัดสรรยังคงดำเนินต่อไป จากไลบรารี Rust ในเวอร์ชันใหม่ มีการใช้ตัวเลือก "no_rc" และ "no_sync" เพื่อปิดใช้งานฟังก์ชันนี้ ซึ่งไม่ได้ใช้ในโค้ด Rust สำหรับเคอร์เนล ทำให้ไลบรารีเป็นแบบโมดูลาร์มากขึ้น เรายังคงทำงานร่วมกับผู้พัฒนาที่จัดสรรหลักเพื่อนำการเปลี่ยนแปลงเคอร์เนลที่จำเป็นมาสู่ไลบรารีหลัก ตัวเลือก "no_fp_fmt_parse" ซึ่งจำเป็นสำหรับไลบรารีในการทำงานที่ระดับเคอร์เนล ได้ถูกย้ายไปยังไลบรารีฐานของ Rust (เคอร์เนล)
ล้างโค้ดเพื่อลบคำเตือนของคอมไพเลอร์ที่เป็นไปได้ เมื่อรวบรวมเคอร์เนลในโหมด CONFIG_WERROR เมื่อสร้างโค้ดใน Rust โหมดคอมไพเลอร์การวินิจฉัยเพิ่มเติมและคำเตือนเกี่ยวกับ Clippy linter จะรวมอยู่ด้วย
พวกเขาเสนอ นามธรรมเพื่อใช้ seqlocks (ล็อคลำดับ), การเรียกเรียกกลับสำหรับการจัดการพลังงาน, หน่วยความจำ I / O (readX / writeX), ตัวจัดการการขัดจังหวะและเธรด, GPIO, การเข้าถึงอุปกรณ์, ไดรเวอร์ และข้อมูลประจำตัวในรหัสสนิม
มีการขยายเครื่องมือพัฒนาไดรเวอร์ ด้วยการใช้ mutexes ที่เปลี่ยนตำแหน่งได้ ตัววนซ้ำบิต การเชื่อมโยงที่ง่ายขึ้นบนพอยน์เตอร์ การวินิจฉัยข้อผิดพลาดที่ปรับปรุง และโครงสร้างพื้นฐานที่ไม่ขึ้นกับบัสข้อมูล
ปรับปรุงการทำงานกับลิงก์โดยใช้ Ref type ง่ายขึ้น โดยอิงตามแบ็กเอนด์ refcount_t ซึ่งใช้ API กลางที่มีชื่อเดียวกันเพื่อนับการอ้างอิง การสนับสนุนสำหรับประเภท Arc และ Rc ที่มีให้ในไลบรารีการแมปมาตรฐานถูกลบออกและไม่สามารถใช้ได้ในโค้ดที่รันที่ระดับเคอร์เนล
เพิ่มเวอร์ชันของไดรเวอร์ PL061 GPIO ที่เขียนใหม่ใน Rust ลงในแพตช์แล้ว คุณลักษณะของไดรเวอร์คือการใช้งานแบบบรรทัดต่อบรรทัดซ้ำกับไดรเวอร์ C GPIO ที่มีอยู่ สำหรับนักพัฒนาที่ต้องการทำความคุ้นเคยกับตัวควบคุมอาคารใน Rust ได้มีการเตรียมการเปรียบเทียบแบบทีละบรรทัดซึ่งช่วยให้เข้าใจว่าโค้ด C ของ Rust สร้างขึ้นคืออะไร
ฐานข้อมูลหลักของ Rust ใช้ rustc_codegen_gcc ซึ่งเป็นแบ็กเอนด์ rustc สำหรับ GCC ที่ใช้การคอมไพล์ AOT โดยใช้ไลบรารี libgccjit ด้วยการพัฒนาแบ็กเอนด์อย่างเหมาะสม มันจะช่วยให้คุณรวบรวมรหัส Rust ที่เกี่ยวข้องกับเคอร์เนลโดยใช้ GCC
นอกจาก ARM, Google และ Microsoft แล้ว Red Hat ยังแสดงความสนใจในการใช้ Rust ในเคอร์เนล Linux
สุดท้ายนี้ หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม สามารถปรึกษารายละเอียด ในลิงค์ต่อไปนี้.