Выпуск Rust Coreutils 0.4. Расхождение поведения утилиты du в uutils и GNU Coreutils

Wait 5 sec.

Опубликован выпуск проекта uutils coreutils (Rust Coreutils) версии 0.4.0, развивающего аналог пакета GNU Coreutils, написанный на языке Rust. В состав coreutils входит более ста утилит, включая sort, 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. Дополнительно той же командой разработчиков развиваются написанные на Rust аналоги наборов утилит util-linux, diffutils, findutils и procps, а также программ sed и login.В новой версии Rust Coreutils:Улучшена совместимость с эталонным тестовым набором GNU Coreutils, при прохождении которого успешно выполнено 544 теста, что на 12 больше, чем в прошлой версии (532). 56 (68) тестов завершилось неудачей, а 33 (33) теста было пропущено. Заявлен уровень совместимости 85.80% (было 83.91%).В утилите date улучшена совместимость с 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 37034 total # больше фактического, но соответствует сумме /var и /var/log du -smc /var /var/log 35495 /var 1540 /var/log 37034 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  coreutils, gnu, rust, ubuntu, uutils