#  Выпуск Rust Coreutils 0.4. Расхождение поведения утилиты du в uutils и GNU Coreutils
robot (spnet, 1) → All  –  19:44:04 2025-11-15

Rust Coreutils задействован по умолчанию в выпуске Ubuntu 25.10 и применяется в дистрибутивах AerynOS (Serpent OS) и Apertis (развивается компанией Collabora). В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной [ лицензией MIT ]( https://mit-license.org ) , вместо [ копилефт-лицензии GPL ]( https://www.gnu.org/licenses/gpl-3.0.html ) . Дополнительно той же командой разработчиков развиваются написанные на Rust аналоги наборов утилит [ util-linux ]( https://github.com/uutils/util-linux ) , [ diffutils ]( https://github.com/uutils/diffutils ) , [ findutils ]( https://github.com/uutils/findutils ) и [ procps ]( https://github.com/uutils/procps ) , а также программ [ sed ]( https://github.com/uutils/sed ) и [ login ]( https://github.com/uutils/login ) .

В новой версии Rust Coreutils:



Улучшена совместимость с эталонным тестовым набором GNU Coreutils, при прохождении которого успешно выполнено 544 теста, что на 12 больше, чем в прошлой версии (532). 56 (68) тестов завершилось неудачей, а 33 (33) теста было пропущено. Заявлен уровень совместимости 85.80% (было 83.91%).



В утилите date [ улучшена ]( https://github.com/uutils/coreutils/pull/8944 ) совместимость с GNU date при обработке часовых поясов (добавлена возможность указания сокращённых наименований часовых поясов в опции –set).

*В утилите factor задействован пакет num_prime для ускорения факторизации типов u64/u128.

*В утилите tsort реализация алгоритма обхода DFS [ переведена ]( https://github.com/uutils/coreutils/pull/8737 ) с рекурсивного на итеративный метод работы для предотвращения переполнения стека.



В утилите cksum реализована поддержка хэшей sha2 и sha3. Добавлены тесты для отслеживания изменения производительности cksum. Функциональность hashsum перенесена в cksum.



В утилите mkdir [ устранено ]( https://github.com/uutils/coreutils/pull/8947 ) переполнение стека, приводящее к аварийному завершению при создании большого (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.

Стоит отметить [ расхождение ]( https://askubuntu.com/questions/1559396/the-new-du-command-in-lib-cargo-bin-coreutils-outputs-wrong-sizes-in-ubun ) в поведении утилиты du из наборов uutils и GNU Coreutils, всплывшее после перехода Ubuntu 25.10 на uutils. Разработчики ещё [ не решили ]( https://github.com/uutils/coreutils/issues/9202 ) трактовать ли данное расхождение как ошибку, так как с одной стороны в поведении 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

https://www.linux.org.ru/news/opensource/18143451
Powered by iii-php v0.11