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

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował do rozważenia przez twórców jądra Linuksa piątą wersję komponentów do tworzenia sterowników urządzeń w języku Rust. Obsługa Rusta jest uważana za eksperymentalną, ale jest już zawarta w gałęzi Linux-next i jest wystarczająco rozwinięta, aby 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, trzeciej i czwartej edycji łatek. W nowej wersji:

  • Do systemu ciągłej integracji opartego na wspieranym przez firmę Intel bocie 0DAY/LKP dodano testowanie komponentów pod kątem obsługi Rusta i rozpoczęto publikację raportów z testów. Przygotowujemy się do integracji obsługi Rusta z systemem automatycznego testowania KernelCI. Testowanie w oparciu o GitHub CI zostało przeniesione na wykorzystanie kontenerów.
  • Moduły jądra Rust są wolne od konieczności definiowania atrybutów skrzynek „#![no_std]” i „#![feature(…)]”.
  • Dodano obsługę pojedynczych obiektów docelowych zestawu (.o, .s, .ll i .i).
  • Wytyczne dotyczące kodu definiują zasady oddzielania komentarzy („//”) i dokumentowania kodu („///”).
  • Skrypt is_rust_module.sh został przerobiony.
  • Dodano obsługę prymitywów synchronizacji statycznej (globalna zmienna współdzielona) w oparciu o implementację „CONFIG_CONSTRUCTORS”.
  • Zarządzanie zamkami jest uproszczone: Guard i GuardMut są połączone i mają jeden sparametryzowany typ.
  • Podczas rejestracji urządzeń istnieje możliwość zdefiniowania dodatkowych parametrów.
  • Dodano abstrakcję „RwSemaphore”, która działa jak opakowanie na strukturę rw_semaphore C.
  • Aby móc korzystać z mmap, dodano nowy moduł mm i abstrakcję VMA (opakowanie na strukturę vm_area_struct).
  • Sterownik GPIO PL061 został przekonwertowany do obsługi makra „dev_*!”.
  • Przeprowadzono ogólne porządkowanie kodu.

Źródło: opennet.ru

Dodaj komentarz