Adaptace Debianu pro použití Rust implementace coreutils

Sylvestre Ledru, známý svou prací na budování Debian GNU/Linuxu pomocí kompilátoru Clang, ohlásil úspěšný experiment s použitím alternativní sady utilit, coreutils, přepsaných do jazyka Rust. Coreutils zahrnuje nástroje jako sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls. Pro první fázi integrace Coreutils verze Rust do Debianu byly stanoveny následující cíle:

  • Zabalte Rust alternativu k coreutils pro Debian a Ubuntu.
  • Zavedení Debianu s desktopem GNOME pomocí rust-coreutils.
  • Instalace 1000 nejoblíbenějších balíčků z úložiště.
  • Vytvářejte z Firefoxu, LLVM/Clang a zdrojů jádra Linuxu v prostředí s rust-coreutils.

Po vytvoření více než 100 záplat pro Rust/coreutils jsme byli schopni úspěšně dosáhnout všech zamýšlených cílů. Probíhající práce zahrnují implementaci chybějících utilit a možností, zlepšení kvality a jednotnosti kódu, vývoj testovací sady a odstranění pádů, ke kterým dochází při spouštění testovací sady z GNU Coreutils (dosud úspěšně běží 141 testů z 613 ).

Při vytváření balíčku rust-coreutils bylo rozhodnuto nenahradit balíček coreutils, ale poskytnout jim možnost pracovat paralelně. Volby obslužného programu v jazyce Rust se instalují do /usr/lib/cargo/bin/ a aktivují se přidáním tohoto adresáře do proměnné prostředí PATH. Vytvoření balíčku rust-coreutils bylo komplikované nutností stáhnout všechny závislosti sestavení do úložiště, včetně Rustu a různých balíčků malých přepravek.

Vytvoření zaváděcího obrazu nebyl problém, ale přizpůsobení balíčků pro prostředí s rust-coreutils vyžadovalo hodně práce, protože mnoho poinstalačních skriptů volá utility ze sady coreutils. Největší počet problémů byl způsoben nedostatkem potřebných možností, například nástroj „cp“ neměl možnosti „--archive“ a „--no-dereference“, „ln“ nepodporoval „- relativní“ možnost, mktemp nepodporoval „-t“ , při synchronizaci „-fs“, při instalaci – „--owner“ a „-group“. Další problémy vznikly kvůli rozdílům v chování, například instalační nástroj nepodporoval zadání /dev/null jako vstupního souboru, mkdir měl možnost „--parents“ místo „-parent“ atd.

Při testování sestavení velkých kódových základen 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 je neovlivnilo. Sestavení linuxového jádra proběhlo relativně hladce, objevily se pouze dva problémy: chybový výstup při použití chown se symbolickým odkazem a chybějící volba „-n“ v obslužném programu ln.

Zdroj: opennet.ru

Přidat komentář