Rangka kerja untuk menulis pemacu selamat untuk kernel Linux dalam Rust

Josh Triplett, yang bekerja di Intel dan berada dalam jawatankuasa yang menyelia pembangunan Crates.io, bercakap di Sidang Kemuncak Teknologi Sumber Terbuka diperkenalkan kumpulan kerja yang bertujuan untuk membawa bahasa Rust kepada persamaan dengan bahasa C dalam bidang pengaturcaraan sistem.

Dalam kumpulan kerja yang sedang dalam proses penciptaan, pembangun Rust, bersama-sama dengan jurutera dari Intel, akan menyediakan spesifikasi yang mentakrifkan fungsi yang perlu dilaksanakan dalam Rust untuk pengaturcaraan sistem. Pengaturcaraan sistem selalunya memerlukan manipulasi peringkat rendah, seperti melaksanakan arahan pemproses istimewa dan mendapatkan maklumat terperinci tentang keadaan pemproses. Daripada ciri serupa yang telah dibangunkan untuk Rust, sokongan untuk struktur tidak dinamakan, kesatuan, sisipan bahasa himpunan (makro β€œasm!”) dan format nombor titik terapung BFLOAT16 dicatatkan.

Josh percaya bahawa masa depan pengaturcaraan sistem adalah milik Rust, dan bahasa C dalam realiti moden menuntut tempat yang pada tahun lalu diduduki oleh Assembly. karat
bukan sahaja melegakan pembangun daripada masalah yang wujud dalam bahasa C yang timbul akibat kerja tahap rendah dengan ingatan, tetapi juga memberi peluang untuk menggunakannya dalam pembangunan paradigma pengaturcaraan moden.

Semasa perbincangan persembahan
Josh datang dengan idea untuk menambah keupayaan untuk membangunkan pemacu dalam kernel Linux dalam bahasa Rust, yang akan memungkinkan untuk mencipta pemandu yang lebih selamat dan lebih baik dengan usaha yang minimum, bebas daripada masalah seperti akses memori selepas dibebaskan, null penyimpangan penunjuk dan overrun penimbal.

Greg Kroah-Hartman, yang bertanggungjawab untuk mengekalkan cawangan stabil kernel Linux, menyatakan kesediaannya untuk menambah rangka kerja untuk membangunkan pemacu dalam bahasa Rust ke kernel jika ia mempunyai kelebihan sebenar berbanding C, sebagai contoh, ia akan memberikan selamat pengikatan melalui API Kernel. Di samping itu, Greg menganggap rangka kerja ini hanya sebagai pilihan, tidak aktif secara lalai, supaya tidak memasukkan Rust sebagai pergantungan binaan pada kernel.

Ternyata beberapa pasukan sudah pun berusaha ke arah ini. Sebagai contoh, pemaju dari syarikat "Ikan dalam Tong" disediakan kit alat untuk menulis modul boleh dimuatkan untuk kernel Linux dalam bahasa Rust, menggunakan satu set lapisan abstrak di atas antara muka dan struktur kernel untuk meningkatkan keselamatan. Lapisan dijana secara automatik berdasarkan fail pengepala kernel sedia ada menggunakan utiliti bindgen. Clang digunakan untuk membina lapisan. Sebagai tambahan kepada interlayer, modul yang dipasang menggunakan pakej staticlib.

Selari sedang berkembang Satu lagi projek memberi tumpuan kepada membangunkan pemacu untuk sistem terbenam dan peranti IoT, yang juga menggunakan bindgen untuk menjana lapisan berdasarkan fail pengepala kernel. Rangka kerja ini membolehkan anda meningkatkan keselamatan pemandu tanpa membuat perubahan pada kernel - bukannya mencipta tahap pengasingan tambahan untuk pemacu dalam kernel, ia dicadangkan untuk menyekat masalah pada peringkat penyusunan, menggunakan bahasa Rust yang lebih selamat. Adalah diandaikan bahawa pendekatan sedemikian mungkin diperlukan oleh pengeluar peralatan yang membangunkan pemandu proprietari secara tergesa-gesa tanpa menjalankan audit yang sewajarnya.

Tidak semua fungsi yang dimaksudkan masih lagi dilaksanakan, tetapi rangka kerja itu sudah cukup sesuai untuk kerja dan digunakan untuk menulis pemacu yang berfungsi untuk pengawal LAN9512 USB Ethernet yang dibekalkan dalam papan Raspberry Pi 3. Pemacu smsc95xx sedia ada, ditulis oleh dalam bahasa C. Adalah diperhatikan bahawa saiz modul dan overhed daripada komponen masa jalan semasa membangunkan pemacu dalam Rust adalah tidak penting, yang membolehkan rangka kerja digunakan untuk peranti dengan sumber terhad.

Sumber: opennet.ru

Tambah komen