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

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował czwartą 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 i włączona do gałęzi Linux-next i jest na tyle dojrzała, że ​​można rozpocząć prace nad tworzeniem warstw abstrakcji na podsystemach jądra, a także pisać sterowniki i moduły. Rozwój jest finansowany przez Google i ISRG (Internet Security Research Group), która jest założycielem projektu Let's Encrypt i promuje HTTPS oraz rozwój technologii poprawiających bezpieczeństwo w Internecie.

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.

Nowa wersja łatek w dalszym ciągu eliminuje komentarze powstałe podczas dyskusji na temat pierwszej, drugiej i trzeciej edycji łatek. W nowej wersji:

  • Dokonano przejścia na używanie stabilnej wersji Rust 1.58.0 jako kompilatora referencyjnego. Wśród zmian niezbędnych dla projektu, które nie są jeszcze uwzględnione w głównym zestawie narzędzi Rusta, flaga „-Zsymbol-mangling-version=v0” (oczekiwana w Rust 1.59.0) i tryb „maybe_uninit_extra” (oczekiwana w Rust 1.60.0 .XNUMX) są zaznaczone.
  • Dodano automatyczne sprawdzanie dostępności odpowiednich narzędzi Rust i rozszerzono możliwość testowania obsługi Rusta w systemie.
  • Zaproponowano nowe abstrakcje dostępu do tabel identyfikatorów urządzeń („IdArray” i „IdTable”) z kodu Rusta.
  • Dodano warstwy umożliwiające dostęp do funkcji związanych z timerem (struktura zegara).
  • Sterowniki platformy są teraz definiowane poprzez implementacje cech.
  • Dodano nowe makro w celu uproszczenia rejestracji sterowników platformy oraz zaproponowano nowy ogólny szablon sterownika.
  • Dodano makra dla struktur "dev_*".
  • Dodano metody „{read,write}*_relaxed” dla typu IoMem .
  • Usunięto właściwość FileOpener, aby uprościć operacje na plikach.
  • Do argumentów przekazywanych podczas rejestracji sterownika dodano parametr „ThisModule”.
  • Zaproponowano standardowy szablon do tworzenia modułów jądra w języku Rust.

Źródło: opennet.ru

Dodaj komentarz