Sylvestre Ledru, cunoscut pentru munca sa la asamblarea Debian GNU/Linux folosind compilatorul Clang, a anunțat finalizarea unui experiment de utilizare a unui set alternativ de utilitare coreutils, rescris în limbajul Rust. Setul coreutils include utilitare precum sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln și ls. Pentru prima etapă a integrării variantei coreutils în limbajul Rust în Debian, au fost stabilite următoarele obiective:
- Crearea unui pachet cu varianta alternativă coreutils în limbajul Rust pentru Debian și Ubuntu.
- Descărcarea Debian cu mediul desktop GNOME, folosind rust-coreutils.
- Instalarea celor mai populare 1000 de pachete din depozit.
- Compilarea din cod sursă a Firefox, LLVM/Clang și nucleul Linux într-un mediu cu rust-coreutils.
După crearea a peste 100 de patch-uri pentru Rust/coreutils, toate obiectivele planificate au fost realizate cu succes. Din muncile continue se remarcă implementarea utilitarelor și opțiunilor lipsă, îmbunătățirea calității și uniformității codului, dezvoltarea setului de teste, eliminarea erorilor apărute la rularea setului de teste din GNU Coreutils (deocamdată, 141 de teste din 613 au fost executate cu succes).
La crearea pachetului rust-coreutils, s-a decis să nu se înlocuiască pachetul coreutils, ci să se asigure posibilitatea funcționării lor în paralel. Variantele utilitarelor în limbajul Rust sunt instalate în /usr/lib/cargo/bin/ și activate prin adăugarea acestui director în variabila de mediu PATH. Crearea pachetului rust-coreutils a fost complicată de necesitatea de a încărca în depozit toate dependențele de construire, inclusiv Rust și diverse pachete crate minore.
Crearea imaginii de boot nu a prezentat probleme speciale, dar adaptarea pachetelor pentru mediu cu rust-coreutils a necesitat multă muncă, deoarece multe scripturi post-install apelează utilitare din setul coreutils. Cele mai multe probleme au fost cauzate de absența opțiunilor necesare, de exemplu, în utilitarul „cp” lipseau opțiunile „—archive” și „—no-dereference”, în „ln” nu era suport pentru opțiunea „—relative”, în mktemp „-t”, în sync „-fs”, în install „—owner” și „—group”. Alte probleme au apărut din cauza diferențelor în comportament, de exemplu, utilitarul install nu accepta specificarea /dev/null ca fișier de intrare, în mkdir în loc de „—parent” era opțiunea „—parents” etc.
În timpul testării construcției unor baze de cod mari, nu au apărut probleme semnificative. La construirea Firefox și LLVM/Clang se folosesc scripturi python și cmake, astfel că înlocuirea coreutils cu ele nu a avut un impact. Construirea nucleului Linux a decurs relativ bine, au apărut doar două probleme: generarea unui mesaj de eroare la utilizarea comenzii chown cu un link simbolic și lipsa opțiunii „-n” în utilitarul ln.
Sursa: opennet.ro
