Cadangan untuk membincangkan isu menambah alat pembangunan Rust pada kernel Linux

Nick Desagnier (Nick Desaulniers), yang bekerja di Google untuk menyediakan sokongan membina kernel Linux menggunakan pengkompil Clang dan juga menolong betulkan pepijat dalam pengkompil Rust, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» mengadakan persidangan Persidangan Tukang Paip Linux 2020 sesi untuk membincangkan membolehkan untuk membangunkan komponen kernel dalam Rust. Nick sedang menganjurkan persidangan mikro khusus untuk LLVM, dan percaya bahawa adalah baik untuk membincangkan aspek teknikal kemungkinan integrasi sokongan Rust ke dalam kernel (dia telah menyediakan prototaip yang berfungsi untuk KBuild) dan memahami sama ada sokongan tersebut harus ditambah sama sekali dan apakah sekatan ke atas penggunaan Rust harus diterima.

Mari kita ingat bahawa dalam perbincangan baru-baru ini di Sidang Kemuncak Sumber Terbuka dan persidangan Linux Terbenam, Linus Torvalds tidak menolaknya kemunculan pengikatan untuk pembangunan subsistem kernel bukan teras (contohnya, pemacu) dalam bahasa seperti Rust. Keupayaan untuk membangunkan pemacu dalam Rust akan membolehkan kami mencipta pemacu yang lebih selamat dan lebih baik dengan usaha yang minimum, bebas daripada masalah seperti capaian memori selepas dibebaskan, penolakan penunjuk nol dan overrun penimbal. Sudah terdapat beberapa projek pihak ketiga untuk melaksanakan ciri ini:

  • Pemaju dari syarikat "Ikan dalam Tong" disediakan kit alat untuk menulis modul boleh dimuatkan untuk kernel Linux dalam bahasa Rust, menggunakan satu set lapisan abstrak di atas antara muka dan struktur kernel untuk meningkatkan keselamatan. Lapisan dijana secara automatik berdasarkan fail pengepala kernel sedia ada menggunakan utiliti bindgen. Clang digunakan untuk membina lapisan. Sebagai tambahan kepada interlayer, modul yang dipasang menggunakan pakej staticlib.
  • Penyelidik dari Universiti Cina Hong Kong membangun projek untuk membangunkan pemacu untuk sistem terbenam dan peranti Internet of Things dalam Rust, yang juga menggunakan bindgen untuk menjana lapisan berdasarkan fail pengepala kernel. Rangka kerja ini membolehkan anda meningkatkan keselamatan pemandu tanpa membuat perubahan pada kernel - bukannya mencipta tahap pengasingan tambahan untuk pemacu dalam kernel, ia dicadangkan untuk menyekat masalah pada peringkat penyusunan, menggunakan bahasa Rust yang lebih selamat. Adalah diandaikan bahawa pendekatan sedemikian mungkin diperlukan oleh pengeluar peralatan yang membangunkan pemandu proprietari secara tergesa-gesa tanpa menjalankan audit yang sewajarnya.
  • Pembangun rangka kerja C2Karat untuk penyiaran kod C ke Rust, dijalankan percubaan untuk menukar modul kernel dengan suntingan manual yang minimum. Salah satu masalah yang dinyatakan ialah penggunaan dalam banyak bahagian kernel kod yang menggunakan sambungan GCC yang belum disokong dalam C2Rust. Untuk menyelesaikan masalah ini, C2Rust merancang untuk menambah sokongan untuk atribut GCC sebaris, sejuk, alias, terpakai dan bahagian, serta mengembangkan keupayaan pemasang sebaris dan menyelesaikan masalah dengan struktur yang sejajar dan dibungkus (contohnya, xregs_state) . Masalah penting yang memerlukan kerja manual termasuk ketidakupayaan untuk menterjemah makro C bukan remeh kepada makro Rust dan keperluan untuk mentakrifkan semula jenis, memandangkan C2Rust menterjemah jenis C ke dalam definisi dalam pakej libc, tetapi pakej ini tidak boleh digunakan dalam modul kernel.

Sumber: opennet.ru

Tambah komen