Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował deweloperom jądra Linux wydanie v10 komponentów do tworzenia sterowników urządzeń w języku Rust. To jedenasta edycja łat, uwzględniająca pierwszą wersję opublikowaną bez numeru wersji. wsparcie dla Rust zostało zatwierdzone przez Linusa Torvaldsa do włączenia w jądro Linux 6.1, jeśli nie pojawią się nieprzewidziane problemy. Rozwój jest finansowany przez firmę Google i organizację ISRG (Internet Security Research Group), która jest założycielem projektu Let’s Encrypt i wspiera promowanie HTTPS oraz rozwój technologii zwiększających bezpieczeństwo internetu.
Jak poprzednia wersja patchy, wydanie v10 jest uproszczone do niezbędnego minimum, wystarczającego do zbudowania prostego modułu jądra, napisanego w języku Rust. Różnice w porównaniu do poprzedniej wersji sprowadzają się do drobnych poprawek, zastąpienia sizeof na ARRAY_SIZE w pliku kallsyms.c oraz dostosowania patchy do jądra v6.0-rc7. Zakłada się, że minimalny patch, którego rozmiar został zmniejszony z 40 do 13 tysięcy linii kodu, ułatwi przyjęcie wsparcia dla Rust do podstawowego jądra. Po zapewnieniu minimalnego wsparcia planuje się stopniowe zwiększanie dostępnej funkcjonalności, przenosząc także inne zmiany z gałęzi Rust-for-Linux.
Proponowane zmiany umożliwiają korzystanie z Rust jako drugiego języka do opracowywania sterowników i modułów jądra. Wsparcie dla Rust jest prezentowane jako opcja, nieaktywna domyślnie i nie prowadząca do włączenia Rust do obowiązkowych zależności kompilacji jądra. Użycie Rust do opracowywania sterowników pozwoli przy minimalnym wysiłku tworzyć bezpieczne i lepszej jakości sterowniki, pozbawione problemów takich jak dostęp do obszaru pamięci po jej zwolnieniu, dereferencja wskaźników zerowych oraz wyjście poza granice bufora.
Bezpieczna praca z pamięcią w języku Rust jest zapewniana w czasie kompilacji poprzez sprawdzanie referencji, ś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 w czasie wykonywania kodu. Rust zapewnia również środki ochrony przed przepełnieniami wartości całkowitych, wymaga obowiązkowego inicjowania wartości zmiennych przed ich użyciem, lepiej obsługuje błędy w standardowej bibliotece, stosuje koncepcję niezmienności (immutable) referencji i zmiennych domyślnie oraz oferuje silną statyczną typizację w celu minimalizacji błędów logicznych.
Źródło: opennet.ru
