Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował twórcom jądra Linux zaktualizowaną wersję komponentów do tworzenia sterowników urządzeń w języku Rust. Wsparcie dla Rust jest traktowane jako eksperymentalne, ale już zostało zgodnione do włączenia w gałąź linux-next. W nowej wersji usunięto uwagi przedstawione podczas dyskusji nad pierwszą wersją poprawek. Linus Torvalds również zaangażował się w dyskusję i zaproponował zmianę logiki przetwarzania niektórych operacji bitowych.
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.
Najbardziej zauważalne zmiany w nowej wersji poprawek:
- Kod do zarządzania pamięcią został pozbawiony możliwości generowania stanu 'panic' w przypadku błędów, takich jak brak pamięci. Do zestawu dołączono wersję biblioteki Rust alloc, w której przekształcono kod do obsługi awarii, ale ostatecznym celem jest przeniesienie do głównej edycji alloc wszystkich funkcji potrzebnych dla jądra (zmiany już zostały przygotowane i przekazane do standardowej biblioteki Rust).
- Zamiast nocnych kompilacji jądra z obsługą Rust można teraz korzystać z wersji beta i stabilnych wydań kompilatora rustc. W tej chwili jako wzorcowy kompilator używany jest rustc 1.54-beta1, ale po wydaniu wersji 1.54 pod koniec miesiąca, to właśnie on będzie wspierany jako wzorcowy.
- Dodano wsparcie dla pisania testów z użyciem standardowego atrybutu Rust '#[test]' oraz możliwość stosowania doctestów do dokumentacji testów.
- Dodano wsparcie dla architektur ARM32 i RISCV oprócz wcześniej wspieranych x86_64 i ARM64.
- Ulepszono implementacje GCC Rust (front-end GCC dla Rust) oraz rustc_codegen_gcc (back-end rustc dla GCC), który teraz przechodzi wszystkie podstawowe testy.
- Zaproponowano nowy poziom abstrakcji do użycia w programach w języku Rust mechanizmów jądra, napisanych w języku C, takich jak czerwono-czarne drzewo, obiekty z licznikiem odniesień, tworzenie deskryptorów plików, zadania, pliki i wektory wejścia/wyjścia.
- W komponentach do tworzenia sterowników poprawiono wsparcie dla modułu 'file_operations', makra 'module!', rejestracji makr oraz rudimentarnych sterowników (probe i remove).
- W Binder wdrożono wsparcie dla przesyłania deskryptorów plików oraz haków LSM.
- Zaproponowano bardziej funkcjonalny przykład sterownika w Rust — bcm2835-rng dla sprzętowego generatora liczb losowych w płytach Raspberry Pi.
Dodatkowo wymieniane są projekty niektórych firm związane z używaniem Rust w jądrze:
- Firma Microsoft wyraziła zainteresowanie udziałem w pracach nad integracją wsparcia dla Rust w jądrze Linux i jest gotowa w najbliższych miesiącach dostarczyć implementacje sterowników dla Hyper-V w Rust.
- Firma ARM pracuje nad poprawą wsparcia dla Rust w systemach opartych na procesorach ARM. Projektowi Rust już zaproponowano zmiany, które przekształcają 64-bitowe systemy ARM w platformy pierwszego poziomu wsparcia (Tier-1).
- Firma Google bezpośrednio wspiera projekt Rust for Linux, rozwija nową implementację mechanizmu komunikacji międzyprocesowej Binder w Rust i rozważa przeróbkę różnych sterowników na Rust. Poprzez ISRG (Internet Security Research Group) firma Google zapewniła finansowanie prac nad integracją wsparcia dla Rust w jądrze Linux.
- Firma IBM zrealizowała wsparcie dla Rust w jądrze dla systemów PowerPC.
- Laboratorium LSE (Systems Research Laboratory) opracowało sterownik SPI w Rust.
Źródło: opennet.ru
