Adaptación de Debian para utilizar la implementación Rust de coreutils

Sylvestre Ledru, conocido por su trabajo en la construcción de Debian GNU/Linux utilizando el compilador Clang, informó sobre un experimento exitoso utilizando un conjunto alternativo de utilidades, coreutils, reescrito en el lenguaje Rust. Coreutils incluye utilidades como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln y ls. Para la primera etapa de integración en Debian de la versión Rust de coreutils, se establecieron los siguientes objetivos:

  • Empaquete una alternativa de Rust a coreutils para Debian y Ubuntu.
  • Arrancando Debian con escritorio GNOME usando Rust-Coreutils.
  • Instalando los 1000 paquetes más populares del repositorio.
  • Compile a partir de fuentes del kernel de Firefox, LLVM/Clang y Linux en un entorno con Rust-Coreutils.

Después de crear más de 100 parches para Rust/coreutils, pudimos lograr con éxito todos los objetivos previstos. El trabajo en curso incluye la implementación de utilidades y opciones faltantes, la mejora de la calidad y la uniformidad del código, el desarrollo del conjunto de pruebas y la eliminación de fallos que se producen al ejecutar el conjunto de pruebas desde GNU Coreutils (141 pruebas de 613 se están ejecutando con éxito hasta el momento). ).

Al crear el paquete rust-coreutils, se decidió no reemplazar el paquete coreutils, sino brindarles la capacidad de trabajar en paralelo. Las opciones de utilidad en el lenguaje Rust se instalan en /usr/lib/cargo/bin/ y se activan agregando este directorio a la variable de entorno PATH. La creación del paquete rust-coreutils fue complicada por la necesidad de descargar todas las dependencias de compilación en el repositorio, incluido Rust y varios paquetes pequeños.

Crear una imagen de arranque no fue un problema, pero adaptar los paquetes para un entorno con rust-coreutils requirió mucho trabajo, ya que muchos scripts posteriores a la instalación llaman a utilidades del conjunto de coreutils. La mayor cantidad de problemas fueron causados ​​por la falta de las opciones necesarias, por ejemplo, la utilidad "cp" no tenía las opciones "--archive" y "--no-dereference", "ln" no admitía "- opción relativa”, mktemp no admitía “-t”, en sincronización "-fs", en instalación - "--owner" y "-group". Otros problemas surgieron debido a diferencias en el comportamiento, por ejemplo, la utilidad de instalación no admitía especificar /dev/null como archivo de entrada, mkdir tenía la opción “--parents” en lugar de “-parent”, etc.

Al probar el ensamblaje de grandes bases de código, no surgieron problemas importantes. Al compilar Firefox y LLVM/Clang, se utilizan scripts de Python y cmake, por lo que reemplazar coreutils no los afectó. La construcción del kernel de Linux se desarrolló relativamente sin problemas, y solo surgieron dos problemas: salida de error al usar chown con un enlace simbólico y la falta de una opción "-n" en la utilidad ln.

Fuente: opennet.ru

Añadir un comentario