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

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

Дополнительно можно отметить публикацию компанией Canonical двух экспериментальных образов контейнеров с начинкой для разработки программ на языке Rust, соответствующих спецификации Dev Container.

Первый образ включает Rust 1.93, Cargo, rust-analyzer, Clippy, Rustfmt, Miri (интерпретаор для выявления неопределённого поведения), cargo-auditable (аудит сборок),
GCC, Clang, LLD, pkg-config, Just, Git, Vim, Helix, Ripgrep, Hyperfine, Bacon, xh и curl. Второй образ помимо этого содержит пакеты для разработки Ubuntu: git-buildpackage, sbuild, ubuntu-dev-tools, devscripts, dh-make, dh-cargo, autopkgtest, cargo-vendor-filterer.

Источник