Die Ausgabe des Projekts uutils coreutils 0.4.0 (Rust Coreutils) wurde veröffentlicht, das ein Äquivalent des GNU Coreutils-Pakets darstellt und in der Programmiersprache Rust entwickelt wurde. Die coreutils umfassen über einhundert Dienstprogramme, darunter sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln und ls. Ziel des Projekts ist es, eine plattformübergreifende alternative Implementierung von Coreutils zu schaffen, die unter anderem auf Windows, Redox und Fuchsia lauffähig ist.
Rust Coreutils ist standardmäßig in der Veröffentlichung von Ubuntu 25.10 integriert und wird in den Distributionen AerynOS (Serpent OS) und Apertis (das von Collabora entwickelt wird) verwendet. Im Gegensatz zu GNU Coreutils wird die Implementierung in Rust unter der permissiven MIT-Lizenz verbreitet, anstelle der Copyleft-Lizenz GPL. Darüber hinaus entwickelt dasselbe Entwicklerteam Rust-basierte Alternativen zu den Dienstprogrammen util-linux, diffutils, findutils und procps sowie zu den Programmen sed und login.
In der neuen Version von Rust Coreutils:
- Die Kompatibilität mit dem Referenz-Testset von GNU Coreutils wurde verbessert, wobei 544 Tests bestanden wurden, was 12 mehr sind als in der vorherigen Version (532). 56 (68) Tests sind fehlgeschlagen, und 33 (33) Tests wurden übersprungen. Der angegebene Kompatibilitätsgrad beträgt 85,80 % (vorher 83,91 %).
- Im Programm data wurde die Kompatibilität mit GNU date bei der Verarbeitung von Zeitzonen verbessert (es wurde die Möglichkeit hinzugefügt, abgekürzte Bezeichnungen von Zeitzonen in der Option —set anzugeben).
- Im Programm factor wurde das Paket num_prime verwendet, um die Faktorisierung von u64/u128-Typen zu beschleunigen.
- Im Programm tsort wurde die Implementierung des DFS-Algorithmus von einer rekursiven auf eine iterative Arbeitsweise umgestellt, um ein Stack Overflow zu verhindern.
- Im Programm cksum wurde die Unterstützung für sha2 und sha3 Hashes implementiert. Es wurden Tests hinzugefügt, um Leistungsänderungen bei cksum zu verfolgen. Die Funktionalität von hashsum wurde in cksum integriert.
- Im Programm mkdir wurde ein Stack Overflow behoben, der zu einem Absturz führte, wenn eine große Anzahl (über 200) von verschachtelten Verzeichnissen erstellt wurde.
- In den Programmen stdbuf und uptime wurde die Unterstützung für die OpenBSD-Plattform implementiert.
- Der Build- und Testprozess auf der FreeBSD-Plattform wurde verbessert.
- Es wurden allgemeine Verbesserungen zur Erhöhung der Portabilität vorgenommen.
- Die Funktionen wurden erweitert, Probleme behoben und fehlende Optionen für die Programme base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc hinzugefügt.
Zusätzlich ist das abweichende Verhalten des Programms 'du' aus den uutils- und GNU Coreutils-Sets zu erwähnen, das nach dem Wechsel von Ubuntu 25.10 zu uutils aufkam. Die Entwickler haben noch nicht entschieden, ob sie dieses Abweichen als Fehler interpretieren möchten, da einerseits im Verhalten von uutils Logik steckt und das Testset von GNU Coreutils keine Probleme aufzeigt, andererseits allerdings Inkompatibilitäten mit GNU Coreutils als Fehler behandelt werden sollen und das Verhalten von Busybox dem von GNU Coreutils entspricht.
Ein unterschiedliches Verhalten wird beobachtet, wenn in den Argumenten des Tools "du" mehrere Verzeichnisse angegeben werden, wobei einige der Verzeichnisse Unterverzeichnisse anderer Verzeichnisse sind (z. B. /var und /var/log). Uutils zeigt die tatsächliche Größe jedes einzelnen Verzeichnisses an und gibt in der letzten Zeile die Gesamtsumme aller angegebenen Verzeichnisse aus. GNU Coreutils zeigt in der letzten Zeile die tatsächliche Größe an, die die angegebenen Verzeichnisse auf der Festplatte einnehmen, zeigt jedoch in einer separaten Liste die Größen jedes Verzeichnisses abzüglich der Unterverzeichnisse an, wodurch ihre Größe geringer ausfällt als die tatsächliche. Darüber hinaus ändern sich die Werte, die in GNU Coreutils und Busybox ausgegeben werden, abhängig von der Reihenfolge der angegebenen Verzeichnisse.
Zum Beispiel, wenn man die Größe der Verzeichnisse "/var/log" und "/var" prüft, deren tatsächliche Größen 1540 und 35495 Byte betragen, wird in GNU Coreutils ausgegeben: du -smc /var/log /var 1540 /var/log 33955 /var # kleiner als der tatsächliche Wert 35495 total du -smc /var /var/log 35495 /var # nur /var angeführt und /var/log nicht angezeigt 35495 total
In uutils: du -smc /var/log /var 1540 /var/log 35495 /var 37033 total # größer als der tatsächliche Wert, entspricht aber der Summe von /var und /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37033 total # größer als der tatsächliche Wert, entspricht aber der Summe von /var und /var/log
In Busybox: du -smc /var/log /var 1540 /var/log 33955 /var # kleiner als der tatsächliche Wert 35495 total du -smc /var /var/log 35495 /var # nur /var angeführt und /var/log nicht angezeigt 35495 total
Quelle: opennet.ru
