Выпуск Rust Coreutils 0.12.0

17 сентября 2026 года состоялся релиз открытого проекта Rust Coreutils 0.12.0 (uutils), развивающего аналог пакета GNU Coreutils, написанный на языке Rust. В состав coreutils входит более сотни утилит, включая wc, ls, tail, se, sort, cat, chmod, chown, chroot, cp, date, dd, du, install, echo, hostname, id, ln, ls и многие другие.

Целью проекта Rust Coreutils является создание кроссплатформенной альтернативной реализации Coreutils, способной работать в том числе на платформах Windows, Redox и Fuchsia.

Решение Rust Coreutils используется по умолчанию в дистрибутиве Ubuntu, начиная с выпуска 25.10. Также Rust Coreutils применяется в дистрибутивах AerynOS (Serpent OS) и Apertis (развивается компанией Collabora).

В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL. Дополнительно команда разработчиков Rust Coreutils развивает написанные на Rust аналоги наборов утилит util-linux, diffutils, findutils, procps и acl, а также программ sed и login.

В версии Rust Coreutils 0.12.0 уровень совместимости с эталонным набором тестов GNU Coreutils составил 94.36% (было 95.33%). Успешно выполнено 653 теста. 21 тест завершился неудачей (было 22), а 18 тестов было пропущено (было 10).

Основные доработки и улучшения в Rust Coreutils 0.11.0 включают в себя «значительное» повышение производительности основных утилит, расширенную поддержку WebAssembly и использования интерфейса WebAssembly System Interface (WASI), усиление защиты от паник в крайних случаях и онлайн-площадку для демонстрации тестирования Rust Coreutils в веб-браузере с интерактивным терминалом, в котором можно запускать утилиты uutils. В новой версии Rust Coreutils также удалили больше небезопасного кода из различных основных утилит.

Основные изменения и дополнения в версии Rust Coreutils 0.12.0:

  • устранены проблемы, исправление которых в первую очередь запрашивала команда Ubuntu:

    • потеря данных при параллельной установке с флагом ‑D;

    • работа команды du на 32-битных архитектурах;

    • разыменование ACL в команде ls;

    • конфликты имен при выполнении cp ‑R;

    • обработка символических ссылок командой chmod ‑R;

    • целый ряд опций теперь поддерживает значения, начинающиеся с дефиса (по аналогии с реализацией GNU): csplit —suffix-format, paste -d, join -t, stat —format/—printf/-c, а также все опции утилиты numfmt;

    • команда rm больше не вызывает ошибку сегментации при обработке очень глубоко вложенных каталогов;

    • sort -n применяется к ключу сортировки, а не ко всей строке; строки, не поддающиеся числовой сортировке, выводятся в исходном виде (а не преобразуются в числа); временные файлы входных данных больше не удерживаются открытыми на протяжении всего процесса сортировки;

    • исправлена ​​обработка завершающих разделителей в basename для компонентов, начинающихся с точки;

    • добавлены опции fmt -x/-X; printf теперь воспринимает — после строки формата как обычный аргумент;

    • test отвергает опции ‑a/‑o, если они завершают выражение;

    • echo ‑e больше не интерпретирует последовательности u, U и » ls:

    • исправлена ​​работа в режиме dired;

    • при совпадении временных меток сортировка теперь дополнительно выполняется по имени;

    • сортировка по имени работает и при использовании опций ‑u/‑c в длинном формате вывода;

    • маркеры возможностей (capabilities) теперь учитывают настройки разыменования ссылок;

    • dir и vdir используют стандартный для GNU стиль экранирования имен

    • сообщения об ошибках и коды завершения команд uniq, chgrp, factor, date, expr, od, tty, tsort и pathchk приведены в соответствие с реализацией GNU

    • в truncate наконец реализована поддержка ‑io‑blocks, а date теперь принимает несколько опций ‑reference.

  • повышение безопасности:

    • ls: ошибки stat() при обработке элементов каталога теперь сообщаются явно, а не скрываются (ранее могли отображаться неверные метаданные)

    • sort: временные файлы создаются с правами доступа 0600 (игнорируя umask); выходной файл (при использовании ‑o) также создаётся с ограниченным доступом; теперь сообщается об ошибках усечения выходного файла

    • install: целевой файл (при указании дескриптора) создаётся в монопольном режиме с правами доступа 0600

    • rm, chmod, chown, chgrp: опция ‑preserve‑root сравнивает пары (st_dev, st_ino), а не пути к файлам

    • chcon обходит каталоги с использованием DirFd вместо fts

    • в файле SECURITY.md теперь указано, что для признания проблемы уязвимостью требуется выход за границы допустимого доступа (boundary crossing), а не просто расхождение в поведении с реализацией GNU

  • улучшение производительности:

    • добавлены тесты производительности для операций переполнения кэша, проверки и использования разделяемых префиксов; тесты du теперь предварительно прогревают кэш страниц ОС перед измерением времени выполнения;

    • cp избегает разрешения текущего рабочего каталога для абсолютных рекурсивных копий; tsort предоставляет ОС подсказку о последовательном доступе;

    • значительный разрыв в производительности с GNU теперь указан в файле README как ошибка, и в команде проекта его рассматривают как таковой.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев