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%).
- В утилите 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 предписано обрабатывать как ошибки и поведение утилиты du из Busybox соответствует поведению GNU Coreutils.
Разное поведение наблюдается при указании в числе аргументов утилиты «du» нескольких каталогов в ситуации, когда некоторые из каталогов являются подкаталогами других каталогов (например, /var и /var/log). В итоговой строке uutils выводит суммарный размер всех указанных каталогов и показывает фактический размер каждого отдельного каталога. В итоговой строке GNU Coreutils показывается фактический размер, который указанные каталоги занимают на диске, но в списке показываются размеры каждого каталога без с вычетом вложенных каталогов, из-за чего их размер получается меньше фактического. Кроме того, значения, выводимые в GNU Coreutils и Busybox, меняются в зависимости от порядка указания каталогов.
Например, при проверке размера каталогов «/var/log» и «/var», фактический размер которых 1540 и 35494 байт, в GNU Coreutils будет выведено:
du -smc /var/log /var 1540 /var/log 33954 /var # меньше фактического 35494 total du -smc /var /var/log 35494 /var # показан только /var и не показан /var/log 35494 total
В uutils:
du -smc /var/log /var 1540 /var/log 35494 /var 37033 total # больше фактического du -smc /var /var/log 35494 /var 1540 /var/log 37033 total # больше фактического
В Busybox:
du -smc /var/log /var 1540 /var/log 33954 /var # меньше фактического 35494 total du -smc /var /var/log 35494 /var # показан только /var и не показан /var/log 35494 total
Источник: http://www.opennet.ru/opennews/art.shtml?num=64214
