Lanzamiento de uutils 0.11, una variante de GNU Coreutils en Rust

Se ha publicado la versión 0.11.0 del proyecto uutils coreutils (Rust Coreutils), que desarrolla un equivalente del paquete GNU Coreutils, escrito en Rust. El conjunto de coreutils incluye más de cien utilidades, tales como sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln y ls. El objetivo del proyecto es crear una implementación alternativa y multiplataforma de Coreutils, que además pueda funcionar en plataformas como Windows, Redox y Fuchsia.

Rust Coreutils se utiliza por defecto en la versión de Ubuntu 25.10 y parcialmente en Ubuntu 26.04. Rust Coreutils también se aplica en las distribuciones AerynOS (Serpent OS) y Apertis (desarrollado por la empresa Collabora). A diferencia de GNU Coreutils, la implementación en Rust se distribuye bajo la licencia permisiva MIT, en lugar de la licencia copyleft GPL. Además, el mismo equipo de desarrolladores está trabajando en analogías escritas en Rust de los conjuntos de utilidades util-linux, diffutils, findutils, procps y acl, así como de los programas sed y login.

En la nueva versión de Rust Coreutils:

  • El nivel de compatibilidad con el conjunto de pruebas de referencia de GNU Coreutils alcanzó el 95.33% (anteriormente 94.44%). Se realizaron con éxito 653 pruebas, que son 8 más que en la versión anterior (645). 22 pruebas fallaron (anteriormente 29), y 15 pruebas fueron omitidas (igual que antes).
  • Se ha integrado un nuevo motor para diagnosticar problemas, basado en la biblioteca ariadne, que al ejecutar utilidades en la terminal genera informes de errores claros que indican los argumentos de la línea de comandos que causaron el problema. La visualización de errores se ha aplicado a las utilidades chmod, mkdir, mkfifo, mknod, install, tr, expr, sort, numfmt, cut, env, head, tail, truncate, split, shred, stdbuf, od, seq, dd, stat, join, csplit, ls, df y du. Se ha propuesto la variable de entorno UUTILS_DIAG para desactivar los informes diagnósticos.
  • Al construir las versiones se han activado las optimizaciones basadas en los resultados de perfilado de código (PGO — Profile-guided optimization), lo que permite generar un código más optimizado basándose en el análisis de las características de la ejecución del programa. Según los desarrolladores, el aumento del rendimiento en algunas operaciones ha sido de hasta un 31%.
  • Se ha realizado una optimización del rendimiento de las utilidades cp (+32.93%), join (2.5 veces más rápido que GNU gracias a la desactivación de comparaciones innecesarias de la localidad), od, ptx (+4%), nl, tail, expand, unexpand, numfmt y sort. Las situaciones donde las operaciones se ejecutan notablemente más lentas que en GNU Coreutils se consideran errores.
  • Se han corregido discrepancias en el comportamiento de las utilidades pr, numfmt, join, id, mkdir, fold, sort, stat, od y date con respecto a GNU Coreutils.
  • Se han implementado opciones específicas de GNU Coreutils: «uname -A», «uname —all-labeled», «cut -F», «cut —whitespace-delimited», «pr —columns», «pr —join-lines», «pr -f».
  • En las utilidades mv, cp, rm, chmod y stdbuf se ha trabajado para reforzar la seguridad y prevenir vulnerabilidades causadas por condiciones de carrera que permiten modificar datos en el momento después de verificar la validez de la información, pero antes de ejecutar la operación sobre ellos, por ejemplo, sustituyendo un archivo por un enlace simbólico en el momento entre la finalización de la verificación y el inicio de la operación. En el contexto del uso de las utilidades cp, chmod y mv en scripts del sistema ejecutados con privilegios de root, tales vulnerabilidades permiten copiar o sobrescribir archivos arbitrarios.
  • Se ha trabajado para eliminar cierres inesperados en las utilidades split, yes, sort, stat, csplit, ls, od, nl, pr, csplit, dd, touch, tail, tac y who.
  • Se han implementado variantes de las utilidades kill y uptime para Windows.
  • Se ha dejado de utilizar los paquetes byteorder, same-file, filetime, winapi-util, file_diff, mockstream, binary-heap-plus, compare, arrayref (recientemente comprometido), exacl y dns-lookup a favor de funciones de las bibliotecas std, rustix y windows-sys.
  • Se ha agregado soporte para la propiedad de localización «collation» a las utilidades ls y comm, lo que permite realizar comparaciones teniendo en cuenta el significado de los caracteres (por ejemplo, al comparar, puede no tenerse en cuenta el acento).
  • Se ha mejorado el manejo de caracteres multibyte en las utilidades nl y cut.

Además, se puede destacar la publicación por parte de Canonical de dos imágenes experimentales de contenedores con herramientas para el desarrollo de programas en el lenguaje Rust, que cumplen con la especificación Dev Container. La primera imagen incluye Rust 1.93, Cargo, rust-analyzer, Clippy, Rustfmt, Miri (intérprete para detectar comportamientos indefinidos), cargo-auditable (auditoría de compilaciones), GCC, Clang, LLD, pkg-config, Just, Git, Vim, Helix, Ripgrep, Hyperfine, Bacon, xh y curl. La segunda imagen además contiene paquetes para el desarrollo en Ubuntu: git-buildpackage, sbuild, ubuntu-dev-tools, devscripts, dh-make, dh-cargo, autopkgtest, cargo-vendor-filterer.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster