Sylvestre Ledru, conocido por su trabajo en la construcción de Debian GNU/Linux utilizando el compilador Clang, informó sobre el éxito de un experimento que implementa un conjunto alternativo de utilidades coreutils reescrito en Rust. El conjunto de coreutils incluye utilidades como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln y ls. Para la primera fase de integración del conjunto de coreutils en Rust en Debian, se establecieron los siguientes objetivos:
- Crear un paquete con una variante alternativa de coreutils en Rust para Debian y Ubuntu.
- Descargar Debian con escritorio GNOME, utilizando rust-coreutils.
- Instalar los 1000 paquetes más populares del repositorio.
- Compilar desde el código fuente Firefox, LLVM/Clang y el núcleo de Linux en un entorno con rust-coreutils.
Después de crear más de 100 parches para Rust/coreutils, se lograron todos los objetivos establecidos. El trabajo contínuo incluye implementar utilidades y opciones faltantes, mejorar la calidad y la uniformidad del código, desarrollar el conjunto de pruebas y resolver fallos que se presentan al ejecutar el conjunto de pruebas de GNU Coreutils (hasta ahora, se ejecutan con éxito 141 pruebas de 613).
Al crear el paquete rust-coreutils, se decidió no reemplazar el paquete coreutils, sino permitir su funcionamiento paralelo. Las variantes de utilidades en Rust se instalan en /usr/lib/cargo/bin/ y se activan al agregar este directorio a la variable de entorno PATH. La creación del paquete rust-coreutils se complicó debido a la necesidad de cargar en el repositorio todas las dependencias de compilación, incluyendo Rust y varios pequeños paquetes crate.
No se presentaron problemas particulares al crear la imagen de arranque, pero la adaptación de los paquetes para el entorno con rust-coreutils requirió un gran trabajo, ya que muchos scripts de post-instalación invocan utilidades del conjunto coreutils. La mayor parte de los problemas surgieron por la falta de opciones necesarias; por ejemplo, la utilidad 'cp' carecía de las opciones '--archive' y '--no-dereference', la opción '--relative' no estaba soportada en 'ln', en mktemp faltaba '-t', en sync '-fs', y en install '--owner' y '--group'. Otros problemas surgieron debido a diferencias en el comportamiento; por ejemplo, la utilidad install no soportaba especificar /dev/null como archivo de entrada, en mkdir en lugar de '--parent' había la opción '--parents', entre otros.
Durante las pruebas de compilación de grandes bases de código, no surgieron grandes problemas. En la compilación de Firefox y LLVM/Clang se utilizan scripts de Python y CMake, por lo que el reemplazo de coreutils no afectó. La compilación del kernel de Linux transcurrió relativamente bien, solo surgieron dos problemas: un mensaje de error al usar chown con un enlace simbólico y la falta de la opción "-n" en la utilidad ln.
Fuente: opennet.ru
