sylvestre ledru (vývojář známý svou prací na sestavování Debianu GNU / Linux pomocí kompilátoru Clang) nedávno vydal zprávu o experimentu úspěšné s alternativní sadou nástrojů, coreutils, přepsaných v Rustu.
Pro ty, kteří Coreutils neznají, měli byste vědět, že zahrnuje nástroje jako sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls. sylvestre ledru zmínit to bod první fáze integrace do Debianu verze coreutils v Rustu, byly stanoveny tyto cíle:
- Vytvořte balíček s alternativními Rust coreutils pro Debian i Ubuntu.
- Zavedení Debianu z desktopového prostředí Gnome pomocí rust-coreutils.
- Nainstalujte 1000 nejpopulárnějších balíčků z úložiště.
- Vytvářejte ze zdrojů jádra Firefox, LLVM / Clang a Linux s rust-coreutils.
A s tím po vytvoření více než 100 oprav pro Rust / coreutils bylo úspěšně dosaženo všech zamýšlených cílů. Vlastně probíhající práce zdůrazňuje implementaci chybějících nástrojů a možností, zlepšení kvality a konzistence kódu, vývoj testovací sady, oprava chyb, ke kterým dochází při spuštění testovací sady GNU Coreutils (141 z 613 testů zatím běží úspěšně).
Nezapomeňte také, že při vytváření balíčku rust-coreutils bylo rozhodnuto balíček nevyměnit coreutils, ale nechte je běžet paralelně. Rust verze obslužných programů se instalují do adresáře / 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 zkomplikovalo stažení všech závislostí sestavení v úložišti, včetně Rustu a několika malých balíčků.
Začal jsem přispívat k alternativní Coreutils vyvinuté v Rustu. Cílem projektu je navrhnout přímou náhradu za C založenou na GNU Coreutils a chtěl vyhodnotit, zda by ji bylo možné použít ke spuštění normálního Debianu. Podobně jako to, co jsem udělal s clang.debian.net před několika lety (přestavba archivu Debianu pomocí clangu místo gcc).
Doufám, že většina čtenářů ví, co je Coreutils. Jedná se o sadu programů, které provádějí jednoduché operace (kopírování / přesunutí souboru, změna oprávnění / vlastnictví atd.). I když jsou některé příkazy ze 70. let, jsou jádrem Linuxu, Unixu a macOS. I když lze najít různé implementace, snaží se zůstat kompatibilní, pokud jde o argumenty, možnosti atd. Tato implementace Coreutils se nijak neliší!
Na druhou stranu uvádí, že při vytváření bootovacího obrazu nebyly žádné zvláštní problémy systém, ale přizpůsobení balíčků pro prostředí rust-coreutils vyžadovalo hodně práce, protože mnoho skriptů po instalaci nazývá nástroje sady coreutils, protože většina problémů byla způsobena chybějícími nezbytnými možnostmi, například uvádí, že v utilitě „cp“ chyběly možnosti „–archivovat“ a „–oddereference“, zatímco pro „ln“ nepodporovala „–relative“ a možnost mktemp - „-t«, synchronizovaně »-fs «, V instalaci -» –vlastník «a» –skupina «.
Další problémy vznikly také kvůli rozdílům v chováníNapříklad instalační obslužný program nepodporoval zadání / dev / null jako vstupního souboru, v mkdir místo „–parent“ byla možnost „–parents“ atd.
Balení v Debianu není triviální ani jednoduchý úkol. Vyžaduje nezávislé načtení všech závislostí v souboru. Rust se svým novým ekosystémem a malými krabičkami tento úkol ještě ztěžuje.
Při testování sestavení velkých kódových základen nebyly žádné zásadní problémy. Při kompilaci Firefoxu a LLVM / Clang se používají skripty python a cmake, takže nahrazení coreutilů je neovlivnilo. Sestavení jádra Linuxu bylo relativně plynulé, objevily se pouze dva problémy: chybový výstup při použití chown se symbolickým odkazem a absence možnosti „-n“ v nástroji ln.
Konečně pokud byste chtěli vědět více o poznámce, můžete zkontrolovat podrobnosti Na následujícím odkazu.