Patch edisi kedua untuk kernel Linux dengan dukungan untuk bahasa Rust

Miguel Ojeda, penulis proyek Rust-for-Linux, mengusulkan versi terbaru komponen untuk mengembangkan driver perangkat dalam bahasa Rust untuk dipertimbangkan oleh pengembang kernel Linux. Dukungan Rust dianggap eksperimental, tetapi telah disepakati untuk dimasukkan dalam cabang linux-next. Versi baru ini menghilangkan komentar yang dibuat selama diskusi tentang patch versi pertama. Linus Torvalds telah bergabung dalam diskusi dan mengusulkan perubahan logika untuk memproses beberapa operasi bit.

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.

Perubahan paling mencolok pada patch versi baru:

  • Kode alokasi memori dibebaskan dari potensi menimbulkan keadaan "panik" ketika terjadi kesalahan seperti kehabisan memori. Varian dari perpustakaan alokasi Rust disertakan, yang mengerjakan ulang kode untuk menangani kegagalan, tetapi tujuan utamanya adalah untuk mentransfer semua fitur yang diperlukan untuk kernel ke edisi utama alokasi (perubahan telah disiapkan dan ditransfer ke standar perpustakaan karat).
  • Daripada membangun setiap malam, Anda sekarang dapat menggunakan rilis beta dan rilis stabil dari kompiler Rust untuk mengkompilasi kernel dengan dukungan Rust. Saat ini, Rustc 1.54-beta1 digunakan sebagai kompiler referensi, tetapi setelah rilis 1.54 dirilis pada akhir bulan, maka akan didukung sebagai kompiler referensi.
  • Menambahkan dukungan untuk menulis tes menggunakan atribut standar “#[test]” untuk Rust dan kemampuan untuk menggunakan doctests untuk mendokumentasikan tes.
  • Menambahkan dukungan untuk arsitektur ARM32 dan RISCV selain x86_64 dan ARM64 yang didukung sebelumnya.
  • Peningkatan implementasi GCC Rust (frontend GCC untuk Rust) dan Rustc_codegen_gcc (backend Rustc untuk GCC), yang kini lolos semua pengujian dasar.
  • Tingkat abstraksi baru diusulkan untuk digunakan dalam program Rust dari mekanisme kernel yang ditulis dalam C, seperti pohon merah-hitam, objek yang dihitung referensi, pembuatan deskriptor file, tugas, file, dan vektor I/O.
  • Komponen pengembangan driver telah meningkatkan dukungan untuk modul file_operations, makro modul!, registrasi makro, dan driver dasar (selidiki dan hapus).
  • Binder sekarang mendukung penerusan deskriptor file dan kait LSM.
  • Contoh yang lebih fungsional dari driver Rust diusulkan - bcm2835-rng untuk generator nomor acak perangkat keras papan Raspberry Pi.

Selain itu, beberapa proyek perusahaan yang terkait dengan penggunaan Rust di kernel disebutkan:

  • Microsoft telah menyatakan minatnya untuk berpartisipasi dalam upaya mengintegrasikan dukungan Rust ke dalam kernel Linux dan siap menyediakan implementasi driver untuk Hyper-V di Rust dalam beberapa bulan mendatang.
  • ARM berupaya meningkatkan dukungan Rust untuk sistem berbasis ARM. Proyek Rust telah mengusulkan perubahan yang akan menjadikan sistem ARM 64-bit menjadi platform Tier 1.
  • Google secara langsung memberikan dukungan untuk proyek Rust untuk Linux, sedang mengembangkan implementasi baru mekanisme komunikasi antarproses Binder di Rust, dan sedang mempertimbangkan kemungkinan pengerjaan ulang berbagai driver di Rust. Melalui ISRG (Internet Security Research Group), Google menyediakan dana untuk pekerjaan mengintegrasikan dukungan Rust ke dalam kernel Linux.
  • IBM telah mengimplementasikan dukungan kernel untuk sistem Rust for PowerPC.
  • Laboratorium LSE (Laboratorium Penelitian Sistem) telah mengembangkan driver SPI di Rust.

Sumber: opennet.ru

Tambah komentar