Wydanie Rust Coreutils 0.4. Rozbieżności w zachowaniu narzędzia du w uutils i GNU Coreutils

Opublikowano wersję projektu uutils coreutils 0.4.0 (Rust Coreutils), który rozwija analog pakietu GNU Coreutils napisany w języku Rust. W skład coreutils wchodzi ponad sto narzędzi, w tym sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln i ls. Celem projektu jest stworzenie międzyplatformowej alternatywnej implementacji Coreutils, między innymi zdolnej do pracy na platformach Windows, Redox i Fuchsia.

Rust Coreutils jest domyślnie używany w wydaniu Ubuntu 25.10 i stosowany w dystrybucjach AerynOS (Serpent OS) oraz Apertis (rozwijanym przez firmę Collabora). W przeciwieństwie do GNU Coreutils, implementacja w Rust jest udostępniana na licencji MIT, zamiast licencji GPL. Dodatkowo ta sama drużyna programistów rozwija napisane w Rust odpowiedniki zestawów narzędzi util-linux, diffutils, findutils i procps, a także programów sed i login.

W nowej wersji Rust Coreutils:

  • Poprawiono zgodność z etalonowym zestawem testów GNU Coreutils, w trakcie którego pomyślnie wykonano 544 testy, co stanowi o 12 więcej niż w poprzedniej wersji (532). 56 (68) testów zakończyło się niepowodzeniem, a 33 (33) testów zostało pominiętych. Ogłoszono poziom zgodności 85,80% (wcześniej 83,91%).
  • W narzędziu data poprawiono zgodność z GNU date podczas przetwarzania stref czasowych (dodano możliwość podawania skróconych nazw stref czasowych w opcji —set).
  • W narzędziu factor wykorzystano pakiet num_prime do przyspieszenia faktoryzacji typów u64/u128.
  • W narzędziu tsort implementacja algorytmu przeszukiwania DFS została przeniesiona z rekurencyjnej na iteracyjną metodę pracy, aby zapobiec przepełnieniu stosu.
  • W narzędziu cksum wprowadzono wsparcie dla hashy sha2 i sha3. Dodano testy do monitorowania zmian wydajności cksum. Funkcjonalność hashsum przeniesiono do cksum.
  • W narzędziu mkdir usunięto przepełnienie stosu, które prowadziło do awaryjnego zakończenia przy tworzeniu dużej liczby (200+) zagnieżdżonych katalogów.
  • W narzędziach stdbuf i uptime wprowadzono wsparcie dla platformy OpenBSD.
  • Poprawiono kompilację i testowanie na platformie FreeBSD.
  • Wprowadzono ogólne ulepszenia w celu zwiększenia przenośności.
  • Rozszerzono możliwości, usunięto problemy i dodano brakujące opcje dla narzędzi base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc.

Dodatkowo można zauważyć rozbieżność w działaniu narzędzia „du” z zestawów uutils i GNU Coreutils, która ujawniła się po przejściu Ubuntu 25.10 na uutils. Programiści jeszcze nie zdecydowali, czy traktować tę rozbieżność jako błąd, ponieważ z jednej strony w działaniu uutils jest logika, a zestaw testowy GNU Coreutils nie wykrywa problemów, z drugiej strony jednak niezgodności z GNU Coreutils należy traktować jako błędy, a działanie Busybox odpowiada GNU Coreutils.

Różne zachowanie można zaobserwować, gdy w argumentach narzędzia „du” podaje się kilka katalogów w sytuacji, gdy niektóre z katalogów są podkatalogami innych katalogów (np. /var i /var/log). Uutils pokazuje rzeczywisty rozmiar każdego z osobna, a w końcowym wierszu wyświetla łączny rozmiar wszystkich podanych katalogów. GNU Coreutils pokazuje w końcowym wierszu rzeczywisty rozmiar, jaki zajmują podane katalogi na dysku, ale w osobnej liście pokazuje rozmiary każdego katalogu z wyłączeniem katalogów wewnętrznych, przez co ich rozmiar staje się mniejszy od rzeczywistego. Ponadto wartości wyświetlane w GNU Coreutils i Busybox zmieniają się w zależności od kolejności podawania katalogów.

Na przykład, sprawdzając rozmiar katalogów „/var/log” i „/var”, których rzeczywiste rozmiary wynoszą 1540 i 35495 bajtów, w GNU Coreutils zostanie wyświetlone: du -smc /var/log /var 1540 /var/log 33955 /var # mniej niż rzeczywiste 35495 total du -smc /var /var/log 35495 /var # pokazany tylko /var, a /var/log nie pokazany 35495 total

W uutils: du -smc /var/log /var 1540 /var/log 35495 /var 37033 total # więcej niż rzeczywiste, ale odpowiada sumie /var i /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37033 total # więcej niż rzeczywiste, ale odpowiada sumie /var i /var/log

W Busybox: du -smc /var/log /var 1540 /var/log 33955 /var # mniej niż rzeczywiste 35495 total du -smc /var /var/log 35495 /var # pokazany tylko /var, a /var/log nie pokazany 35495 total

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster