Публикуван е изходният проект uutils coreutils 0.4.0 (Rust Coreutils), който развива аналог на пакета GNU Coreutils, написан на езика Rust. Включваща над сто утилити, coreutils предлага comsort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls. Целта на проекта е да създаде кросплатформена алтернативна имплементация на Coreutils, способна да работи на платформи Windows, Redox и Fuchsia.
Rust Coreutils се използва по подразбиране в изданието на Ubuntu 25.10 и се прилага в дистрибуции AerynOS (Serpent OS) и Apertis (развиван от компанията Collabora). За разлика от GNU Coreutils, реализацията на Rust се разпространява под разрешителната лицензия MIT, вместо копилефт лиценза GPL. Допълнително, същият екип разработва аналози на наборите от утилити util-linux, diffutils, findutils и procps, както и програмите sed и login.
В новата версия на Rust Coreutils:
- Подобрена е съвместимостта с референтния тестов набор GNU Coreutils, при преминаването на който успешно са изпълнени 544 теста, с 12 повече отколкото в предишната версия (532). 56 (68) теста се провалиха, а 33 (33) теста бяха пропуснати. Деклариран е ниво на съвместимост от 85.80% (беше 83.91%).
- В утилитата data е подобрена съвместимостта с GNU date при обработка на часови зони (добавена е възможност за указываване на съкратени наименования на часови зони в опцията —set).
- В утилитата factor е използван пакет num_prime за ускоряване на факторизацията на типовете u64/u128.
- В утилитата tsort е реализиран алгоритъм на обхода DFS, който е трансформиран от рекурсивен на итеративен метод, за да се предотврати препълване на стека.
- В утилитата cksum е реализирана поддръжка за хешовете sha2 и sha3. Добавени са тестове за наблюдение на промените в производителността на cksum. Функционалността hashsum е прехвърлена в cksum.
- В утилитата mkdir е отстранено препълването на стека, което водеше до извънредно приключване при създаване на голям брой (над 200) вложени директории.
- Утилитите stdbuf и uptime вече поддържат платформата OpenBSD.
- Подобрен е процесът на сглобяване и тестване на платформата FreeBSD.
- Направени са общи подобрения за увеличаване на преносимостта.
- Разширени са възможностите, отстранени са проблеми и добавени липсващи опции за утилитите base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc.
Допълнително, можем да отбележим разликата във функционирането на утилитата „du“ между наборите uutils и GNU Coreutils, появила се след прехода на Ubuntu 25.10 към uutils. Разработчиците все още не са решили как да трактоват това несъответствие, тъй като от една страна в поведението на uutils има логика и тестовият набор GNU Coreutils не открива проблеми, но от друга страна несъвместимостите с GNU Coreutils трябва да се третират като грешки и поведението на Busybox съвпада с GNU Coreutils.
Различно поведение се наблюдава, когато в аргументите на утилитата „du“ се посочват няколко директории, а някои от тях са поддиректории на други директории (например, /var и /var/log). Uutils показва действителния размер на всяка директория поотделно, докато в итоговия ред извежда общия размер на всички посочени директории. GNU Coreutils показва в итоговия ред реалния размер, който тези директории заемат на диска, но в отделния списък показва размерите на всяка директория без вложените директории, поради което техният размер изглежда по-малък от действителния. Освен това, стойностите, извеждани от GNU Coreutils и Busybox, се променят в зависимост от реда на посочване на директориите.
Например, при проверка на размерите на директориите „/var/log“ и „/var“, реалните им размери са 1540 и 35495 байта. В GNU Coreutils ще бъде изведено: du -smc /var/log /var 1540 /var/log 33955 /var # по-малко от действителното 35495 total du -smc /var /var/log 35495 /var # показан е само /var и не е показан /var/log 35495 total
В uutils: du -smc /var/log /var 1540 /var/log 35495 /var 37033 total # повече от действителното, но отговаря на сумата на /var и /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37033 total # повече от действителното, но отговаря на сумата на /var и /var/log
В Busybox: du -smc /var/log /var 1540 /var/log 33955 /var # по-малко от действителното 35495 total du -smc /var /var/log 35495 /var # показан е само /var и не е показан /var/log 35495 total
Източник: opennet.ru
