Projekt Kerla rozwija jądro zgodne z Linuxem w języku Rust

W ramach projektu Kerla opracowywane jest jądro systemu operacyjnego, napisane w języku Rust. Nowe jądro jest początkowo ukierunkowane na zapewnienie zgodności z jądrami Linux na poziomie ABI, co umożliwi uruchamianie w środowisku opartym na Kerla niemodyfikowanych plików wykonywalnych skompilowanych dla Linux. Kod jest rozpowszechniany na licencjach Apache 2.0 i MIT. Projekt rozwija japoński programista Seiya Nuta, znany z tworzenia mikrojądrowego systemu operacyjnego Resea, napisanego w języku C.

Na obecnym etapie rozwoju Kerla może działać tylko na systemach z architekturą x86_64 i zaimplementowano podstawowe wywołania systemowe, takie jak write, stat, mmap, pipe i poll, obsługiwane są sygnały, nie nazwane kanały oraz przełączanie kontekstu. Do zarządzania procesami dostępne są takie wywołania, jak fork, wait4 i execve. Obsługuje tty oraz pseudoterminal (pty). Z systemów plików obsługiwane są na razie initramfs (używane do montowania głównego systemu plików), tmpfs oraz devfs. Dostarczany jest stos sieciowy z obsługą gniazd TCP i UDP, zaimplementowany na podstawie biblioteki smoltcp.

Programista przygotował środowisko rozruchowe, które można uruchomić w QEMU lub w maszynie wirtualnej Firecracker z sterownikiem virtio-net, do którego można już podłączyć się przez SSH. Jako biblioteka systemowa wykorzystana jest musl, a jako narzędzia użytkowe — BusyBox.

Projekt Kerla rozwija jądro zgodne z Linuxem w języku Rust

Na bazie Dockera przygotowano system budowy, który pozwala na tworzenie własnych rozruchowych initramfs z jądrem Kerla. Oddzielnie rozwijane są podobna do fish powłoka nsh oraz stos GUI Kazari oparty na protokole Wayland.

Projekt Kerla rozwija jądro zgodne z Linuxem w języku Rust

Zastosowanie języka Rust w projekcie pozwala na zredukowanie liczby błędów w kodzie dzięki zastosowaniu technik bezpiecznego programowania oraz zwiększeniu efektywności wykrywania problemów związanych z pamięcią. Bezpieczna praca z pamięcią w Rust jest zapewniana podczas kompilacji poprzez sprawdzanie wskaźników, śledzenie własności obiektów oraz uwzględnianie czasu życia obiektów (zakresu widoczności), a także poprzez ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Ponadto Rust oferuje środki ochrony przed przepełnieniem liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed ich użyciem, stosuje koncepcję niemutowalności (immutable) wskaźników i zmiennych domyślnie oraz zapewnia silne statyczne typowanie w celu minimalizacji błędów logicznych, uproszczenia przetwarzania danych wejściowych dzięki mechanizmowi dopasowywania wzorców.

Do rozwijania komponentów niskopoziomowych, takich jak jądro systemu operacyjnego, Rust oferuje wsparcie dla wskaźników raw, pakowania struktur, asemblerowych wstawek inline oraz wbudowywania plików w asemblerze. Dla pracy niezależnej od biblioteki standardowej istnieją oddzielne paczki crate do operacji na ciągach, wektorach i flagach bitowych. Wśród zalet można również wyróżnić wbudowane narzędzia do oceny jakości kodu (linter, rust-analyzer) oraz tworzenia testów jednostkowych, które można uruchamiać nie tylko na rzeczywistym sprzęcie, ale również w QEMU.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster