Проектът Kerla разработва Linux-съвместимо ядро ​​в Rust

Проектът Kerla разработва ядро ​​на операционна система, написано на Rust. Новото ядро ​​е проектирано от самото начало, за да бъде съвместимо с ядрото на Linux на ниво ABI, което ще позволи немодифицираните изпълними файлове, създадени за Linux, да работят в среда, базирана на Kerla. Кодът се разпространява под лицензите Apache 2.0 и MIT. Проектът се разработва от японския разработчик Seiya Nuta, известен със създаването на микроядрената операционна система Resea, написана на C.

На настоящия етап на разработка Kerla може да работи само на системи x86_64 и прилага основни системни извиквания като write, stat, mmap, pipe и poll, поддържа сигнали, неименувани канали и контекстни превключватели. За управление на процеси се предоставят извиквания като fork, wait4 и execve. Има поддръжка за tty и псевдо-терминали (pty). От файловите системи все още се поддържат initramfs (използвана за монтиране на основната FS), tmpfs и devfs. Осигурен е мрежов стек с поддръжка на TCP и UDP сокети, реализиран на базата на библиотеката smoltcp.

Разработчикът е подготвил стартираща среда, която работи в QEMU или във виртуалната машина Firecracker с драйвера virtio-net, към който вече можете да се свържете чрез SSH. Musl се използва като системна библиотека, а BusyBox се използва като потребителски помощни програми.

Проектът Kerla разработва Linux-съвместимо ядро ​​в Rust

Въз основа на Docker е подготвена система за компилиране, която ви позволява да създавате свои собствени initramfs за зареждане с ядрото Kerla. Подобната на риба обвивка nsh и GUI стекът Kazari, базиран на протокола Wayland, се разработват отделно.

Проектът Kerla разработва Linux-съвместимо ядро ​​в Rust

Използването на езика Rust в проект намалява броя на грешките в кода чрез прилагане на техники за безопасно кодиране и подобряване на ефективността на идентифициране на проблеми при работа с памет. Безопасността на паметта е осигурена в Rust по време на компилация чрез проверка на референции, проследяване на собствеността върху обекта и продължителността на живот на обекта (обхват), както и чрез оценка на коректността на достъпа до паметта по време на изпълнение на кода. В допълнение, Rust осигурява защита срещу препълване на цели числа, изисква задължителна инициализация на стойностите на променливите преди употреба, прилага концепцията за неизменни препратки и променливи по подразбиране, предлага силно статично въвеждане за минимизиране на логически грешки и опростява обработката на входни стойности чрез съоръжения за съвпадение на шаблони ..

За разработването на компоненти от ниско ниво, като например ядрото на ОС, Rust осигурява поддръжка за необработени указатели, пакетиране на структура, вмъквания на асемблер и вграждане на файлове на асемблер. За да работите, без да сте обвързани със стандартната библиотека, има отделни пакети за щайги за извършване на операции върху низове, вектори и битови флагове. Сред предимствата има и вградени инструменти за оценка на качеството на кода (linter, rust-analyzer) и създаване на модулни тестове, които могат да се изпълняват не само на реален хардуер, но и в QEMU.

Източник: opennet.ru

Добавяне на нов коментар