LINUX.ORG.RU

Выпуск Rust Coreutils 0.4. Расхождение поведения утилиты du в uutils и GNU Coreutils

 , , , ,


0

3

Опубликован выпуск проекта uutils coreutils (Rust Coreutils) версии 0.4.0, развивающего аналог пакета 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, а также программ sed и login.

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

  • Улучшена совместимость с эталонным тестовым набором GNU Coreutils, при прохождении которого успешно выполнено 544 теста, что на 12 больше, чем в прошлой версии (532). 56 (68) тестов завершилось неудачей, а 33 (33) теста было пропущено. Заявлен уровень совместимости 85.80% (было 83.91%).

  • В утилите date улучшена совместимость с GNU date при обработке часовых поясов (добавлена возможность указания сокращённых наименований часовых поясов в опции –set).

*В утилите factor задействован пакет num_prime для ускорения факторизации типов u64/u128.

*В утилите tsort реализация алгоритма обхода DFS переведена с рекурсивного на итеративный метод работы для предотвращения переполнения стека.

  • В утилите cksum реализована поддержка хэшей sha2 и sha3. Добавлены тесты для отслеживания изменения производительности cksum. Функциональность hashsum перенесена в cksum.

  • В утилите mkdir устранено переполнение стека, приводящее к аварийному завершению при создании большого (200+) числа вложенных каталогов.

  • В утилитах stdbuf и uptime реализована поддержка платформы OpenBSD.

  • Улучшена сборка и тестирование на платформе FreeBSD.

  • Внесены общие улучшения для повышения переносимости. Расширены возможности, устранены проблемы и добавлены недостающие опции для утилит base64, cat, chown, chsum, date, dd, du, factor, hashsum, install, ls, mkdir, od, printenv, printf, readlink, stdbuf, timeout, truncate, tsort, uptime, uudoc.

Стоит отметить расхождение в поведении утилиты du из наборов uutils и GNU Coreutils, всплывшее после перехода Ubuntu 25.10 на uutils. Разработчики ещё не решили трактовать ли данное расхождение как ошибку, так как с одной стороны в поведении uutils есть логика и тестовый набор GNU Coreutils не выявляет проблем, но с другой стороны несовместимости с GNU Coreutils предписано обрабатывать как ошибки и поведение Busybox соответствует GNU Coreutils.

Разное поведение наблюдается при указании в числе аргументов утилиты du нескольких каталогов в ситуации, когда некоторые из каталогов являются подкаталогами других каталогов (например, /var и /var/log). Uutils показывает фактический размер каждого отдельного каталога, а в итоговой строке выводит суммарный размер всех указанных каталогов. GNU Coreutils показывает в итоговой строке фактический размер, который указанные каталоги занимают на диске, но в раздельном списке показывает размеры каждого каталога с вычетом вложенных каталогов, из-за чего их размер получается меньше фактического. Кроме того, значения, выводимые в GNU Coreutils и Busybox, меняются в зависимости от порядка указания каталогов.

Например, при проверке размера каталогов /var/log и /var, фактический размер которых 1540 и 35495 блоков (МБ).

В GNU Coreutils будет выведено:

du -smc /var/log /var
   1540    /var/log
   33955   /var # меньше фактического
   35495   total

   du -smc /var /var/log 
   35495   /var # показан только /var и не показан /var/log
   35495   total

В uutils:

du -smc /var/log /var
   1540    /var/log
   35495   /var
   37034   total # больше фактического, но соответствует сумме /var и /var/log

   du -smc /var /var/log
   35495   /var  
   1540    /var/log
   37034   total # больше фактического, но соответствует сумме /var и /var/log

В Busybox:

du -smc /var/log /var
   1540    /var/log
   33955   /var # меньше фактического
   35495   total

   du  -smc /var /var/log
   35495   /var # показан только /var и не показан /var/log
   35495   total

>>> Подробности на opennet



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Sure it corrupts your files, but look how fast it is!

beastie ★★★★★
()

Про недавний обосрамс в sudo-rs ещё напиши, пожалуйста, статейку на радость ржавофилам 🤭

aol ★★★★★
()

Я не понимаю, как можно складывать размеры вложенных каталогов, какие пориджи это писали? 🤦🏻‍♂️

beck ★★★★
()
Ответ на: комментарий от beck

какие пориджи это писали

Какой язык, такие и разрабы.

Smacker ★★★★★
()
Ответ на: комментарий от thunar

раст-фембоев

Психические заболевания не ходят поодиночке, их там ожидаемо целый букет. Вопрос в том, кто допустил поциентов кащенки до разработки.

Smacker ★★★★★
()
Ответ на: комментарий от Smacker

кто допустил поциентов кащенки до разработки.

А им кто-то когда-то запрещал? Или там вообще компы(ноуты) запрещены? А то представь - открывает пациент IDE, сразу прибегают санитары и объясняют что так нельзя. Выглядит сомнительно.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

А то представь - открывает пациент IDE, сразу прибегают санитары и объясняют что так нельзя. Выглядит сомнительно.

По-моему выглядит, как боженька смолвил.

Smacker ★★★★★
()

Хорошо хоть предупредили, а то если бы пост-фактум такое вскрылось, представляю, как у людей сгорали бы жопы. Ладно, тут в примере расхождение взято нелольшое, а если бы разница была в пару тибибайт? :)

