เฟรมเวิร์กสำหรับการเขียนไดรเวอร์ที่ปลอดภัยสำหรับเคอร์เนล Linux ใน Rust

Josh Triplett ซึ่งทำงานที่ Intel และอยู่ในคณะกรรมการดูแลการพัฒนา Crates.io โดยพูดในการประชุมสุดยอดเทคโนโลยีโอเพ่นซอร์ส ส่ง คณะทำงานที่มุ่งนำภาษา Rust ให้มีความเท่าเทียมกับภาษา C ในด้านการเขียนโปรแกรมระบบ

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

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

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

Greg Kroah-Hartman ผู้รับผิดชอบในการรักษาสาขาที่มั่นคงของเคอร์เนล Linux แสดงความพร้อมที่จะเพิ่มเฟรมเวิร์กสำหรับการพัฒนาไดรเวอร์ในภาษา Rust ให้กับเคอร์เนล หากเคอร์เนลมีข้อได้เปรียบเหนือ C อย่างแท้จริง เช่น จะให้ความปลอดภัย การเชื่อมโยงผ่าน Kernel API นอกจากนี้ Greg ถือว่าเฟรมเวิร์กนี้เป็นเพียงตัวเลือกเท่านั้น โดยจะไม่ทำงานตามค่าเริ่มต้น เพื่อที่จะไม่รวม Rust เป็นการพึ่งพาบิลด์บนเคอร์เนล

ปรากฎว่าหลายทีมกำลังทำงานไปในทิศทางนี้แล้ว ตัวอย่างเช่น นักพัฒนาจากบริษัท “Fish in a Barrel” เตรียมไว้ ชุดเครื่องมือสำหรับการเขียนโมดูลที่โหลดได้สำหรับเคอร์เนล Linux ในภาษา Rust โดยใช้ชุดเลเยอร์นามธรรมบนอินเทอร์เฟซและโครงสร้างเคอร์เนลเพื่อเพิ่มความปลอดภัย เลเยอร์จะถูกสร้างขึ้นโดยอัตโนมัติตามไฟล์ส่วนหัวเคอร์เนลที่มีอยู่โดยใช้ยูทิลิตี้ ผูก. เสียงดังกราวใช้ในการสร้างเลเยอร์ นอกจากอินเทอร์เลเยอร์แล้ว โมดูลที่ประกอบยังใช้แพ็คเกจ staticlib

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

แต่เฟรมเวิร์กนั้นค่อนข้างเหมาะสำหรับการทำงานอยู่แล้วและใช้ในการเขียนไดรเวอร์ที่ใช้งานได้สำหรับคอนโทรลเลอร์ LAN9512 USB Ethernet ที่ให้มาในบอร์ด Raspberry Pi 3 ไดรเวอร์ smsc95xx ที่มีอยู่เขียนโดยใน ภาษาซี มีข้อสังเกตว่าขนาดโมดูลและโอเวอร์เฮดจากส่วนประกอบรันไทม์เมื่อพัฒนาไดรเวอร์ใน Rust นั้นไม่มีนัยสำคัญซึ่งทำให้สามารถใช้เฟรมเวิร์กสำหรับอุปกรณ์ที่มีทรัพยากร จำกัด

ที่มา: opennet.ru

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