Силвестър Ледрю (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
