Sylvestre Ledru, znany ze swojej pracy nad budowaniem Debian GNU/Linux z użyciem kompilatora Clang, poinformował o pomyślnym przeprowadzeniu eksperymentu wykorzystującego alternatywny zestaw narzędzi coreutils, przepisany w języku Rust. W skład coreutils wchodzą takie narzędzia jak sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln oraz ls. Na pierwszym etapie integracji alternatywnej wersji coreutils w języku Rust w Debianie postawiono następujące cele:
- Stworzenie pakietu z alternatywną wersją coreutils w języku Rust dla Debiana i Ubuntu.
- Pobranie Debiana z pulpitem GNOME, korzystając z rust-coreutils.
- Instalacja 1000 najpopularniejszych pakietów z repozytorium.
- Kompilacja z kodu źródłowego Firefox, LLVM/Clang oraz jądra Linux w środowisku z rust-coreutils.
Po stworzeniu ponad 100 poprawek do Rust/coreutils udało się pomyślnie zrealizować wszystkie zamierzone cele. W trwającej pracy zauważono realizację brakujących narzędzi i opcji, poprawę jakości i jednolitości kodu, rozwój zestawu testowego oraz eliminację błędów występujących podczas uruchamiania zestawu testowego GNU Coreutils (dotychczas pomyślnie wykonano 141 testów z 613).
Podczas tworzenia pakietu rust-coreutils zdecydowano się nie zastępować pakietu coreutils, lecz zapewnić możliwość ich równoległej pracy. Wersje narzędzi w języku Rust są instalowane w /usr/lib/cargo/bin/ i aktywowane poprzez dodanie tego katalogu do zmiennej środowiskowej PATH. Tworzenie pakietu rust-coreutils utrudniała konieczność załadowania do repozytorium wszystkich zależności budowlanych, w tym Rust oraz różnych drobnych pakietów crate.
Z tworzeniem obrazu rozruchowego nie napotkano większych problemów, jednak adaptacja pakietów do środowiska z rust-coreutils wymagała dużej pracy, ponieważ wiele skryptów post-install wywołuje narzędzia z zestawu coreutils. Najwięcej problemów wynikało z braku niezbędnych opcji, na przykład w narzędziu «cp» brakowało opcji «—archive» i «—no-dereference», w «ln» nie było wsparcia dla opcji «—relative», w mktemp brakowało «-t», w sync «-fs», w install «—owner» oraz «—group». Inne problemy wynikały z różnic w zachowaniu, na przykład narzędzie install nie wspierało wskazywania /dev/null jako pliku wejściowego, w mkdir zamiast «—parent» była opcja «—parents» itp.
Podczas testowania kompilacji dużych baz kodu nie wystąpiły większe problemy. Przy kompilacji Firefox i LLVM/Clang wykorzystywane są skrypty python i cmake, dlatego zastąpienie coreutils nie wpłynęło na proces. Kompilacja jądra Linux przebiegła stosunkowo gładko, pojawiły się tylko dwa problemy: wyświetlanie błędu przy użyciu chown z symbolicznym linkiem oraz brak opcji „-n” w narzędziu ln.
Źródło: opennet.ru
