Выпуск 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.

    CFD0C5CECEC5D4_1788243698.png

  • При сборке релизов активированы оптимизации на основе результатов профилирования кода (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

© OpenNet