Выпуск uutils 0.11, варианта GNU Coreutils на языке Rust

Опубликован выпуск проекта uutils coreutils 0.11.0 (Rust Coreutils), развивающего аналог пакета 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 и частично в Ubuntu 26.04. Rust Coreutils также применяется в дистрибутивах AerynOS (Serpent OS) и Apertis (развивается компанией Collabora). В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL. Дополнительно той же командой разработчиков развиваются написанные на Rust аналоги наборов утилит util-linux, diffutils, findutils, procps и acl, а также программ sed и login.

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

  • Уровень совместимости с эталонным набором тестов GNU Coreutils составил 95.33% (было 94.44%). Успешно выполнено 653 теста, что на 8 больше, чем в прошлой версии (645). 22 теста завершились неудачей (было 29), а 15 тестов было пропущено (было 15).
  • Интегрирован новый движок для диагностики проблем, основанный на библиотеке ariadne и выводящий при запуске утилит в терминале наглядные отчёты об ошибках c пометкой аргументов командной строки, из-за которых возникла проблема. Визуализация ошибок задействована в утилитах chmod, mkdir, mkfifo, mknod, install, tr, expr, sort, numfmt, cut, env, head, tail, truncate, split, shred, stdbuf, od, seq, dd, stat, join, csplit, ls, df и du. Для отключения диагностических отчётов предложена переменная окружения UUTILS_DIAG.

  • При сборке релизов активированы оптимизации на основе результатов профилирования кода (PGO — Profile-guided optimization), позволяющие генерировать более оптимальный код на основе анализа особенностей выполнения программы. По оценке разработчиков прирост производительности при выполнении некоторых операций составил до 31%.
  • Проведена оптимизация производительности утилит cp (+32.93%), join (в 2.5 раза быстрее, чем GNU за счёт отключения лишних сравнений локали), od, ptx (+4%), nl, tail, expand, unexpand, numfmt и sort. Как ошибки стали рассматриваться ситуации с выполнением операций заметно медленнее чем в GNU Coreutils.
  • Устранены отдельные расхождения с GNU Coreutils в поведении утилит
    pr, numfmt, join, id, mkdir, fold, sort, stat, od и date.

  • Реализованы специфичные для GNU Coreutils опции: «uname -A», «uname —all-labeled», «cut -F», «cut —whitespace-delimited», «pr —columns», «pr —join-lines», «pr -f».
  • В утилитах mv, cp, rm, chmod, stdbuf проведена работа по усилению безопасности для предотвращения появления уязвимостей, вызванных состоянием гонки, позволяющим изменить данные в момент после проверки корректности информации, но до выполнения операции с ними, например, подменить файл на символическую ссылку в момент между завершением проверки и началом выполнения операции. В контексте использования утилит cp, chmod и mv в системных скриптах, запускаемых с правами root, подобные уязвимости позволяют скопировать или перезаписать произвольные файлы.
  • Проведена работа по устранению аварийных завершений в утилитах split, yes, sort, stat, csplit, ls, od, nl, pr, csplit, dd, touch, tail, tac, who.
  • Реализованы варианты утилит kill и uptime для Windows.
  • Прекращено использование пакетов byteorder, same-file, filetime, winapi-util, file_diff, mockstream, binary-heap-plus, compare, arrayref (недавно был скомпрометирован), exacl и dns-lookup в пользу функций из библиотек std, rustix и windows-sys.
  • В утилиты ls и comm добавлена поддержка свойств локали «collation», позволяющих выполнять сопоставления с учётом смысла символов (например, при сравнении может не приниматься во внимание знак ударения).
  • Улучшена работа с многобайтовыми символами в утилитах nl и cut.
  • Источник: http://www.opennet.ru/opennews/art.shtml?num=66185