Sylvestre Ledru, akit az összeszereléssel kapcsolatos munkájáról ismernek Debian GNÚ/Linux a Clang fordító használatával sikeres kísérletről számolt be, amelyben a coreutils segédprogramok egy alternatív, Rustban átírt készletét használták. A coreutils olyan segédprogramokat tartalmaz, mint a sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln és ls. Az integráció első szakaszában a Debian A coreutils Rust verziójával a következő célokat tűzték ki:
- Csomag létrehozása alternatív coreutils-szal Rustban a következőhöz: Debian и Ubuntu.
- Letöltés Debian a GNOME asztali környezettel a rust-coreutils használatával.
- Telepítsd az 1000 legnépszerűbb csomagot a tárolóból.
- Fordítás Firefox, LLVM/Clang és kernel forráskódokból Linux rust-coreutils környezetben.
Több mint 100 Rust/coreutils javítás létrehozása után minden kitűzött célt sikeresen elérték. A folyamatban lévő munka magában foglalja a hiányzó segédprogramok és opciók megvalósítását, a kód minőségének és konzisztenciájának javítását, a tesztkészlet fejlesztését, valamint a GNU Coreutils tesztkészlet futtatása során bekövetkezett összeomlások javítását (a 613 tesztből jelenleg 141 fut sikeresen).
A rust-coreutils csomag létrehozásakor nem a coreutils lecserélése volt a cél, hanem az, hogy lehetővé tegyék egymás melletti futtatásukat. A segédprogramok Rust-verziói a /usr/lib/cargo/bin/ könyvtárba települnek, és ennek a könyvtárnak a PATH környezeti változóhoz való hozzáadásával aktiválhatók. A rust-coreutils csomag létrehozását bonyolította, hogy az összes build függőséget, beleértve a Rustot és a különféle kis crate csomagokat is, fel kellett tölteni a tárolóba.
A rendszerindító képfájl létrehozása nem volt különösebben problémás, de a csomagok rust-coreutils környezethez való adaptálása jelentős mennyiségű munkát igényelt, mivel sok telepítés utáni szkript a coreutils csomag segédprogramjait hívja meg. A legtöbb problémát a hiányzó kötelező opciók okozták. Például a "cp" segédprogramból hiányoztak az "--archive" és a "--no-dereference" opciók, az "ln" nem támogatta a "--relative" opciót, az mktemp nem támogatta a "--t", a sync nem támogatta a "--fs" opciót, az install pedig nem támogatta a "--owner" és a "--group" opciókat. További problémák a viselkedési különbségek miatt merültek fel, például az install segédprogram nem támogatta a /dev/null fájlt bemeneti fájlként, az mkdir fájlból hiányzott a "--parents" opció a "--parent" helyett, és így tovább.
A nagy kódbázisok buildjének tesztelése nem okozott komolyabb problémákat. A Firefox és az LLVM/Clang buildek Python szkripteket és CMake-et használnak, így a coreutils lecserélése nem befolyásolta őket. Linux Viszonylag simán ment, csak két probléma bukkant fel: egy hibaüzenet a chown szimbolikus linkkel történő használatakor, illetve az "-n" opció hiánya az ln segédprogramban.
Forrás: opennet.ru
