Адаптація Debian для використання реалізації coreutils на мові Rust

Сильвестр Ледрю (Sylvestre Ledru), відомий своєю роботою зі збирання Debian GNU/Linux з використанням компілятора Clang, повідомив про успішне проведення експерименту із залучення альтернативного набору утиліт coreutils, переписаного мовою Rust. До складу coreutils входять такі утиліти, як sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln та ls. Для першого етапу інтеграції в Debian варіанті coreutils на мові Rust були поставлені такі цілі:

  • Створення пакета з альтернативним варіантом coreutils на мові Rust для Debian та Ubuntu.
  • Завантаження Debian із робочим столом GNOME, використовуючи rust-coreutils.
  • Установка 1000 найпопулярніших пакетів з репозиторію.
  • Збірка з вихідних текстів Firefox, LLVM/Clang та ядра Linux в оточенні з rust-coreutils.

Після створення більше 100 патчів для Rust/coreutils вдалося успішно реалізувати всі цілі. З роботи, що продовжується, відзначається реалізація відсутніх утиліт і опцій, поліпшення якості та однаковості коду, розвиток тестового набору, усунення збоїв, що виникає при запуску тестового набору від GNU Coreutils (поки успішно виконується 141 тест з 613).

При створенні пакету rust-coreutils було вирішено не замінювати пакет coreutils, а забезпечити можливість їхньої паралельної роботи. Варіанти утиліт мовою Rust встановлюються в /usr/lib/cargo/bin/ і активуються через додавання даного каталогу змінну оточення PATH. Створення пакету rust-coreutils ускладнювало необхідність завантаження в репозиторій всіх складальних залежностей, включаючи Rust та різні дрібні crate-пакети.

Зі створенням завантажувального образу особливих проблем не виникло, але адаптація пакетів для оточення з rust-coreutils зажадала великої роботи, оскільки багато скриптів post-install викликають утиліти з набору coreutils. Найбільше проблем було викликано відсутністю необхідних опцій, наприклад, у утиліті «cp» були відсутні опції «—archive» і «—no-dereference», у «ln» був підтримки опції «—relative», в mktemp — «-t» , в sync "-fs", в install - "-owner" і "-group". Інші проблеми спливли через відмінності в поведінці, наприклад, утиліта install не підтримувала вказівку /dev/null як вхідний файл, в mkdir замість "-parent" була опція "-parents" і т.п.

При тестуванні збирання великих кодових баз великих проблем не виникло. При збиранні Firefox і LLVM/Clang застосовуються python-скрипти і cmake, тому заміна coreutils на них не вплинула. Складання ядра Linux пройшло відносно гладко, спливли лише дві проблеми: виведення помилки при використанні chown із символічним посиланням та відсутність опції «-n» в утиліті ln.

Джерело: opennet.ru

Додати коментар або відгук