04.07.2022

Обновление варианта GNU Coreutils, переписанного на языке Rust

Представлен выпуск инструментария uutils coreutils 0.0.12, в рамках которого развивается аналог пакета GNU Coreutils, переписанный на языке Rust. В состав coreutils входит более ста утилит, включая sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls. Одновременно выпущен пакет uutils findutils 0.3.0 с реализацией на языке Rust утилит из набора GNU Findutils (find, locate, updatedb и xargs).

В качестве причины создания проекта и использования языка Rust называется желание создать кросс-платформенную альтернативную реализацию Coreutils и Findutils, способную работать в том числе на платформах Windows, Redox и Fuchsia. Ещё одним важным отличием uutils является распространение под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL.

В настоящее время полностью доведена до паритета с GNU Coreutils реализация 88 утилит. Отдельные недоработки отмечаются в 18 утилитах, включая cp, dd, date, df, install, ls, more, sort, split, tail и test. Нереализованной остаётся только утилита stty. При прохождении тестового набора от проекта GNU Coreutils успешно выполняются 214 тестов, но 313 тестов аналог на Rust пока не проходит. При этом интенсивность разработки проекта заметно увеличилась — в месяц добавляется 400-470 патчей от 20-50 разработчиков вместо 30-60 от 3-8 разработчиков год назад.

Из последних достижений отмечается оптимизация производительности — в текущем состоянии многие утилиты, такие как head и cut, значительно превосходят по производительности варианты из GNU Coreutils. Охват тестовым набором расширен с 55% до 75% от всего кода (достаточной целью является 80%). Проведён рефакторинг кода для упрощения сопровождения, например, унифицирована обработка ошибок в разных программах, а в chgrp и chown объединён код для работы с правами доступа. Добавлены многочисленные изменения для улучшения совместимости с GNU Coreutils.

Из планов на будущее отмечается реализация утилиты stty, продолжение работы по улучшению совместимости с GNU Coreutils, добавление оптимизаций для уменьшения размера исполняемых файлов, а также продолжение экспериментов по использованию в Debian и Ubuntu утилит uutils вместо GNU Coreutils и GNU Findutils (один из основных разработчиков uutils coreutils ранее занимался проектом по обеспечению сборки Debian GNU/Linux с использованием компилятора Clang). Дополнительно отмечается подготовка пакета uutils-coreutils для macOS, эксперименты с заменой GNU Coreutils на uutils coreutils в NixOS, намерение использовать uutils coreutils по умолчанию в дистрибутиве Apertis и адаптация набора для Redox OS.

Источник.