uutils Coreutils 0.10 на Rust достигли совместимости с GNU на уровне 93,5%
Проект uutils Coreutils, создающий современные системные утилиты на языке Rust, выпустил версию 0.10. Разработчики продолжают двигаться к главной цели - создать полноценную замену GNU Coreutils, которую можно будет использовать в Linux-системах без заметных различий в поведении команд.
Согласно результатам тестирования, новая версия успешно проходит 645 из 690 проверок GNU. Это соответствует показателю совместимости 93,48%. Для сравнения, в релизе 0.9 результат составлял 90,58%: количество неудачных тестов сократилось с 56 до 29. Подробный разбор изменений доступен в материале о [совместимости uutils Coreutils с GNU](https://linuxiac.com/rust-based-uutils-coreutils-0-10-reaches-93-5-gnu-compatibility/).
В uutils Coreutils 0.10 существенно переработано поведение распространённых команд date, du, head, tail, install, ls, nproc, numfmt, od, pr, stat, sum и truncate. Улучшилась и диагностика ошибок: сообщения теперь чаще содержат имя файла, с которым возникла проблема, а также оригинальное описание ошибки операционной системы. Это делает поиск неисправностей заметно удобнее, особенно в скриптах и автоматизированных системах.
Отдельное внимание уделено устранению уязвимостей класса TOCTOU - ситуаций, когда файл проверяется в один момент, а используется уже после потенциального изменения. Исправления затронули touch, mkfifo, head, split и chcon. Рекурсивные операции chmod и chown стали устойчивее к циклам символических ссылок и попыткам обойти защиту, связанную с параметром --preserve-root.
Команда cp теперь не переходит в каталог назначения, если он представлен символической ссылкой. Утилита mv получила дополнительные проверки при перемещении данных между файловыми системами и создании резервных копий. Кроме того, SELinux-метки для объектов, создаваемых mkdir, mkfifo и mknod, назначаются непосредственно во время создания файловой системы, а не отдельной последующей операцией.
Разработчики устранили проблемы с записью в специальные устройства вроде /dev/full, переполнением целых чисел при передаче экстремальных аргументов, некорректной обработкой границ многобайтных символов и чрезмерным выделением памяти. Парсер expr переведён на итеративную модель, что снижает риск переполнения стека при обработке глубоко вложенных выражений.
В релизе появились и новые возможности. Параметр mv --exchange позволяет атомарно поменять местами два пути в файловой системе. Команда install получила опцию --reflink для создания copy-on-write-клонов на совместимых файловых системах. Её можно использовать вместе с install -C и параметром --preserve-timestamps, сохраняя исходные временные метки файлов.
Команда rm теперь поддерживает --one-file-system. При рекурсивном удалении этот параметр не позволяет переходить на другие файловые системы, что особенно важно при работе с каталогами, содержащими точки монтирования. Для cut добавлен короткий вариант -O, эквивалентный --output-delimiter. Утилиты проверки контрольных сумм также могут использовать бэкенд OpenSSL, обеспечивая более высокую скорость обработки.
Оптимизация производительности затронула сразу несколько популярных инструментов. tee получил быстрый режим копирования без лишних операций с памятью, cat стал эффективнее работать с большими потоками данных, а cp ускорил обычное копирование, когда механизм reflink недоступен. Улучшенный путь передачи данных применяется и при копировании между разными устройствами.
Для пользователей, которые хотят попробовать Rust coreutils для Linux, проект уже представляет практический интерес, однако полная замена GNU Coreutils пока требует осторожности. Перед внедрением в системные сценарии стоит проверить используемые команды, параметры и особенности обработки ошибок.
Расширяется и поддержка других платформ. Версия 0.10 добавила цель wasm32-wasip2. В Windows исправлена работа timeout, а tail -f и tail -F получили функциональность слежения за изменениями файлов. Кроме того, cp теперь умеет работать с разреженными копиями в Windows, а также исправлена проблема с контрольными суммами, связанная с преобразованием окончаний строк CRLF.
Для администраторов, желающих провести uutils coreutils сравнение с GNU Coreutils, наиболее важным показателем остаётся не только общий процент тестов, но и конкретный набор используемых команд. Проект постепенно закрывает несовместимости, однако отдельные параметры и редкие сценарии всё ещё могут вести себя иначе. Поэтому переход лучше начинать с тестовой среды и постепенно расширять область применения.
Установка пакета также зависит от дистрибутива и способа распространения. Запрос "uutils coreutils скачать" обычно приводит к исходному коду, готовым бинарным сборкам или пакетам сторонних репозиториев. Перед загрузкой важно убедиться, что выбранная версия соответствует архитектуре системы и поддерживает необходимые функции.
На практике uutils coreutils установка Linux может выполняться через сборку Cargo, пакетный менеджер дистрибутива либо готовые релизные бинарники. Сборка из исходников даёт больше контроля над параметрами и целевой платформой, тогда как готовый пакет позволяет быстрее проверить совместимость. Для критически важных серверов рекомендуется сохранять GNU Coreutils как резервный вариант до завершения тестирования.
Главное преимущество проекта связано не только с безопасностью Rust, но и с более строгим подходом к обработке ошибок, управлению памятью и файловыми операциями. При этом разработчикам ещё предстоит довести до конца поддержку редких ключей, экзотических форматов и исторических особенностей поведения GNU-утилит. Версия 0.10 показывает заметный прогресс, но путь к полностью прозрачной замене ещё продолжается.


