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 предписано обрабатывать как ошибки и поведение 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.opennet.ru/opennews/art.shtml?num=64214
(opennet.ru, основная лента)