Piden adaptar Debian para usar la implementación de Rust de coreutils

Sylvestre Ledru (un desarrollador conocido por su trabajo en la construcción de Debian GNU/Linux usando el compilador Clang) dio a conocer recientemente el informe sobre un experimento exitoso con un conjunto alternativo de utilidades, coreutils, reescrito en Rust.

Para quienes desconocen de Coreutils, deben saber que este incluye utilidades como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln y ls. Sylvestre Ledru menciona que para la primera etapa de integración en Debian de la versión coreutils en Rust, se establecieron los siguientes objetivos:

  • Crear un paquete con coreutils de Rust alternativos tanto para Debian como para Ubuntu.
  • Arrancar Debian con el entorno de escritorio Gnome usando rust-coreutils.
  • Instalar 1000 de los paquetes más populares del repositorio.
  • Constuir a partir de fuentes del kernel de Firefox, LLVM/Clang y Linux con rust-coreutils.

Y con ello después de crear más de 100 parches para Rust/coreutils, todos los objetivos previstos se lograron con éxito. Actualmente el trabajo en curso destaca la implementación de utilidades y opciones faltantes, mejorando la calidad y consistencia del código, desarrollando la suite de pruebas, arreglando fallas que ocurren cuando se ejecuta la suite de pruebas GNU Coreutils (141 de 613 pruebas se están ejecutando exitosamente hasta ahora).

Además, menciona que al crear el paquete rust-coreutils, se decidió no reemplazar el paquete coreutils, sino permitir que se ejecutaran en paralelo. Las versiones Rust de las utilidades 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 dificultó la descarga de todas las dependencias de compilación en el repositorio, incluido Rust y varios paquetes de cajas pequeñas.

Comencé a contribuir a las Coreutils alternativas desarrolladas en Rust . El proyecto tiene como objetivo proponer un reemplazo directo de GNU Coreutils basado en C , y quería evaluar si esto podría usarse para ejecutar Debian normal. Similar a lo que hice con clang.debian.net hace unos años (reconstruyendo el archivo Debian usando clang en lugar de gcc).

Espero que la mayoría de los lectores sepan qué es Coreutils. Es un conjunto de programas que realizan operaciones simples (copiar / mover archivo, cambiar permisos / propiedad, etc.). Incluso si algunos comandos son de los años 70, están en la base de Linux, Unix y macOS. Si bien se pueden encontrar diferentes implementaciones, están tratando de seguir siendo compatibles en términos de argumentos, opciones, etc. ¡Esta implementación de Coreutils no es diferente!

Por otra parte, menciona que no hubo problemas particulares para crear la imagen de arranque del sistema, pero que si al adaptar los paquetes para el entorno rust-coreutils requirió mucho trabajo, ya que muchos scripts posteriores a la instalación llaman a las utilidades de la suite coreutils, pues la mayoría de los problemas fueron causados ​​por la falta de opciones necesarias, por ejemplo, menciona que la utilidad «cp» carecía de las opciones «–archive» y «–no-dereference», mientras que para «ln» no soportaba «–relative «y la opción mktemp -» -t «, en sincronización» -fs «, en install -» –owner «y» –group «.

También surgieron otros problemas debido a diferencias en el comportamiento, por ejemplo, la utilidad de instalación no admitía especificar /dev/null como un archivo de entrada, en mkdir en lugar de «–parent» había una opción «–parents», y así sucesivamente.

Empaquetar en Debian no es una tarea trivial ni sencilla. Requiere cargar de forma independiente todas las dependencias en el archivo. Rust, con su nuevo ecosistema y pequeñas cajas, hace que esta tarea sea mucho más difícil.

Al probar una compilación de grandes bases de código, no hubo grandes problemas. 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 fue relativamente fluida, con solo dos problemas emergentes: la salida de error cuando se usa chown con un enlace simbólico y la falta de la opción «-n» en la utilidad ln.

Finalmente si estás interesando en conocer más al respecto sobre la nota, puedes consultar los detalles en el siguiente enlace.


El contenido del artículo se adhiere a nuestros principios de ética editorial. Para notificar un error pincha aquí.

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.