Patch edisi keempat untuk kernel Linux dengan dukungan untuk bahasa Rust

Miguel Ojeda, penulis proyek Rust-for-Linux, mengusulkan komponen versi keempat untuk mengembangkan driver perangkat dalam bahasa Rust untuk dipertimbangkan oleh pengembang kernel Linux. Dukungan Rust dianggap eksperimental, namun telah disepakati untuk dimasukkan dalam cabang linux-next dan cukup matang untuk mulai bekerja membuat lapisan abstraksi pada subsistem kernel, serta menulis driver dan modul. Pengembangan ini didanai oleh Google dan ISRG (Internet Security Research Group), yang merupakan pendiri proyek Let's Encrypt dan mempromosikan HTTPS serta pengembangan teknologi untuk meningkatkan keamanan Internet.

Ingatlah bahwa perubahan yang diusulkan memungkinkan penggunaan Rust sebagai bahasa kedua untuk mengembangkan driver dan modul kernel. Dukungan Rust disajikan sebagai opsi yang tidak diaktifkan secara default dan tidak mengakibatkan Rust disertakan sebagai dependensi build yang diperlukan untuk kernel. Menggunakan Rust untuk pengembangan driver akan memungkinkan Anda membuat driver yang lebih aman dan lebih baik dengan sedikit usaha, bebas dari masalah seperti akses memori setelah pembebasan, dereferensi penunjuk nol, dan buffer overruns.

Penanganan aman-memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek dan masa pakai objek (cakupan), serta melalui evaluasi kebenaran akses memori selama eksekusi kode. Rust juga memberikan perlindungan terhadap integer overflow, membutuhkan inisialisasi wajib dari nilai variabel sebelum digunakan, menangani kesalahan dengan lebih baik di perpustakaan standar, menerapkan konsep referensi dan variabel yang tidak dapat diubah secara default, menawarkan pengetikan statis yang kuat untuk meminimalkan kesalahan logis.

Patch versi baru terus menghilangkan komentar yang dibuat selama diskusi patch edisi pertama, kedua dan ketiga. Dalam versi baru:

  • Transisi untuk menggunakan rilis stabil Rust 1.58.0 sebagai kompiler referensi telah dilakukan. Di antara perubahan yang diperlukan untuk proyek ini, yang belum disertakan dalam toolkit utama Rust, flag “-Zsymbol-mangling-version=v0” (diharapkan di Rust 1.59.0) dan mode “maybe_uninit_extra” (diharapkan di Rust 1.60.0 .XNUMX) dicatat. .
  • Menambahkan pemeriksaan otomatis untuk ketersediaan alat Rust yang sesuai dan memperluas kemampuan untuk menguji dukungan Rust di sistem.
  • Abstraksi baru telah diusulkan untuk mengakses tabel pengidentifikasi perangkat (“IdArray” dan “IdTable”) dari kode Rust.
  • Menambahkan lapisan untuk mengakses fungsi terkait pengatur waktu (kerangka jam).
  • Penggerak platform kini ditentukan melalui penerapan sifat.
  • Makro baru telah ditambahkan untuk menyederhanakan pendaftaran driver platform, dan template driver generik baru telah diusulkan.
  • Menambahkan makro untuk struktur "dev_*".
  • Menambahkan metode "{read,write}*_relaxed" untuk tipe IoMem .
  • Menghapus properti FileOpener untuk menyederhanakan operasi file.
  • Parameter “ThisModule” telah ditambahkan ke argumen yang diteruskan saat mendaftarkan driver.
  • Templat standar untuk membuat modul kernel dalam bahasa Rust telah diusulkan.

Sumber: opennet.ru

Tambah komentar