Druga edycja poprawek dla jądra Linux z obsługą języka Rust

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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster