Sylvestre Ledru, aki a Debian GNU/Linux Clang fordítójával végzett munkájáról ismert, arról számolt be, hogy sikeresen végrehajtotta az alternatív coreutils segédprogramcsomag Rust nyelven történő implementációjának kísérletét. A coreutils tartalmazza többek között az olyan segédprogramokat, mint a sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln és ls. A Debian Rust nyelven készült coreutils verziójának integrációjának első szakasza során az alábbi célokat tűzték ki:
- Alternatív coreutils csomag létrehozása Rust nyelven Debian és Ubuntu számára.
- Debian GNOME asztallal történő letöltése, a rust-coreutils használatával.
- Az 1000 legnépszerűbb csomag telepítése a tárolóból.
- A Firefox, LLVM/Clang és a Linux kernel forráskódjának fordítása rust-coreutils környezetben.
Több mint 100 patch elkészítése után a Rust/coreutils-hoz sikerült végrehajtani az összes kitűzött célt. A folyamatban lévő munka során kiemelten fontos a hiányzó segédprogramok és opciók megvalósítása, a kód minőségének és egységességének javítása, a tesztcsomag fejlesztése, a GNU Coreutils tesztcsomag indításakor fellépő összeomlások megszüntetése (jelenleg a 613 tesztből 141 sikeresen futtatható).
A rust-coreutils csomag létrehozásakor úgy döntöttek, hogy nem cserélik le a coreutils csomagot, hanem lehetővé teszik a párhuzamos működésüket. A Rust nyelven készült segédprogramok a /usr/lib/cargo/bin/ mappába kerülnek telepítésre, és a PATH környezeti változóba való hozzáadásával aktiválhatók. A rust-coreutils csomag létrehozását bonyolította a szükségesség, hogy az összes fordítási függőséget, beleértve a Rustot és különféle kisebb crate-csomagokat, a tárolóba töltsék.
A bootolható kép létrehozásával különösebb probléma nem merült fel, de a rust-coreutils környezethez való csomagok alkalmazkodása nagy munkát igényelt, mivel sok post-install skriptus a coreutils segédprogramokat hívja meg. A legtöbb probléma a szükséges opciók hiányából adódott, például a cp segédprogramban hiányoztak az —archive és —no-dereference opciók, az ln-ben nem volt támogatva a —relative opció, a mktemp esetében -t, a sync esetében -fs, az installnál pedig —owner és —group. További problémák jelentkeztek a viselkedés eltéréseiből, például az install segédprogram nem támogatta a /dev/null bemeneti fájlként történő megadását, a mkdir helyett a —parent helyett a —parents opció volt jelen, stb.
A nagyméretű kódalapok összeállításának tesztelése során nem merültek fel komoly problémák. A Firefox és az LLVM/Clang összeállítása során python-skripteket és cmake-t használnak, így a coreutils-re való váltás nem befolyásolta az eredményt. A Linux kernel összeállítása viszonylag zökkenőmentesen zajlott, csupán két problémát észleltek: hibaüzenet jelentkezett a chown parancs szimbolikus linkkel való használatakor, és az ln segédprogram hiányzó „-n” opciója.
Forrás: opennet.ru
