Tilpasser Debian til å bruke Rust-implementeringen av coreutils

Sylvestre Ledru, kjent for sitt arbeid med å bygge Debian GNU/Linux ved å bruke Clang-kompilatoren, rapporterte et vellykket eksperiment med et alternativt sett med verktøy, coreutils, omskrevet på Rust-språket. Coreutils inkluderer verktøy som sort, cat, chmod, chown, chroot, cp, date, dd, echo, vertsnavn, id, ln og ls. For det første trinnet av integrering i Debian av Rust-versjonen av coreutils, ble følgende mål satt:

  • Pakk et Rust-alternativ til coreutils for Debian og Ubuntu.
  • Oppstart av Debian med GNOME-skrivebord ved hjelp av rust-coreutils.
  • Installerer de 1000 mest populære pakkene fra depotet.
  • Bygg fra Firefox, LLVM/Clang og Linux-kjernekilder i et miljø med rust-coreutils.

Etter å ha laget mer enn 100 patcher for Rust/coreutils, klarte vi å oppnå alle de tiltenkte målene. Det pågående arbeidet inkluderer implementering av manglende verktøy og alternativer, forbedring av kodens kvalitet og enhetlighet, utvikling av testpakken og eliminering av krasj som oppstår når testpakken kjøres fra GNU Coreutils (141 tester av 613 kjører så langt vellykket ).

Da rust-coreutils-pakken ble opprettet, ble det besluttet å ikke erstatte coreutils-pakken, men å gi dem muligheten til å arbeide parallelt. Verktøyalternativer i Rust-språket er installert i /usr/lib/cargo/bin/ og aktiveres ved å legge til denne katalogen i PATH-miljøvariabelen. Å lage rust-coreutils-pakken ble komplisert av behovet for å laste ned alle byggeavhengighetene til depotet, inkludert Rust og forskjellige små kassepakker.

Å lage et oppstartsbilde var ikke noe problem, men å tilpasse pakkene for et miljø med rust-coreutils krevde mye arbeid, siden mange post-install script kaller verktøy fra coreutils-settet. Det største antallet problemer ble forårsaket av mangelen på nødvendige alternativer, for eksempel hadde ikke "cp"-verktøyet alternativene "--archive" og "--no-dereference", "ln" støttet ikke "- relative" alternativet, mktemp støttet ikke "-t" , i sync "-fs", i install - "--owner" og "-group". Andre problemer oppsto på grunn av forskjeller i oppførsel, for eksempel støttet ikke installasjonsverktøyet å spesifisere /dev/null som en inngangsfil, mkdir hadde "--parents"-alternativet i stedet for "-parent", etc.

Ved testing av sammenstilling av store kodebaser oppsto det ingen store problemer. Når du bygger Firefox og LLVM/Clang, brukes python-skript og cmake, så det å erstatte coreutils påvirket dem ikke. Å bygge Linux-kjernen gikk relativt greit, med bare to problemer som dukket opp: feilutdata ved bruk av chown med en symbolsk lenke og mangelen på et "-n"-alternativ i ln-verktøyet.

Kilde: opennet.ru

Legg til en kommentar