Dziesiąta wersja łatek dla jądra Linuksa z obsługą języka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował wydanie komponentów v10 do rozwoju sterowników urządzeń w języku Rust do rozważenia przez twórców jądra Linuksa. Jest to jedenasta edycja łatek, biorąc pod uwagę wersję pierwszą, opublikowaną bez numeru wersji. Włączenie obsługi Rusta zostało zatwierdzone przez Linusuma Torvaldsa do włączenia do jądra Linuksa 6.1, o ile nie wystąpią nieprzewidziane problemy. Rozwój jest finansowany przez Google i ISRG (Internet Security Research Group), która jest założycielem projektu Let's Encrypt i promuje HTTPS oraz rozwój technologii poprawiających bezpieczeństwo w Internecie.

Podobnie jak poprzednia wersja łatek, wersja v10 została okrojona do absolutnego minimum, wystarczającego do zbudowania prostego modułu jądra napisanego w języku Rust. Różnice w stosunku do poprzedniej wersji sprowadzają się do drobnych zmian, zamiany sizeof na ARRAY_SIZE w kallsyms.c i dostosowania łatek do jądra v6.0-rc7. Oczekuje się, że minimalna łatka, której rozmiar zmniejszono z 40 do 13 tysięcy linii kodu, ułatwi przyjęcie obsługi Rusta w głównym jądrze. Po zapewnieniu minimalnego wsparcia planowane jest stopniowe zwiększanie istniejącej funkcjonalności, przenoszenie pozostałych zmian z gałęzi Rust-for-Linux.

Proponowane zmiany umożliwiają wykorzystanie Rusta jako drugiego języka do tworzenia sterowników i modułów jądra. Obsługa Rusta jest prezentowana jako opcja, która nie jest domyślnie włączona i nie powoduje uwzględnienia Rusta jako wymaganej zależności kompilacji jądra. Używanie Rusta do programowania sterowników umożliwi tworzenie bezpieczniejszych i lepszych sterowników przy minimalnym wysiłku, wolnych od problemów, takich jak dostęp do pamięci po zwolnieniu, wyłuskiwanie wskaźników zerowych i przepełnienie bufora.

Bezpieczna obsługa pamięci w Rust jest zapewniona w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektu i czasu życia obiektu (zakres), a także poprzez ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Rust zapewnia również ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie stosuje koncepcję niezmiennych odniesień i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych.

Źródło: opennet.ru

Dodaj komentarz