Patch edisi ketiga untuk kernel Linux dengan dukungan untuk bahasa Rust

Miguel Ojeda, penulis proyek Rust-for-Linux, telah mengusulkan opsi komponen ketiga 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. 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 tentang patch versi pertama dan kedua. Perubahan yang paling mencolok:

  • Transisi telah dilakukan untuk menggunakan rilis stabil Rust 1.57 sebagai kompiler referensi dan tautan ke edisi stabil bahasa Rust 2021 telah disediakan. Sebelumnya, tambalan terkait dengan cabang beta Rust dan menggunakan beberapa fitur bahasa yang diklasifikasikan sebagai tidak stabil. Transisi ke spesifikasi Rust 2021 memungkinkan kami memulai pekerjaan untuk menghindari penggunaan fitur tidak stabil di patch seperti const_fn_transmute, const_panic, const_unavailable_unchecked dan core_panic dan try_reserve.
  • Pengembangan versi alokasi perpustakaan Rust yang disertakan dalam tambalan terus berlanjut, dimodifikasi untuk menghilangkan fungsi alokasi memori dari kemungkinan timbulnya keadaan "panik" ketika terjadi kesalahan, seperti kehabisan memori. Versi baru mengimplementasikan opsi “no_rc” dan “no_sync” untuk menonaktifkan fungsionalitas yang tidak digunakan dalam kode kernel Rust, menjadikan perpustakaan lebih modular. Pekerjaan dilanjutkan dengan pengembang alokasi utama, yang bertujuan untuk mentransfer perubahan yang diperlukan untuk kernel ke perpustakaan utama. Opsi “no_fp_fmt_parse”, yang diperlukan agar perpustakaan dapat berfungsi di tingkat kernel, telah dipindahkan ke perpustakaan dasar Rust (inti).
  • Kode telah dibersihkan untuk menghilangkan kemungkinan peringatan kompiler saat membangun kernel dalam mode CONFIG_WERROR. Saat membuat kode di Rust, mode diagnostik kompiler tambahan dan peringatan linter Clippy diaktifkan.
  • Abstraksi diusulkan untuk digunakan dalam kode Rust untuk seqlocks (kunci urutan), panggilan panggilan balik untuk manajemen daya, Memori I/O (readX/writeX), penangan interupsi dan thread, GPIO, akses ke perangkat, driver, dan kredensial.
  • Alat untuk pengembangan driver telah diperluas untuk mencakup mutex yang dapat direlokasi, bit iterator, pengikatan pointer yang disederhanakan, diagnostik kesalahan yang ditingkatkan, dan infrastruktur bus data yang independen.
  • Peningkatan pekerjaan dengan tautan menggunakan tipe Ref yang disederhanakan, berdasarkan backend refcount_t, yang menggunakan API kernel dengan nama yang sama untuk menghitung referensi. Dukungan untuk tipe Arc dan Rc yang disediakan di pustaka alokasi standar telah dihapus dan tidak tersedia dalam kode yang dieksekusi di tingkat kernel (opsi telah disiapkan untuk pustaka itu sendiri yang menonaktifkan tipe ini).
  • Tambalan tersebut mencakup versi driver PL061 GPIO, yang ditulis ulang dalam Rust. Keistimewaan driver ini adalah implementasinya hampir baris demi baris mengulangi driver GPIO yang ada dalam bahasa C. Untuk pengembang yang ingin mengenal cara membuat driver di Rust, perbandingan baris demi baris telah disiapkan yang memungkinkan mereka memahami konstruksi mana di Rust yang diubah menjadi kode C.
  • Basis kode Rust utama telah mengadopsi Rustc_codegen_gcc, sebuah backend Rust untuk GCC yang mengimplementasikan kompilasi sebelumnya (AOT) menggunakan perpustakaan libgccjit. Dengan pengembangan backend yang tepat, Anda dapat mengumpulkan kode Rust yang terlibat dalam kernel menggunakan GCC.
  • Selain ARM, Google dan Microsoft, Red Hat telah menyatakan minatnya untuk menggunakan bahasa Rust di kernel Linux. Ingatlah bahwa 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. Microsoft telah mulai mengimplementasikan driver untuk Hyper-V di Rust. ARM berupaya meningkatkan dukungan Rust untuk sistem berbasis ARM. IBM telah mengimplementasikan dukungan kernel untuk sistem Rust for PowerPC.

Sumber: opennet.ru

Tambah komentar