Anpassar Debian för att använda Rust-implementeringen av coreutils

Sylvestre Ledru, känd för sitt arbete med att bygga Debian GNU/Linux med Clang-kompilatorn, rapporterade ett framgångsrikt experiment med en alternativ uppsättning verktyg, coreutils, omskrivna på Rust-språket. Coreutils inkluderar verktyg som sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln och ls. För det första steget av integrationen i Debian av Rust-versionen av coreutils, sattes följande mål:

  • Paketera ett Rust-alternativ till coreutils för Debian och Ubuntu.
  • Startar Debian med GNOME-skrivbordet med hjälp av rust-coreutils.
  • Installerar de 1000 mest populära paketen från förvaret.
  • Bygg från Firefox, LLVM/Clang och Linux kärnkällor i en miljö med rost-coreutils.

Efter att ha skapat mer än 100 patchar för Rust/coreutils kunde vi framgångsrikt uppnå alla avsedda mål. Det pågående arbetet inkluderar implementering av saknade verktyg och alternativ, förbättring av kodens kvalitet och enhetlighet, utveckling av testsviten och eliminering av krascher som uppstår när testsviten körs från GNU Coreutils (141 tester av 613 körs framgångsrikt hittills ).

Vid skapandet av rust-coreutils-paketet beslutades det att inte ersätta coreutils-paketet, utan att ge möjligheten för dem att arbeta parallellt. Verktygsalternativ i Rust-språket installeras i /usr/lib/cargo/bin/ och aktiveras genom att lägga till denna katalog till miljövariabeln PATH. Att skapa rust-coreutils-paketet komplicerades av behovet av att ladda ner alla byggberoenden till förvaret, inklusive Rust och olika små paketpaket.

Att skapa en startavbildning var inget problem, men att anpassa paketen för en miljö med rust-coreutils krävde mycket arbete, eftersom många efterinstallationsskript anropar verktyg från coreutils-uppsättningen. Det största antalet problem orsakades av bristen på nödvändiga alternativ, till exempel hade "cp"-verktyget inte alternativen "--archive" och "--no-dereference", "ln" stödde inte "- relativa" alternativet, mktemp stödde inte "-t" , i sync "-fs", i install - "--owner" och "-group". Andra problem uppstod på grund av skillnader i beteende, till exempel stödde installationsverktyget inte att specificera /dev/null som en indatafil, mkdir hade alternativet "--parents" istället för "-parent" etc.

Vid test av montering av stora kodbaser uppstod inga större problem. När man bygger Firefox och LLVM/Clang används python-skript och cmake, så att ersätta coreutils påverkade dem inte. Att bygga Linux-kärnan gick relativt smidigt, med bara två problem som uppstod: felutdata när man använder chown med en symbolisk länk och avsaknaden av ett "-n"-alternativ i ln-verktyget.

Källa: opennet.ru

Lägg en kommentar