Proposal untuk membahas masalah penambahan alat pengembangan Rust ke kernel Linux

Nick Desagnier (Nick Desaulniers), yang bekerja di Google untuk menyediakan mendukung membangun kernel Linux menggunakan kompiler Clang dan juga membantu memperbaiki bug di kompiler Rust, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» diadakan di sebuah konferensi Konferensi Tukang Ledeng Linux 2020 sesi untuk berdiskusi sehingga memungkinkan untuk mengembangkan komponen kernel di Rust. Nick mengadakan konferensi mikro yang didedikasikan untuk LLVM, dan percaya bahwa akan menyenangkan untuk mendiskusikan aspek teknis dari kemungkinan integrasi dukungan Rust ke dalam kernel (dia telah menyiapkan prototipe yang berfungsi untuk KBuild) dan memahami apakah dukungan tersebut harus dilakukan. ditambahkan sama sekali dan batasan penggunaan Rust apa yang harus diterima.

Mari kita ingat kembali hal itu dalam diskusi baru-baru ini di Open Source Summit dan konferensi Linux Tertanam, Linus Torvalds tidak menutup kemungkinan munculnya binding untuk pengembangan subsistem kernel non-inti (misalnya driver) dalam bahasa seperti Rust. Kemampuan untuk mengembangkan driver di Rust akan memungkinkan kami 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. Sudah ada beberapa proyek pihak ketiga yang mengimplementasikan fitur ini:

  • Pengembang dari perusahaan β€œFish in a Barrel” siap sebuah toolkit untuk menulis modul yang dapat dimuat untuk kernel Linux dalam bahasa Rust, menggunakan sekumpulan lapisan abstrak pada antarmuka dan struktur kernel untuk meningkatkan keamanan. Lapisan secara otomatis dihasilkan berdasarkan file header kernel yang ada menggunakan utilitas pengikatan. Dentang digunakan untuk membangun lapisan. Selain interlayer, modul yang dirakit menggunakan paket staticlib.
  • Peneliti dari Chinese University of Hong Kong mengembangkan sebuah proyek untuk mengembangkan driver untuk sistem tertanam dan perangkat Internet of Things di Rust, yang juga menggunakan bindgen untuk menghasilkan lapisan berdasarkan file header kernel. Kerangka kerja ini memungkinkan Anda untuk meningkatkan keamanan driver tanpa membuat perubahan pada kernel - alih-alih membuat tingkat isolasi tambahan untuk driver di kernel, diusulkan untuk memblokir masalah pada tahap kompilasi, menggunakan bahasa Rust yang lebih aman. Diasumsikan bahwa pendekatan seperti itu mungkin dibutuhkan oleh produsen peralatan yang mengembangkan driver berpemilik secara terburu-buru tanpa melakukan audit yang tepat.
  • Pengembang kerangka C2Karat untuk menyiarkan kode C ke Rust, kelakuan eksperimen dalam mengonversi modul kernel dengan pengeditan manual minimal. Salah satu masalah yang dicatat adalah penggunaan kode di banyak bagian kernel yang menggunakan ekstensi GCC yang belum didukung di C2Rust. Untuk mengatasi masalah ini, C2Rust berencana menambahkan dukungan untuk atribut GCC inline, cold, alias, Used dan section, serta memperluas kemampuan assembler inline dan menyelesaikan masalah dengan struktur yang selaras dan dikemas (misalnya, xregs_state) . Masalah signifikan yang memerlukan pekerjaan manual termasuk ketidakmampuan untuk menerjemahkan makro C yang tidak sepele ke dalam makro Rust dan kebutuhan untuk mendefinisikan ulang tipe, karena C2Rust menerjemahkan tipe C ke dalam definisi dalam paket libc, tetapi paket ini tidak dapat digunakan dalam modul kernel.

Sumber: opennet.ru

Tambah komentar