Projekt Kerla rozwija jądro kompatybilne z Linuksem w Rust

Projekt Kerla opracowuje jądro systemu operacyjnego napisane w języku Rust. Nowe jądro jest początkowo zorientowane na zapewnienie kompatybilności z jądrem Linuksa na poziomie ABI, co umożliwi działanie niezmodyfikowanych plików binarnych zbudowanych dla Linuksa w środowisku opartym na Kerla. Kod jest rozpowszechniany na licencji Apache 2.0 i MIT. Za projekt odpowiada japoński deweloper Seiya Nuta, znany z tworzenia systemu operacyjnego opartego na mikrojądrze Resea, napisanego w języku C.

Na obecnym etapie rozwoju Kerla może działać tylko na systemach x86_64 i implementuje podstawowe wywołania systemowe, takie jak write, stat, mmap, pipe i poll, obsługuje sygnały, nienazwane potoki i przełączniki kontekstu. Do zarządzania procesami dostępne są wywołania takie jak fork, wait4 i execve. Obsługiwane jest tty i pseudoterminale (pty). Spośród systemów plików nadal obsługiwane są initramfs (używany do montowania głównego systemu plików), tmpfs i devfs. Stos sieciowy posiada obsługę gniazd TCP i UDP, zaimplementowaną w oparciu o bibliotekę smoltcp.

Deweloper przygotował środowisko startowe, które działa w QEMU lub na maszynie wirtualnej Firecracker ze sterownikiem virtio-net, z którym można się już połączyć poprzez SSH. Musl służy jako biblioteka systemowa, a BusyBox jako narzędzie użytkownika.

Projekt Kerla rozwija jądro kompatybilne z Linuksem w Rust

W oparciu o Dockera przygotowano system kompilacji pozwalający na tworzenie własnych initramfów startowych z rdzeniem Kerla. Powłoka nsh przypominająca rybę i stos GUI Kazari oparty na protokole Wayland są opracowywane osobno.

Projekt Kerla rozwija jądro kompatybilne z Linuksem w Rust

Użycie języka Rust w projekcie zmniejsza liczbę błędów w kodzie poprzez zastosowanie technik bezpiecznego kodowania i poprawę efektywności identyfikowania problemów podczas pracy z pamięcią. W Rust zapewniona jest obsługa bezpieczna dla pamięci w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektu i czasu życia obiektu (zakresu), a także poprzez ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Ponadto Rust zapewnia ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, domyślnie stosuje koncepcję niezmiennych (niezmiennych) referencji i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych, upraszcza przetwarzanie wartości wejściowych dzięki możliwości dopasowywania wzorów. .

Do tworzenia komponentów niskiego poziomu, takich jak jądro systemu operacyjnego, Rust zapewnia obsługę surowych wskaźników, pakowania struktur, wstawek wbudowanych w asemblerze i wstawiania plików asemblera. Aby pracować bez konieczności wiązania się ze standardową biblioteką, dostępne są osobne pakiety skrzyniowe do wykonywania operacji na ciągach znaków, wektorach i flagach bitowych. Wśród zalet znajdują się również wbudowane narzędzia do oceny jakości kodu (linter, analizator rdzy) i tworzenia testów jednostkowych, które można uruchomić nie tylko na prawdziwym sprzęcie, ale także w QEMU.

Źródło: opennet.ru

Dodaj komentarz