Pubblicata la versione 0.4.0 del progetto uutils coreutils (Rust Coreutils), che sviluppa un'alternativa al pacchetto GNU Coreutils, scritta in Rust. Il pacchetto coreutils include oltre cento utilità, tra cui sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. L'obiettivo del progetto è creare un'implementazione cross-platform alternativa di Coreutils, in grado di funzionare su piattaforme Windows, Redox e Fuchsia.
Rust Coreutils è incluso di default nella versione di Ubuntu 25.10 ed è utilizzato nelle distribuzioni AerynOS (Serpent OS) e Apertis (sviluppato da Collabora). A differenza di GNU Coreutils, l'implementazione in Rust è distribuita sotto una licenza permissiva MIT, invece della licenza copyleft GPL. Inoltre, lo stesso team di sviluppatori sta sviluppando versioni scritte in Rust degli strumenti util-linux, diffutils, findutils e procps, oltre ai programmi sed e login.
Nella nuova versione di Rust Coreutils:
- Migliorata la compatibilità con il set di test di riferimento GNU Coreutils, durante il quale sono stati eseguiti con successo 544 test, 12 in più rispetto alla versione precedente (532). 56 (68) test hanno avuto esito negativo, mentre 33 (33) test sono stati saltati. È stato dichiarato un livello di compatibilità del 85,80% (precedentemente 83,91%).
- Nell'utilità data migliorata la compatibilità con GNU date nella gestione dei fusi orari (è stata aggiunta la possibilità di specificare le abbreviazioni dei fusi orari nell'opzione —set).
- Nell'utilità factor è stato utilizzato il pacchetto num_prime per accelerare la fattorizzazione dei tipi u64/u128.
- Nell'utilità tsort l'implementazione dell'algoritmo di attraversamento DFS è stata convertita da un metodo ricorsivo a uno iterativo per prevenire il sovraccarico dello stack.
- Nell'utilità cksum è stato implementato il supporto per gli hash sha2 e sha3. Sono stati aggiunti test per monitorare le variazioni delle prestazioni di cksum. La funzionalità hashsum è stata trasferita in cksum.
- Nell'utilità mkdir è stato risolto un problema di overflow dello stack che portava a terminazioni anomale durante la creazione di un gran numero di directory annidate (oltre 200).
- Nelle utilità stdbuf e uptime è stato implementato il supporto per la piattaforma OpenBSD.
- Migliorata la compilazione e il test sulla piattaforma FreeBSD.
- Introdotte miglioramenti generali per aumentare la portabilità.
- Ampliate le funzionalità, risolti problemi e aggiunte opzioni mancanti per le utilità base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc.
Inoltre, si può notare la divergenza nel comportamento dell'utilità "du" tra i pacchetti uutils e GNU Coreutils, emersa dopo il passaggio di Ubuntu 25.10 a uutils. Gli sviluppatori non hanno ancora deciso se considerare questa divergenza un errore, poiché da un lato il comportamento di uutils ha una logica e il set di test di GNU Coreutils non rivela problemi, ma dall'altro lato le incompatibilità con GNU Coreutils devono essere trattate come errori e il comportamento di Busybox corrisponde a GNU Coreutils.
Un comportamento diverso si osserva quando si specificano diversi cataloghi come argomenti per l'utilità «du», in situazioni in cui alcuni dei cataloghi sono sottocataloghi di altri cataloghi (ad esempio, /var e /var/log). Uutils mostra la dimensione reale di ciascun singolo catalogo, mentre nella riga finale visualizza la dimensione totale di tutti i cataloghi specificati. GNU Coreutils mostra nella riga finale la dimensione effettiva che i cataloghi specificati occupano su disco, ma in un elenco separato mostra le dimensioni di ciascun catalogo al netto dei cataloghi annidati, il che fa sì che le loro dimensioni risultino inferiori a quelle effettive. Inoltre, i valori visualizzati in GNU Coreutils e Busybox cambiano a seconda dell'ordine in cui vengono specificati i cataloghi.
Ad esempio, controllando le dimensioni dei cataloghi «/var/log» e «/var», le cui dimensioni effettive sono 1540 e 35495 byte, in GNU Coreutils verrà visualizzato: du -smc /var/log /var 1540 /var/log 33955 /var # inferiore al reale 35495 totale du -smc /var /var/log 35495 /var # mostrato solo /var e non mostrato /var/log 35495 totale
In uutils: du -smc /var/log /var 1540 /var/log 35495 /var 37033 totale # superiore al reale, ma corrisponde alla somma di /var e /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37033 totale # superiore al reale, ma corrisponde alla somma di /var e /var/log
In Busybox: du -smc /var/log /var 1540 /var/log 33955 /var # inferiore al reale 35495 totale du -smc /var /var/log 35495 /var # mostrato solo /var e non mostrato /var/log 35495 totale
Fonte: opennet.ru
