Sylvestre Ledru, znany ze swojej pracy nad budowaniem Debiana GNU/Linux przy użyciu kompilatora Clang, poinformował o udanym eksperymencie z użyciem alternatywnego zestawu narzędzi, coreutils, przepisanego w języku Rust. Coreutils zawiera narzędzia takie jak sort, cat, chmod, chown, chroot, cp, date, dd, echo, nazwa hosta, id, ln i ls. Dla pierwszego etapu integracji z Debianem wersji Rust coreutils postawiono następujące cele:
- Spakuj alternatywę Rusta dla coreutils dla Debiana i Ubuntu.
- Uruchamianie Debiana z pulpitu GNOME przy użyciu rust-coreutils.
- Instalacja 1000 najpopularniejszych pakietów z repozytorium.
- Kompiluj ze źródeł jądra Firefoksa, LLVM/Clang i Linux w środowisku z rust-coreutils.
Po stworzeniu ponad 100 łatek dla Rust/coreutils udało nam się z sukcesem osiągnąć wszystkie zamierzone cele. Bieżące prace obejmują wdrożenie brakujących narzędzi i opcji, poprawę jakości i jednolitości kodu, rozwój zestawu testów i wyeliminowanie awarii występujących podczas uruchamiania zestawu testów z GNU Coreutils (141 testów z 613 przebiega dotychczas pomyślnie ).
Tworząc pakiet rust-coreutils, zdecydowano się nie zastępować pakietu coreutils, ale zapewnić im możliwość równoległej pracy. Opcje narzędzi w języku Rust są instalowane w /usr/lib/cargo/bin/ i są aktywowane poprzez dodanie tego katalogu do zmiennej środowiskowej PATH. Tworzenie pakietu rust-coreutils było skomplikowane ze względu na konieczność pobrania wszystkich zależności kompilacji do repozytorium, w tym Rusta i różnych pakietów małych skrzynek.
Utworzenie obrazu startowego nie stanowiło problemu, ale przystosowanie pakietów do środowiska z rust-coreutils wymagało dużo pracy, ponieważ wiele skryptów poinstalacyjnych wywołuje narzędzia z zestawu coreutils. Najwięcej problemów powodował brak niezbędnych opcji, np. narzędzie „cp” nie posiadało opcji „--archive” i „--no-dereference”, „ln” nie obsługiwało opcji „- względna”, mktemp nie obsługiwał „-t”, w synchronizacji „-fs”, w instalacji - „--owner” i „-group”. Inne problemy wynikały z różnic w zachowaniu, na przykład narzędzie instalacyjne nie obsługiwało określenia /dev/null jako pliku wejściowego, mkdir miał opcję „--parents” zamiast „-parent” itp.
Podczas testowania zestawu dużych baz kodu nie pojawiły się żadne większe problemy. Podczas budowania Firefoksa i LLVM/Clang używane są skrypty Pythona i cmake, więc zastąpienie coreutils nie miało na nie wpływu. Budowanie jądra Linuksa przebiegło stosunkowo sprawnie, pojawiły się tylko dwa problemy: błąd podczas używania chown z dowiązaniem symbolicznym oraz brak opcji „-n” w narzędziu ln.
Źródło: opennet.ru