Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował deweloperom jądra Linux wydanie v5 komponentów do tworzenia sterowników urządzeń w języku Rust. Jest to szósta edycja poprawek uwzględniająca pierwszy wariant, opublikowany bez oznaczenia wersji. Obsługa Rust jest traktowana jako eksperymentalna, ale już została włączona do gałęzi linux-next i jest dostatecznie rozwinięta, aby rozpocząć pracę nad warstwami abstrakcji nad podsystemami jądra oraz pisanie sterowników i modułów. Rozwój jest finansowany przez firmę Google oraz organizację ISRG (Internet Security Research Group), która jest założycielem projektu Let’s Encrypt i wspiera rozwój HTTPS oraz technologii zwiększających bezpieczeństwo internetu.
Przypomnijmy, że proponowane zmiany umożliwiają użycie Rust jako drugiego języka do tworzenia sterowników i modułów jądra. Obsługa Rust jest przedstawiana jako opcja, nieaktywna domyślnie i nie prowadząca do włączenia Rust do obowiązkowych zależności kompilacyjnych jądra. Użycie Rust do tworzenia sterowników pozwoli na minimalnym wysiłku tworzyć bezpieczne i lepszej jakości sterowniki, wolne od problemów takich jak odwołania do zwolnionej pamięci, dereferencja wskaźników null oraz przekroczenia granic 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.
W nowym wariancie poprawek kontynuowane są poprawki zgłoszone w trakcie dyskusji pierwszej, drugiej, trzeciej, czwartej i piątej edycji poprawek. W nowej wersji:
- Narzędzia zostały zaktualizowane do wersji Rust 1.59.0. Z nową wersją Rust synchronizowana jest także wersja biblioteki alloc, pozbawiona możliwych generacji stanu „panic” w przypadku błędów, takich jak brak pamięci. Ustabilizowano możliwość użycia wstawek asemblerowych („feature(global_asm)”).
- Dodano wsparcie dla tworzenia w języku Rust programów hostujących, używanych w procesie kompilacji jądra.
- Zamiast dostarczania wstępnie wygenerowanych plików ze specyfikacją docelowych platform, zapewniono ich dynamiczne generowanie na podstawie konfiguracji jądra.
- Dodany został parameter jądra HAVE_RUST, włączany dla architektur, na których obsługiwany jest Rust.
- Zaproponowano abstrakcje do wykorzystania w kodzie w języku Rust dla sprzętowego generatora liczb pseudolosowych.
- Dozwolone jest używanie kodów błędów bez prefiksu „Error::” (na przykład „return Err(EINVAL)”) w celu zbliżenia do obsługi kodów błędów w C.
- Dodano typ „CString” dla własnych ciągów C. Połączono typy Formatter i Buffer.
- Dodano typy Bool i LockInfo.
- Uproszczono realizację blokad spin.
Źródło: opennet.ru
