Druga edycja łatek dla jądra Linuksa z obsługą języka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował zaktualizowaną wersję komponentów do tworzenia sterowników urządzeń w języku Rust do rozważenia przez twórców jądra Linuksa. Obsługa Rusta jest uważana za eksperymentalną, ale została już uzgodniona w celu włączenia jej do gałęzi Linux-next. Nowa wersja eliminuje uwagi zgłaszane podczas dyskusji na temat pierwszej wersji poprawek. Do dyskusji włączył się już Linus Torvalds, który zaproponował zmianę logiki przetwarzania niektórych operacji bitowych.

Przypomnijmy, że 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 dla 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.

Najbardziej zauważalne zmiany w nowej wersji łatek:

  • Kod alokacji pamięci jest wolny od potencjalnego generowania stanu „paniki” w przypadku wystąpienia błędów, takich jak brak pamięci. Dołączony jest wariant biblioteki Rust alloc, która przerabia kod pod kątem obsługi błędów, ale ostatecznym celem jest przeniesienie wszystkich funkcji potrzebnych jądru do głównej edycji alloc (zmiany zostały już przygotowane i przeniesione do standardowego biblioteka Rusta).
  • Zamiast nocnych kompilacji, możesz teraz używać wersji beta i stabilnych wydań kompilatora rustc do kompilowania jądra z obsługą Rusta. Obecnie jako kompilator referencyjny używany jest rustc 1.54-beta1, ale po wydaniu wersji 1.54 pod koniec miesiąca będzie on obsługiwany jako kompilator referencyjny.
  • Dodano obsługę pisania testów przy użyciu standardowego atrybutu „#[test]” dla Rusta oraz możliwość używania dokumentów do dokumentowania testów.
  • Dodano obsługę architektur ARM32 i RISCV oprócz wcześniej obsługiwanych architektur x86_64 i ARM64.
  • Ulepszone implementacje GCC Rust (frontend GCC dla Rusta) i rustc_codegen_gcc (backend rustc dla GCC), które teraz przechodzą wszystkie podstawowe testy.
  • Zaproponowano nowy poziom abstrakcji do wykorzystania w programach Rusta mechanizmów jądra napisanych w C, takich jak czerwono-czarne drzewa, obiekty zliczane przez referencje, tworzenie deskryptorów plików, zadania, pliki i wektory we/wy.
  • Komponenty rozwojowe sterowników poprawiły obsługę modułu file_operacje, makra modułu!, rejestracji makr i podstawowych sterowników (sondowanie i usuwanie).
  • Binder obsługuje teraz przekazywanie deskryptorów plików i zaczepów LSM.
  • Zaproponowano bardziej funkcjonalny przykład sterownika Rust - bcm2835-rng dla sprzętowego generatora liczb losowych płyt Raspberry Pi.

Dodatkowo wspominane są projekty niektórych firm związane z wykorzystaniem Rusta w jądrze:

  • Microsoft wyraził zainteresowanie udziałem w pracach nad integracją obsługi Rusta z jądrem Linuksa i jest gotowy zapewnić implementacje sterowników dla Hyper-V na Rust w nadchodzących miesiącach.
  • ARM pracuje nad ulepszeniem obsługi Rusta dla systemów opartych na ARM. W projekcie Rust zaproponowano już zmiany, które sprawią, że 64-bitowe systemy ARM staną się platformą Tier 1.
  • Google bezpośrednio zapewnia wsparcie dla projektu Rust for Linux, opracowuje nową implementację mechanizmu komunikacji międzyprocesowej Binder w Rust i rozważa możliwość przerobienia różnych sterowników w Rust. Za pośrednictwem ISRG (Internet Security Research Group) Google zapewnił fundusze na prace nad integracją obsługi Rusta z jądrem Linuksa.
  • IBM wdrożył obsługę jądra dla Rust dla systemów PowerPC.
  • Laboratorium LSE (Laboratorium Badań Systemowych) opracowało sterownik SPI w języku Rust.

Źródło: opennet.ru

Dodaj komentarz