|
Опубликован выпуск проекта 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.
|