Adaptació de Debian per utilitzar la implementació Rust de coreutils

Sylvestre Ledru, conegut pel seu treball en la construcció de Debian GNU/Linux utilitzant el compilador Clang, va informar d'un experiment reeixit utilitzant un conjunt alternatiu d'utilitats, coreutils, reescrites en el llenguatge Rust. Coreutils inclou utilitats com sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln i ls. Per a la primera etapa d'integració a Debian de la versió Rust de coreutils, es van establir els objectius següents:

  • Empaquetar una alternativa Rust a coreutils per a Debian i Ubuntu.
  • Arrencada de Debian amb l'escriptori GNOME mitjançant rust-coreutils.
  • Instal·lant els 1000 paquets més populars des del repositori.
  • Construeix a partir de fonts del nucli de Firefox, LLVM/Clang i Linux en un entorn amb rust-coreutils.

Després de crear més de 100 pedaços per a Rust/coreutils, vam poder assolir amb èxit tots els objectius previstos. El treball en curs inclou la implementació de les utilitats i opcions que falten, la millora de la qualitat i la uniformitat del codi, el desenvolupament de la suite de proves i l'eliminació d'errors que es produeixen quan s'executa la suite de proves des de GNU Coreutils (141 proves de 613 s'estan executant amb èxit fins ara). ).

Quan es va crear el paquet rust-coreutils, es va decidir no substituir el paquet coreutils, sinó oferir-los la possibilitat de treballar en paral·lel. Les opcions d'utilitat en el llenguatge Rust s'instal·len a /usr/lib/cargo/bin/ i s'activen afegint aquest directori a la variable d'entorn PATH. La creació del paquet rust-coreutils es va complicar per la necessitat de descarregar totes les dependències de compilació al repositori, incloent Rust i diversos paquets de caixes petites.

Crear una imatge d'arrencada no va ser un problema, però adaptar els paquets per a un entorn amb rust-coreutils va requerir molta feina, ja que molts scripts posteriors a la instal·lació criden a utilitats des del conjunt de coreutils. El nombre més gran de problemes va ser causat per la manca d'opcions necessàries, per exemple, la utilitat "cp" no tenia les opcions "--archive" i "--no-dereference", "ln" no suportava el "- relativa", mktemp no admetia "-t" , en sincronització "-fs", a instal·lació - "--owner" i "-group". Altres problemes van sorgir a causa de diferències de comportament, per exemple, la utilitat d'instal·lació no admetia especificar /dev/null com a fitxer d'entrada, mkdir tenia l'opció "--parents" en lloc de "-parent", etc.

Quan es va provar el muntatge de bases de codi grans, no van sorgir problemes importants. Quan es construeix Firefox i LLVM/Clang, s'utilitzen scripts de Python i cmake, de manera que la substitució de coreutils no els va afectar. La construcció del nucli de Linux va anar relativament sense problemes, només van sorgir dos problemes: la sortida d'error quan s'utilitza chown amb un enllaç simbòlic i la manca d'una opció "-n" a la utilitat ln.

Font: opennet.ru

Afegeix comentari