Mengadaptasi Debian untuk menggunakan implementasi Rust dari coreutils

Sylvestre Ledru, yang dikenal karena karyanya membangun Debian GNU/Linux menggunakan kompiler Clang, melaporkan eksperimen yang berhasil menggunakan serangkaian utilitas alternatif, coreutils, yang ditulis ulang dalam bahasa Rust. Coreutils mencakup utilitas seperti sortir, cat, chmod, chown, chroot, cp, date, dd, echo, nama host, id, ln dan ls. Untuk tahap pertama integrasi ke Debian dari coreutils versi Rust, tujuan berikut ditetapkan:

  • Kemas alternatif Rust untuk coreutils untuk Debian dan Ubuntu.
  • Mem-boot Debian dengan desktop GNOME menggunakan karat-coreutils.
  • Menginstal 1000 paket terpopuler dari repositori.
  • Bangun dari sumber kernel Firefox, LLVM/Clang dan Linux di lingkungan dengan rustic-coreutils.

Setelah membuat lebih dari 100 patch untuk Rust/coreutils, kami berhasil mencapai semua tujuan yang diinginkan. Pekerjaan yang sedang berlangsung mencakup implementasi utilitas dan opsi yang hilang, meningkatkan kualitas dan keseragaman kode, mengembangkan rangkaian pengujian, dan menghilangkan kerusakan yang terjadi saat menjalankan rangkaian pengujian dari GNU Coreutils (141 pengujian dari 613 pengujian berjalan dengan sukses sejauh ini ).

Saat membuat paket karat-coreutils, diputuskan untuk tidak mengganti paket coreutils, tetapi untuk menyediakan kemampuan untuk bekerja secara paralel. Opsi utilitas dalam bahasa Rust diinstal di /usr/lib/cargo/bin/ dan diaktifkan dengan menambahkan direktori ini ke variabel lingkungan PATH. Pembuatan paket Rust-coreutils diperumit oleh kebutuhan untuk mengunduh semua dependensi build ke dalam repositori, termasuk Rust dan berbagai paket peti kecil.

Membuat image booting tidak menjadi masalah, tetapi mengadaptasi paket untuk lingkungan dengan rustic-coreutils memerlukan banyak pekerjaan, karena banyak skrip pasca-instal memanggil utilitas dari set coreutils. Jumlah masalah terbesar disebabkan oleh kurangnya opsi yang diperlukan, misalnya, utilitas “cp” tidak memiliki opsi “--archive” dan “--no-dereference”, “ln” tidak mendukung “- opsi relatif”, mktemp tidak mendukung “-t” , dalam sinkronisasi "-fs", dalam instalasi - "--owner" dan "-group". Masalah lain muncul karena perbedaan perilaku, misalnya, utilitas instalasi tidak mendukung penetapan /dev/null sebagai file input, mkdir memiliki opsi “--parents” alih-alih “-parent”, dll.

Saat menguji perakitan basis kode besar, tidak ada masalah besar yang muncul. Saat membuat Firefox dan LLVM/Clang, skrip python dan cmake digunakan, jadi penggantian coreutils tidak memengaruhinya. Pembuatan kernel Linux berjalan relatif lancar, dengan hanya dua masalah yang muncul: keluaran kesalahan saat menggunakan chown dengan tautan simbolik dan kurangnya opsi “-n” di utilitas ln.

Sumber: opennet.ru

Tambah komentar