Menyesuaikan Debian untuk menggunakan pelaksanaan Rust coreutils

Sylvestre Ledru, yang terkenal dengan kerjanya membina Debian GNU/Linux menggunakan pengkompil Clang, melaporkan percubaan yang berjaya menggunakan set utiliti alternatif, coreutils, yang ditulis semula dalam bahasa Rust. Coreutils termasuk utiliti seperti sort, cat, chmod, chown, chroot, cp, date, dd, echo, nama hos, id, ln dan ls. Untuk peringkat pertama penyepaduan ke dalam Debian versi Rust coreutils, matlamat berikut telah ditetapkan:

  • Pakej alternatif Rust kepada coreutils untuk Debian dan Ubuntu.
  • Boot Debian dengan desktop GNOME menggunakan rust-coreutils.
  • Memasang 1000 pakej paling popular dari repositori.
  • Bina daripada sumber kernel Firefox, LLVM/Clang dan Linux dalam persekitaran dengan rust-coreutils.

Selepas mencipta lebih daripada 100 tampung untuk Rust/coreutils, kami berjaya mencapai semua matlamat yang dimaksudkan. Kerja yang sedang dijalankan termasuk pelaksanaan utiliti dan pilihan yang hilang, meningkatkan kualiti dan keseragaman kod, membangunkan suite ujian, dan menghapuskan ranap sistem yang berlaku semasa menjalankan suite ujian daripada GNU Coreutils (141 ujian daripada 613 berjalan dengan jayanya setakat ini. ).

Apabila membuat pakej rust-coreutils, ia telah memutuskan untuk tidak menggantikan pakej coreutils, tetapi untuk menyediakan keupayaan untuk mereka berfungsi secara selari. Pilihan utiliti dalam bahasa Rust dipasang dalam /usr/lib/cargo/bin/ dan diaktifkan dengan menambahkan direktori ini pada pembolehubah persekitaran PATH. Mencipta pakej rust-coreutils adalah rumit oleh keperluan untuk memuat turun semua kebergantungan binaan ke dalam repositori, termasuk Rust dan pelbagai pakej peti kecil.

Mencipta imej but tidak menjadi masalah, tetapi menyesuaikan pakej untuk persekitaran dengan rust-coreutils memerlukan banyak kerja, kerana banyak skrip pasca pemasangan memanggil utiliti daripada set coreutils. Bilangan masalah terbesar disebabkan oleh kekurangan pilihan yang diperlukan, sebagai contoh, utiliti "cp" tidak mempunyai pilihan "--archive" dan "--no-dereference", "ln" tidak menyokong "- relatif”, mktemp tidak menyokong β€œ-t” , dalam penyegerakan "-fs", dalam pemasangan - "--owner" dan "-group". Masalah lain timbul disebabkan oleh perbezaan tingkah laku, contohnya, utiliti pemasangan tidak menyokong penetapan /dev/null sebagai fail input, mkdir mempunyai pilihan "--parents" dan bukannya "-parent", dsb.

Apabila menguji pemasangan pangkalan kod besar, tiada masalah besar timbul. Apabila membina Firefox dan LLVM/Clang, skrip python dan cmake digunakan, jadi menggantikan coreutils tidak menjejaskannya. Pembinaan kernel Linux berjalan dengan lancar, dengan hanya dua masalah yang timbul: output ralat apabila menggunakan chown dengan pautan simbolik dan kekurangan pilihan "-n" dalam utiliti ln.

Sumber: opennet.ru

Tambah komen