Versi kelapan patch untuk kernel Linux dengan sokongan untuk bahasa Rust

Miguel Ojeda, pengarang projek Rust-for-Linux, mencadangkan pelepasan komponen v8 untuk membangunkan pemacu peranti dalam bahasa Rust untuk dipertimbangkan oleh pembangun kernel Linux. Ini ialah versi patch yang disemak, dengan mengambil kira versi pertama, diterbitkan tanpa nombor versi. Sokongan karat dianggap eksperimen, tetapi sudah termasuk dalam cawangan linux-seterusnya, mendakwa untuk disepadukan ke dalam keluaran musim gugur 5.20/6.0, dan cukup matang untuk memulakan kerja mencipta lapisan abstraksi ke atas subsistem kernel, serta menulis pemacu dan modul. Pembangunan ini dibiayai oleh Google dan ISRG (Kumpulan Penyelidikan Keselamatan Internet), yang merupakan pengasas projek Let's Encrypt dan mempromosikan HTTPS dan pembangunan teknologi untuk meningkatkan keselamatan Internet.

Dalam versi baharu:

  • Kit alat dan varian pustaka alloc, bebas daripada kemungkinan penjanaan keadaan "panik" apabila ralat berlaku, telah dikemas kini untuk keluaran Rust 1.62. Berbanding dengan versi yang digunakan sebelum ini, kit alat Rust telah menstabilkan sokongan untuk kefungsian const_fn_trait_bound yang digunakan dalam patch kernel.
  • Kod pengikatan dipisahkan ke dalam "binding" pakej peti berasingan, yang memudahkan pembinaan semula jika perubahan dibuat hanya pada pakej utama "kernel".
  • Pelaksanaan makro "concat_idents!" ditulis semula dalam bentuk makro prosedur yang tidak terikat dengan fungsi concat_idents dan membenarkan penggunaan rujukan kepada pembolehubah tempatan.
  • Makro β€œstatic_assert!” telah ditulis semula, membenarkan penggunaan β€œcore::assert!()” dalam sebarang konteks dan bukannya pemalar.
  • Makro "build_error!" disesuaikan untuk berfungsi apabila mod "RUST_BUILD_ASSERT_{WARN,ALLOW}" ditetapkan untuk modul.
  • Menambahkan fail berasingan dengan tetapan "kernel/configs/rust.config".
  • Fail "*.i" yang diproses dalam penggantian makro telah dinamakan semula kepada "*.rsi".
  • Sokongan untuk membina komponen Rust dengan tahap pengoptimuman berbeza daripada yang digunakan untuk kod C telah dihentikan.
  • Menambah modul fs, yang menyediakan pengikatan untuk bekerja dengan sistem fail. Contoh sistem fail ringkas yang ditulis dalam Rust disediakan.
  • Menambah modul gilir kerja untuk bekerja dengan baris gilir sistem (menyediakan pengikatan pada struktur kernel work_struct dan workqueue_struct).
  • Pembangunan modul kasync diteruskan dengan pelaksanaan kaedah pengaturcaraan tak segerak (async). Menambah contoh pelayan TCP peringkat teras yang ditulis dalam Rust.
  • Menambahkan keupayaan untuk mengendalikan gangguan dalam bahasa Rust menggunakan jenis [Threaded]Handler dan [Threaded]Registration`.
  • Menambahkan makro prosedural "#[vtable]" untuk memudahkan kerja dengan jadual penunjuk fungsi, seperti struktur operasi_fail.
  • Menambahkan pelaksanaan senarai terpaut dua hala "unsafe_list::List".
  • Menambahkan sokongan awal untuk RCU (Baca-salin-kemas kini) dan jenis Pengawal untuk menyemak sama ada kunci baca terikat pada urutan semasa.
  • Tugas Ditambah::spawn() berfungsi untuk mencipta dan memulakan benang kernel secara automatik. Juga menambah kaedah Task::wake_up().
  • Menambah modul kelewatan yang membolehkan anda menggunakan kelewatan (pembungkus atas msleep()).

Perubahan yang dicadangkan memungkinkan untuk menggunakan Rust sebagai bahasa kedua untuk membangunkan modul pemacu dan kernel. Sokongan Rust dibentangkan sebagai pilihan yang tidak didayakan secara lalai dan tidak menyebabkan Rust dimasukkan sebagai pergantungan binaan yang diperlukan untuk kernel. Menggunakan Rust untuk pembangunan pemacu akan membolehkan anda mencipta pemacu yang lebih selamat dan lebih baik dengan usaha yang minimum, bebas daripada masalah seperti akses memori selepas dibebaskan, penyimpangan penuding nol dan overrun penimbal.

Keselamatan memori disediakan dalam Rust pada masa penyusunan melalui semakan rujukan, menjejaki pemilikan objek dan jangka hayat objek (skop), serta melalui penilaian ketepatan akses memori semasa pelaksanaan kod. Rust juga menyediakan perlindungan terhadap limpahan integer, memerlukan permulaan mandatori nilai pembolehubah sebelum digunakan, mengendalikan ralat dengan lebih baik dalam perpustakaan standard, menggunakan konsep rujukan tidak berubah dan pembolehubah secara lalai, menawarkan penaipan statik yang kuat untuk meminimumkan ralat logik.

Sumber: opennet.ru

Tambah komen