The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск Rust Coreutils 0.6.0, повысивший совместимость с GNU Coreutils с 87% до 96%

03.02.2026 09:37 (MSK)

Опубликован выпуск проекта uutils coreutils 0.6.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 и применяется в дистрибутивах AerynOS (Serpent OS) и Apertis (развивается компанией Collabora). В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL. Дополнительно той же командой разработчиков развиваются написанные на Rust аналоги наборов утилит util-linux, diffutils, findutils, procps и acl, а также программ sed и login.

В новой версии Rust Coreutils:

  • Достигнут уровень совместимости с эталонным тестовым набором GNU Coreutils - 96.28% (было 87.75%). Успешно выполнено 622 тестов, что на 56 больше, чем в прошлой версии (566). 16 (было 55) тестов завершилось неудачей, а 7 (было 23) тестов было пропущено. Наиболее значительное повышение совместимости отмечено для утилит sort, ls, date, cksum и tail.
  • Из date, sort, locale.rs и других утилит удалён код, в котором использовалось ключевое слово "unsafe".
  • Обращения к стандартной библиотеке libc заменены на эквивалентные защищённые вызовы, предоставляемые пакетом nix.
  • Улучшена обработка ошибок, исключены аварийные завершения при записи в /dev/full.
  • В утилите date реализована локализация названий месяцев и дней, учитывающая ICU. Обеспечено форматирование часов и календаря с учётом локали.
  • В утилите sort обеспечена сортировка чисел c разделителями тысяч и реализована обработка параметров +POS/-POS.
  • В утилиту join добавлена поддержка свойств локали "collation", позволяющих выполнять сопоставления с учётом смысла символов (например, при сравнении может не приниматься во внимание знак ударения).
  • Проведена оптимизация производительности утилит base32, base64, basenc и df.
  • В утилите uniq снижено потребление памяти при работе без учёта регистра.
  • В утилите shuf оптимизирован числовой вывод и добавлена опция "--random-seed".
  • В tsort исключена загрузка всех входных данных в память.
  • В утилиту tail добавлен флаг "--debug".
  • В утилите chmod решены проблемы с рекурсивным выполнением операций и добавлена опция "--preserve-root".
  • На Unix-подобных системах усилена безопасность при обходе содержимого каталогов.
  • В утилиты ls, id, mkdir, mkfifo и mknod добавлена поддержка механизма мандатного контроля доступа SMACK.
  • В систему непрерывной интеграции добавлена проверка сборки на 64-разрядных системах RISC-V с библиотекой musl.
  • Улучшена работа в Windows c использованием Cygwin.
  • Расширены возможности, устранены проблемы и добавлены недостающие опции для утилит arch, base64, basename, cat, chgrp, chmod, chroot, cksum, comm, cp, csplit, date, dd, df, dir, dirname, du, echo, env, expand, expr, fmt, fold, groups, hashsum, head, hostid, id, install, join, kill, ln, logname, ls, mkdir, mkfifo, mknod, mktemp, more, mv, nice, nl, nohup, nproc, numfmt, pr, printenv, printf, ptx, readlink, rm, rmdir, runcon, seq, shred, shuf, sort, split, stat, stdbuf, stty, sync, tac, tail, tee, test, timeout, touch, truncate, tsort, uname, unexpand, uniq, uptime, users, wc, yes, ucore, uucore, uudoc.


  1. Главная ссылка к новости (https://github.com/uutils/core...)
  2. OpenNews: Выпуск uutils 0.5, варианта GNU Coreutils на языке Rust
  3. OpenNews: Из-за ошибки в uutils в Ubuntu 25.10 перестала работать автоматическая проверка наличия обновлений
  4. OpenNews: Уязвимость в GNU sort, приводящая к выходу за границу буфера
  5. OpenNews: В Ubuntu 25.10 решено заменить GNU Coreutils на uutils, написанные на Rust
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64730-coreutils
Ключевые слова: coreutils, rust, uutils
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (13) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, mos (??), 10:01, 03/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Выглядит как мусор.
     
     
  • 2.7, _hide_ (ok), 10:25, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Особенно размеры файлов и производительность утилит отлично говорит, что нужно все переписать на Раст...
     

  • 1.2, Аноним (2), 10:02, 03/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    >Проведена оптимизация производительности утилит base32, base64, basenc и df.

    Посмотрел код. Хочешь оптимизаций добавляй unsafe. Чудес не бывает.

     
     
  • 2.4, Аноним (4), 10:10, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не обязательно. Много где SWAR хватает.
    Там много вот такого

    /// 'geteuid()' returns the effective user ID of the calling process.
    pub fn geteuid() -> uid_t {
        unsafe { libc::geteuid() }
    }

    Оно и понятно, зачем: на границе libc многие коноплятора заканчиваются.

     
     
  • 3.6, Аноним (4), 10:20, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Самофикс: без libc можно обойтись раскладкой аргументом по регистрах и вызовом syscall в asm!-блоке. Закат солнца вручную, да, но оно везде так.
     
     
  • 4.14, Аноним (-), 11:01, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > раскладкой аргументом по регистрах и вызовом syscall в asm!-блоке
    > в asm!-блоке

    Который точно также будет unsafe и ты поменяешь шило на мыло.
    Какой смысл?

     
  • 3.9, Аноним (9), 10:36, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вы специально так криво форматируете?
     
     
  • 4.10, Аноним (4), 10:52, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Я случайно форматирование.
     
  • 2.11, Аноним (11), 10:57, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Хочешь оптимизаций добавляй unsafe. Чудес не бывает

    unsafe никак не связан с оптимизациями. Он лишь отключает запрет на доступ к нескольким небезопасным возможностям (типа разыменовантя сырых указателей) во время компиляции.

     
  • 2.13, Аноним (11), 11:01, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >>Проведена оптимизация производительности утилит base32, base64, basenc и df.
    > Посмотрел код. Хочешь оптимизаций добавляй unsafe

    Ты куда-то не туда смотрел. 😄 Вот pull request этой оптимизации, и unsafe в коде даже не упоминается:

    https://github.com/uutils/coreutils/pull/9632/changes

     

  • 1.3, Аноним (4), 10:05, 03/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С такой скоростью разработки к поздней весне достигнут полного паритета по проходжению тестового набора.
     
     
  • 2.5, ebassi (?), 10:18, 03/02/2026 [^] [^^] [^^^] [ответить]  
  • +/
    К тому времени Убунта 26.04 появится
     

  • 1.8, Маяковский (?), 10:34, 03/02/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    где C++, там каждый байт — граната.
    где Rust, там каждая строка — петля.
    Один рванёт — и нету результата.
    Другой удавит, подло, втихаря.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру