Vydání Rust Coreutils 0.4. Rozdíl v chování utility du mezi uutils a GNU Coreutils

Byl vydán výstup projektu uutils coreutils 0.4.0 (Rust Coreutils), který vyvíjí analog GNU Coreutils napsaný v jazyce Rust. Coreutils obsahuje více než sto utilit, včetně sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls. Cílem projektu je vytvoření cross-platformní alternativní implementace Coreutils, která je mimo jiné schopna pracovat na platformách Windows, Redox a Fuchsia.

Rust Coreutils je ve výchozím nastavení použit ve vydání Ubuntu 25.10 a je aplikován v distribucích AerynOS (Serpent OS) a Apertis (vyvíjeno společností Collabora). Na rozdíl od GNU Coreutils je implementace v Rustu šířena pod permisivní licencí MIT, místo kopyleftové licence GPL. Navíc stejný tým vývojářů vyvíjí napsané v Rustu analogy sad utilit util-linux, diffutils, findutils a procps, stejně jako programů sed a login.

V nové verzi Rust Coreutils:

  • Byla vylepšena kompatibilita s referenčním testovacím souborem GNU Coreutils, při jehož přechodu bylo úspěšně provedeno 544 testů, což je o 12 více než v předchozí verzi (532). 56 (68) testů selhalo a 33 (33) testů bylo přeskočeno. Prohlášená úroveň kompatibility je 85,80% (bylo 83,91%).
  • Ve utility data byla vylepšena kompatibilita s GNU date při zpracování časových pásem (byla přidána možnost uvádění zkrácených názvů časových pásem v možnosti —set).
  • V utility factor byl využit balíček num_prime pro urychlení faktorizace typů u64/u128.
  • V utility tsort byla implementace algoritmu DFS převedena z rekurzivní na iterativní způsob provozu, aby se předešlo přetečení zásobníku.
  • V utility cksum byla implementována podpora hashů sha2 a sha3. Byly přidány testy pro sledování změny výkonu cksum. Funkčnost hashsum byla přesunuta do cksum.
  • V utility mkdir bylo odstraněno přetečení zásobníku, které vedlo k havárii při vytváření velkého (více než 200) počtu vnořených adresářů.
  • V utilitách stdbuf a uptime byla implementována podpora platformy OpenBSD.
  • Byla vylepšena sestava a testování na platformě FreeBSD.
  • Byly provedeny obecné vylepšení pro zvýšení přenositelnosti.
  • Byly rozšířeny funkce, odstraněny problémy a přidány chybějící možnosti pro utility base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc.

Dále lze zmínit rozpor v chování utility „du“ mezi sady uutils a GNU Coreutils, který se objevil po přechodu Ubuntu 25.10 na uutils. Vývojáři se ještě nerozhodli, zda považovat tento rozpor za chybu, protože na jedné straně existuje v chování uutils logika a testovací sada GNU Coreutils neodhaluje problémy, ale na druhé straně se s GNU Coreutils předpokládá, že by bylo třeba nekompatibilitu zpracovat jako chybu a chování Busybox odpovídá GNU Coreutils.

Odlišné chování se projevuje, pokud při zadávání argumentů pro nástroj „du“ uvedeme více adresářů v situaci, kdy některé z těchto adresářů jsou podadresáři jiných (například /var a /var/log). Uutils zobrazuje skutečnou velikost každého jednotlivého adresáře a ve shrnující řádce uvádí celkovou velikost všech zadaných adresářů. GNU Coreutils v shrnující řádce ukazuje skutečnou velikost, kterou zadané adresáře zaberou na disku, ale v odděleném seznamu zobrazuje velikosti každého adresáře s odečtením vložených podadresářů, což znamená, že jejich velikost je menší než skutečná. Kromě toho se hodnoty zobrazované v GNU Coreutils a Busybox mění v závislosti na pořadí uvedení adresářů.

Například při kontrole velikosti adresářů „/var/log“ a „/var“, jejichž skutečné velikosti jsou 1540 a 35495 bajtů, bude v GNU Coreutils zobrazeno: du -smc /var/log /var 1540 /var/log 33955 /var # méně než skutečné 35495 total du -smc /var /var/log 35495 /var # zobrazen pouze /var a /var/log nebude zobrazen 35495 total

V uutils: du -smc /var/log /var 1540 /var/log 35495 /var 37033 total # více než skutečné, ale odpovídá součtu /var a /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37033 total # více než skutečné, ale odpovídá součtu /var a /var/log

V Busybox: du -smc /var/log /var 1540 /var/log 33955 /var # méně než skutečné 35495 total du -smc /var /var/log 35495 /var # zobrazen pouze /var a /var/log nebude zobrazen 35495 total

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster