Sylvestre Ledru, známý svou prací na sestavování Debian GNU/Linux s použitím kompilátoru Clang, oznámil úspěšné provedení experimentu se zapojením alternativního souboru utilit coreutils, přepsaného v jazyce Rust. Složení coreutils zahrnuje takové utility jako sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls. Pro první fázi integrace v Debianu alternativy coreutils v jazyce Rust byly stanoveny následující cíle:
- Vytvoření balíčku s alternativní variantou coreutils v jazyce Rust pro Debian a Ubuntu.
- Stáhnout Debian s pracovním prostředím GNOME, používající rust-coreutils.
- Instalace 1000 nejpopulárnějších balíčků z repozitáře.
- Sestavení z původních textů Firefox, LLVM/Clang a jádra Linux v prostředí s rust-coreutils.
Po vytvoření více než 100 patchů pro Rust/coreutils se podařilo úspěšně realizovat všechny zamýšlené cíle. V rámci pokračující práce je zmiňována realizace chybějících utilit a voleb, zlepšení kvality a jednotnosti kódu, rozvoj testovací sady, odstranění chyb, které vznikaly při spuštění testovací sady od GNU Coreutils (dosud úspěšně proběhlo 141 testů z 613).
Při vytváření balíčku rust-coreutils bylo rozhodnuto nenahrazovat balíček coreutils, ale zajistit možnost jejich paralelního fungování. Varianty utilit v jazyce Rust jsou instalovány v /usr/lib/cargo/bin/ a aktivovány přidáním tohoto adresáře do proměnné prostředí PATH. Vytváření balíčku rust-coreutils ztěžovala potřeba nahrát do repozitáře všechny závislosti pro sestavení, včetně Rustu a různých drobných crate-balíčků.
S vytvořením zaváděcího obrazu nenastal žádný významný problém, ale adaptace balíčků pro prostředí s rust-coreutils si vyžádala velké úsilí, jelikož mnoho post-install skriptů volá utility z balíku coreutils. Největší množství problémů způsobilo chybějící potřebné volby, například v utilitě „cp“ chyběly volby „—archive“ a „—no-dereference“, v „ln“ podpora volby „—relative“, v mktemp „-t“, v sync „-fs“, v install „—owner“ a „—group“. Další problémy se objevily kvůli rozdílům v chování, například utilita install nepodporovala určení /dev/null jako vstupního souboru, v mkdir místo „—parent“ byla volba „—parents“ atd.
Při testování sestavení velkých kódových základů nevznikly žádné větší problémy. Při sestavování Firefoxu a LLVM/Clang se používají python skripty a cmake, takže nahrazení coreutils nimi nemělo vliv. Sestavení jádra Linux proběhlo relativně hladce, objevily se pouze dva problémy: výstup chybové zprávy při použití chown se symbolickým odkazem a absence volby „-n“ v utilitě ln.
Zdroj: opennet.ru
