Se ha publicado la versión del proyecto uutils coreutils 0.4.0 (Rust Coreutils), que desarrolla una alternativa al paquete GNU Coreutils, escrita en Rust. El conjunto de coreutils incluye más de cien utilidades, incluyendo sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln y ls. El objetivo del proyecto es crear una implementación alternativa multiplataforma de Coreutils, capaz de funcionar en plataformas como Windows, Redox y Fuchsia.
Rust Coreutils está habilitado por defecto en la versión 25.10 de Ubuntu y se utiliza en las distribuciones AerynOS (Serpent OS) y Apertis (desarrollado por 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 desarrollo está trabajando en análogos escritos en Rust de los conjuntos de utilidades util-linux, diffutils, findutils y procps, así como en los programas sed y login.
En la nueva versión de Rust Coreutils:
- Se ha mejorado la compatibilidad con el conjunto de pruebas de referencia de GNU Coreutils, habiéndose completado con éxito 544 pruebas, 12 más que en la versión anterior (532). 56 (68) pruebas fallaron y 33 (33) pruebas fueron omitidas. Se declara un nivel de compatibilidad del 85.80% (antes 83.91%).
- En la utilidad data se mejoró la compatibilidad con GNU date en el manejo de zonas horarias (se agregó la opción de usar nombres abreviados de zonas horarias en la opción —set).
- En la utilidad factor se ha utilizado el paquete num_prime para acelerar la factorización de tipos u64/u128.
- En la utilidad tsort, la implementación del algoritmo de recorrido DFS se ha cambiado de un método recursivo a un método iterativo para prevenir desbordamientos de pila.
- En la utilidad cksum se ha implementado soporte para hashes sha2 y sha3. Se han añadido pruebas para monitorear los cambios en el rendimiento de cksum. La funcionalidad hashsum se ha trasladado a cksum.
- En la utilidad mkdir se ha eliminado un desbordamiento de pila que causaba fallos al crear un gran número de directorios anidados (más de 200).
- En las utilidades stdbuf y uptime se ha implementado soporte para la plataforma OpenBSD.
- Se ha mejorado la construcción y las pruebas en la plataforma FreeBSD.
- Se han realizado mejoras generales para aumentar la portabilidad.
- Se han ampliado las capacidades, resuelto problemas y añadido opciones faltantes para las utilidades base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc.
Adicionalmente, se puede destacar la discrepancia en el comportamiento de la utilidad «du» entre los conjuntos uutils y GNU Coreutils, que surgió después de la transición de Ubuntu 25.10 a uutils. Los desarrolladores aún no han decidido si interpretar esta discrepancia como un error, ya que, por un lado, el comportamiento de uutils tiene lógica y el conjunto de pruebas de GNU Coreutils no revela problemas, pero, por otro lado, las incompatibilidades con GNU Coreutils deben ser tratadas como errores, y el comportamiento de Busybox se alinea con GNU Coreutils.
Se observa un comportamiento diferente al indicar varios directorios como argumentos de la utilidad «du» cuando algunos de esos directorios son subdirectorios de otros (por ejemplo, /var y /var/log). Uutils muestra el tamaño real de cada directorio por separado, y en la línea final muestra el tamaño total de todos los directorios indicados. GNU Coreutils muestra en la línea final el tamaño real que los directorios indicados ocupan en el disco, pero en una lista separada muestra los tamaños de cada directorio descontando los subdirectorios, por lo que su tamaño resulta ser menor que el real. Además, los valores mostrados por GNU Coreutils y Busybox cambian según el orden en que se indiquen los directorios.
Por ejemplo, al verificar el tamaño de los directorios «/var/log» y «/var», cuyo tamaño real es de 1540 y 35495 bytes, en GNU Coreutils se mostrará: du -smc /var/log /var 1540 /var/log 33955 /var # menor que el real 35495 total du -smc /var /var/log 35495 /var # se muestra solo /var y no se muestra /var/log 35495 total
En uutils: du -smc /var/log /var 1540 /var/log 35495 /var 37033 total # mayor que el real, pero coincide con la suma de /var y /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37033 total # mayor que el real, pero coincide con la suma de /var y /var/log
En Busybox: du -smc /var/log /var 1540 /var/log 33955 /var # menor que el real 35495 total du -smc /var /var/log 35495 /var # se muestra solo /var y no se muestra /var/log 35495 total
Fuente: opennet.ru