yars068 ★★★★★
()

А добавить флаг для нестандартного вывода им религия не позволила?

LexS007
()

В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL.

Вот это совсем плохо, несовместимость в du можно исправить или игнорировать, а вот это - нет.

sena ★★★
()
Ответ на: комментарий от beck

В OpenBSD такое же поведение. Это довольно логично, когда между двумя вызовами du с разными аргументами, одному и тому же каталогу соответствует один и тот же размер.

buddhist ★★★★★
()
Ответ на: комментарий от sena

Так ради этого весь концерт и затевался. Чтобы компании, что суют линукс в прошивки/эмбедщину/военщину могли патчить не открывая исходники

PPP328 ★★★★★
()

почему названия утилит не канонiчные для раста? они же любят везде добавить rust. rustsort ddrust rustcat cprust daterust echorust idrust.

idrust и echorust я бы даже и вне линукса использовал. в этот раз схалтурили, эхорасты.

usi_svobodi
()
Ответ на: комментарий от PPP328

На самом деле это просто мощная PR-компания BSD систем :)

zx_gamer ★★★
()

а мне кажется, что процесс запущен и переход на раст неизбежен, как бы ретрограды не плевались. Походу надо учиться на расте говнокодить, а сишеку на легаси помойку истории.

SpaceRanger ★★★
()
Ответ на: комментарий от yars068

Хорошо хоть предупредили, а то если бы пост-фактум такое вскрылось, представляю, как у людей сгорали бы жопы. Ладно, тут в примере расхождение взято нелольшое, а если бы разница была в пару тибибайт? :)

Btrfs это использовать не мешает.

MoldAndLimeHoney ★★
()
Ответ на: комментарий от usi_svobodi

Сразу видно, растом ты не пользуешься и видел его только от хейтеров в срачиках. Обычно добавляется не раст, а рс: https://github.com/nkaush/dd-rs

Во-первых, это даже стильно - сразу видно, что утилита написана на нормальном языке, а не на с++, например.

А вообще новсть даже радует, а то почти сутки не было тем о раст, я даже переживать начал.

LightDiver ★★★★★
()
Ответ на: комментарий от SpaceRanger

Да, но при этом на раст кажись нет ни одной утилиты с версией от единицы и выше. Все 0.1-0.5 с функциональность от 30 до 60% от полноценной.

LightDiver ★★★★★
()
Ответ на: комментарий от SpaceRanger

Да сколько ждать то? Работать надо уже сейчас.

LightDiver ★★★★★
()

да что ж такое то с этим рустом и погромистами на нем :D

bernd ★★★★★
()

А по факту все трое делают через Ж и вводят пользователя в заблуждение относительно объёма занимаемого пространства.

WatchCat ★★★★★
()
Ответ на: комментарий от mrdeath

я конкретно про du во вре. а не как вообще фря по сравнению с линаксом.

teod0r ★★★★★
()

Скопирую с OpenNet’а:

POSIX.1-2024: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/du.html

A file that occurs multiple times shall be counted and written for only one entry, even if the occurrences are under different file operands.

Т.ч. бага в GNU/busybox нет, а вот ржавчина считает неправильно.

Как и ожидалось, все эти переписыватели даже спецификацию не удостоились прочесть. QED

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от beastie

Скопирую с OpenNet’а:

POSIX.1-2024: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/du.html

A file that occurs multiple times shall be counted and written for only one entry, even if the occurrences are under different file operands.

Т.ч. бага в GNU/busybox нет, а вот ржавчина считает неправильно.

Скопирую с OpenNet’а:

Так, например, в стандарте POSIX.1-2018, написано[1]:

A file that occurs multiple times under one file operand and that has a link count greater than 1 shall be counted and written for only one entry. It is implementation-defined whether a file that has a link count no greater than 1 is counted and written just once, or is counted and written for each occurrence. It is implementation-defined whether a file that occurs under one file operand is counted for other file operands.

и

# гну
gdu -smc /var/log /var
7 /var/log
935 /var
942 total

busybox du -smc /var/log /var
7 /var/log
935 /var
941 total

# бсд
du -smc /var/log /var
7 /var/log
942 /var
948 total

# uutils
uu-du -smc /var/log /var
7 /var/log
942 /var
948 total

И тут оказывается, FreeBSD и «мак» не соответствуют POSIX.1-2024

AlexVR ★★★★★
()
Ответ на: комментарий от buddhist

У меня есть кошелёк, в нём 10 монет, он лежит в другом кошельке, в котором также лежит 10 монет.

Судя по ентому алгоритму у меня в наружном кошельке в общей сумме 30 монет.

beck ★★★★
()
Последнее исправление: beck (всего исправлений: 1)
Ответ на: комментарий от LightDiver

то почти сутки не было тем о раст, я даже переживать начал

Вот-вот!.. :))

«Утром мажу бутерброд —
Сразу мысль: а как народ?
И икра не лезет в горло,
И компот не льётся в рот!»
Somebody ★★★★
()
Ответ на: комментарий от beck

Да. Можно как-то спорить, когда аргумента всего два, но когда их становится больше (и увеличиваются уровни вложенности), очевидно, что вариант BSD/Rust адекватнее.

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

очевидно, что вариант BSD/Rust адекватнее

А.

beck ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.