Sylvestre Ledru, bekend om zijn werk met het samenstellen van Debian GNU/Linux met de Clang-compiler, heeft met succes een experiment uitgevoerd waarbij een alternatieve set coreutils, herschreven in Rust, werd ingezet. De coreutils omvatten tools zoals sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln en ls. Voor de eerste fase van de integratie van de Rust-versie van coreutils in Debian werden de volgende doelen gesteld:
- Het creƫren van een pakket met de alternatieve Rust-versie van coreutils voor Debian en Ubuntu.
- Debian downloaden met de GNOME-desktop, met behulp van rust-coreutils.
- Installeren van de 1000 meest populaire pakketten uit de repository.
- Bouwen uit bronbestanden van Firefox, LLVM/Clang en de Linux-kernel in een omgeving met rust-coreutils.
Na het creƫren van meer dan 100 patches voor Rust/coreutils is het gelukt om alle gestelde doelen te realiseren. De voortdurende werkzaamheden omvatten de implementatie van ontbrekende tools en opties, het verbeteren van de kwaliteit en consistentie van de code, het ontwikkelen van de testset en het oplossen van fouten die optraden bij het uitvoeren van de testset van GNU Coreutils (tot nu toe slagen 141 van de 613 tests).
Bij het maken van het rust-coreutils-pakket werd besloten om het coreutils-pakket niet te vervangen, maar om de mogelijkheid voor parallelle werking te waarborgen. De Rust-versies van de tools worden geïnstalleerd in /usr/lib/cargo/bin/ en worden geactiveerd door deze map aan de omgevingsvariabele PATH toe te voegen. Het creëren van het rust-coreutils-pakket werd bemoeilijkt door de noodzaak om alle bouwafhankelijkheden, inclusief Rust en verschillende kleine crate-pakketten, in de repository te uploaden.
Bij het creĆ«ren van het opstartbare beeld zijn er geen bijzondere problemen opgetreden, maar de aanpassing van de pakketten voor de omgeving met rust-coreutils vereiste veel werk, aangezien veel post-installatiescripts tools uit de coreutils-set aanroepen. Het grootste aantal problemen werd veroorzaakt door het ontbreken van noodzakelijke opties, bijvoorbeeld ontbraken de opties "āarchive" en "āno-dereference" in de tool 'cp', was er in 'ln' geen ondersteuning voor de optie "ārelative", in mktemp "-t", in sync "-fs", in install "āowner" en "āgroup". Andere problemen kwamen voort uit gedragsverschillen; bijvoorbeeld, de tool install ondersteunde geen opgave van /dev/null als invoerbestand, in mkdir was de optie "āparents" in plaats van "āparent" aanwezig, enzovoort.
Tijdens het testen van de assemblage van grote codebases zijn er geen grote problemen opgetreden. Bij de assemblage van Firefox en LLVM/Clang worden python-scripts en cmake gebruikt, dus de vervanging van coreutils had geen invloed. De assemblage van de Linux-kernel verliep relatief soepel, er kwamen slechts twee problemen naar voren: de foutmelding bij het gebruik van chown met een symbolische link en het ontbreken van de optie "-n" in de utiliteit ln.
Bron: opennet.ru
