Adaptando Debian para usar a implementación Rust de coreutils

Sylvestre Ledru, coñecido polo seu traballo na construción de Debian GNU/Linux usando o compilador Clang, informou dun experimento exitoso utilizando un conxunto alternativo de utilidades, coreutils, reescritos na linguaxe Rust. Coreutils inclúe utilidades como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. Para a primeira etapa de integración en Debian da versión Rust de coreutils, fixéronse os seguintes obxectivos:

  • Empaqueta unha alternativa de Rust a coreutils para Debian e Ubuntu.
  • Arrancar Debian co escritorio GNOME usando rust-coreutils.
  • Instalando os 1000 paquetes máis populares do repositorio.
  • Construír a partir de fontes do núcleo de Firefox, LLVM/Clang e Linux nun ambiente con rust-coreutils.

Despois de crear máis de 100 parches para Rust/coreutils, puidemos acadar con éxito todos os obxectivos previstos. O traballo en curso inclúe a implementación das utilidades e opcións que faltan, a mellora da calidade e a uniformidade do código, o desenvolvemento da suite de probas e a eliminación de fallos que se producen ao executar a suite de probas desde GNU Coreutils (141 de 613 están a executarse con éxito ata o momento). ).

Ao crear o paquete rust-coreutils, decidiuse non substituír o paquete coreutils, senón proporcionarlles a posibilidade de traballar en paralelo. As opcións de utilidade na linguaxe Rust instálanse en /usr/lib/cargo/bin/ e actívanse engadindo este directorio á variable de ambiente PATH. A creación do paquete rust-coreutils foi complicada pola necesidade de descargar todas as dependencias de compilación no repositorio, incluíndo Rust e varios paquetes de caixas pequenas.

Crear unha imaxe de arranque non foi un problema, pero adaptar os paquetes a un ambiente con rust-coreutils requiriu moito traballo, xa que moitos scripts posteriores á instalación chaman a utilidades desde o conxunto coreutils. O maior número de problemas foi causado pola falta de opcións necesarias, por exemplo, a utilidade "cp" non tiña as opcións "--archive" e "--no-dereference", "ln" non admitía o "- relativa", mktemp non admitía "-t" , en sincronización "-fs", en instalar - "--owner" e "-group". Outros problemas xurdiron debido a diferenzas de comportamento, por exemplo, a utilidade de instalación non admitía especificar /dev/null como ficheiro de entrada, mkdir tiña a opción "--parents" en lugar de "-parent", etc.

Ao probar a montaxe de grandes bases de código, non se presentaron problemas importantes. Ao construír Firefox e LLVM/Clang, utilízanse scripts de Python e cmake, polo que substituír coreutils non lles afectou. A construción do núcleo de Linux foi relativamente sen problemas, con só dous problemas xurdidos: saída de erro ao usar chown cunha ligazón simbólica e a falta dunha opción "-n" na utilidade ln.

Fonte: opennet.ru

Engadir un comentario