Wydanie uutils 0.11, wersji GNU Coreutils w języku Rust

Opublikowano wersję projektu uutils coreutils 0.11.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 wieloplatformowej alternatywnej implementacji Coreutils, między innymi działającej na platformach Windows, Redox i Fuchsia.

Rust Coreutils jest domyślnie używany w wydaniu Ubuntu 25.10 i częściowo w Ubuntu 26.04. Rust Coreutils jest także 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 copyleft GPL. Dodatkowo ta sama ekipa deweloperów rozwija odpowiedniki zestawów narzędzi util-linux, diffutils, findutils, procps oraz acl napisane w Rust, a także programy sed i login.

W nowej wersji Rust Coreutils:

  • Poziom zgodności z wzorcowym zestawem testów GNU Coreutils wyniósł 95,33% (wcześniej 94,44%). Pomyślnie wykonano 653 testy, o 8 więcej niż w poprzedniej wersji (645). 22 testy zakończyły się niepowodzeniem (wcześniej 29), a 15 testów zostało pominiętych (wcześniej 15).
  • Zintegrowano nowy silnik diagnostyczny oparty na bibliotece ariadne, który wyświetla szczegółowe raporty o błędach podczas uruchamiania narzędzi w terminalu, z zaznaczeniem argumentów wiersza poleceń, które spowodowały problem. Wizualizacja błędów została wdrożona w narzędziach chmod, mkdir, mkfifo, mknod, install, tr, expr, sort, numfmt, cut, env, head, tail, truncate, split, shred, stdbuf, od, seq, dd, stat, join, csplit, ls, df i du. Aby wyłączyć raporty diagnostyczne, wprowadzono zmienną środowiskową UUTILS_DIAG.
  • Podczas budowy wydań aktywowane są optymalizacje oparte na wynikach profilowania kodu (PGO — Profile-guided optimization), pozwalające na generowanie bardziej zoptymalizowanego kodu na podstawie analizy cech wykonania programu. Według oceny deweloperów wzrost wydajności podczas niektórych operacji wyniósł do 31%.
  • Przeprowadzono optymalizację wydajności narzędzi cp (+32,93%), join (2,5 razy szybszy niż GNU dzięki wyłączeniu zbędnych porównań lokalizacyjnych), od, ptx (+4%), nl, tail, expand, unexpand, numfmt i sort. Sytuacje, w których operacje wykonywane są znacznie wolniej niż w GNU Coreutils, zaczęły być traktowane jako błędy.
  • Usunięto pewne niezgodności z GNU Coreutils w zachowaniu narzędzi pr, numfmt, join, id, mkdir, fold, sort, stat, od i date.
  • Wprowadzone specyficzne dla GNU Coreutils opcje: „uname -A”, „uname —all-labeled”, „cut -F”, „cut —whitespace-delimited”, „pr —columns”, „pr —join-lines”, „pr -f”.
  • W użyteczności mv, cp, rm, chmod, stdbuf dokonano pracy nad zwiększeniem bezpieczeństwa w celu zapobiegania powstawaniu podatności związanych ze stanem wyścigu, pozwalających na zmianę danych w momencie po weryfikacji poprawności informacji, ale przed realizacją operacji na nich, na przykład podmieniając plik na dowiązanie symboliczne pomiędzy zakończeniem weryfikacji a rozpoczęciem realizacji operacji. W kontekście używania narzędzi cp, chmod i mv w skryptach systemowych uruchamianych z uprawnieniami root, podobne podatności mogą umożliwić skopiowanie lub nadpisanie dowolnych plików.
  • Przeprowadzono prace nad eliminacją awaryjnych zakończeń w narzędziach split, yes, sort, stat, csplit, ls, od, nl, pr, csplit, dd, touch, tail, tac, who.
  • Zrealizowano wersje narzędzi kill i uptime dla systemu Windows.
  • Zaprzestano używania pakietów byteorder, same-file, filetime, winapi-util, file_diff, mockstream, binary-heap-plus, compare, arrayref (niedawno został skompromitowany), exacl i dns-lookup na rzecz funkcji z bibliotek std, rustix i windows-sys.
  • W narzędziach ls i comm dodano wsparcie dla właściwości lokalnych „collation”, które pozwalają na porównania z uwzględnieniem znaczenia symboli (na przykład podczas porównywania, znak akcentu może być ignorowany).
  • Poprawiono obsługę wielobajtowych symboli w narzędziach nl i cut.

Dodatkowo warto wspomnieć o publikacji przez firmę Canonical dwóch eksperymentalnych obrazów kontenerów z zestawem do tworzenia programów w języku Rust, odpowiadających specyfikacji Dev Container. Pierwszy obraz zawiera Rust 1.93, Cargo, rust-analyzer, Clippy, Rustfmt, Miri (interpretator do identyfikacji niedookreślonego zachowania), cargo-auditable (audyt kompilacji), GCC, Clang, LLD, pkg-config, Just, Git, Vim, Helix, Ripgrep, Hyperfine, Bacon, xh i curl. Drugi obraz oprócz tego zawiera pakiety do rozwoju Ubuntu: git-buildpackage, sbuild, ubuntu-dev-tools, devscripts, dh-make, dh-cargo, autopkgtest, cargo-vendor-filterer.

Ź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