Ostatnio Miguela Ojedy, autor projektu Rust-for-Linux wydał piątą propozycję Twórcy jądra Linuksa wybrani dla komponentów programistycznych Zardzewiałe sterowniki urządzeń do rozważenia.
Dla tych, którzy wciąż nie wiedzą o tej serii propozycji, które były publikowane od kilku miesięcy, powinniście wiedzieć, że pomysł za nią wynika z faktu, że obsługa Rusta jest obecnie uważana za eksperymentalną, ale jest już zawarty w gałęzi linux-next i jest wystarczająco dojrzały, aby rozpocząć pracę nad tworzeniem warstw abstrakcji o podsystemach jądra, a także o pisaniu sterowników i modułów.
Obecnie Komisja rozwoju Miguela Ojedy jest finansowana 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 zwiększających bezpieczeństwo w Internecie.
Należy wspomnieć, że proponowane zmiany umożliwiają użycie 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 włączenia Rusta do wymaganych zależności kompilacji dla jądra.
Używanie Rusta do tworzenia sterowników pozwoli Ci budować lepsze i bezpieczniejsze sterowniki przy minimalnym wysiłku, bez problemów, takich jak dostęp do obszaru pamięci po jego zwolnieniu, wyłuskiwanie pustych wskaźników i przepełnianie bufora.
Bezpieczeństwo pamięci jest zapewniane w Rust 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łnieniem liczb całkowitych, wymaga zainicjowania zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie wymusza koncepcję niezmiennych zmiennych i referencji oraz oferuje silne statyczne typowanie w celu zminimalizowania błędów logicznych.
Główne nowości w piątej propozycji
W nowej wersji łatek, kontynuowało usuwanie komentarzy dokonane podczas dyskusji nad łatkami pierwszej, drugiej, trzeciej i czwartej edycji.
W części wprowadzonych zmian i ulepszeń możemy stwierdzić, że walidacja komponentów dla kompatybilności z Rustem został dodany do systemu ciągłej integracji na podstawie zgodnego z Intelem bota 0DAY/LKP i zaczęły być publikowane raporty z testów.
Oprócz tego podkreślono, że integracja wsparcia Rust jest przygotowywana w automatyczny system testowy Jądro CI, plus testy oparte na GitHub CI zostały przełączone na używanie kontenerów.
Podkreśla się również, że dodano możliwość definiowania dodatkowych parametrów podczas rejestracji urządzeń, a także skrypt is_rust_module.sh został przeprojektowany dodano obsługę statycznych prymitywów synchronizacji (globalne zmienne współdzielone) w oparciu o implementację „CONFIG_CONSTRUCTORS”.
z inne zmiany, które się wyróżniają w tej nowej propozycji kontrolerów:
- Moduły Rust Core nie muszą definiować atrybutów: "#![no_std]" i "#![feature(...)]".
- Dodano obsługę pojedynczych celów kompilacji (.o, .s, .ll i .i).
- Wytyczne dotyczące kodu definiują teraz zasady rozdzielania komentarzy („//”) i dokumentowania kodu („///”).
- Uproszczone zarządzanie blokadą: Guard i GuardMut są połączone w jeden sparametryzowany typ.
- Dodano abstrakcję „RwSemaphore”, która działa jako opakowanie nad strukturą C rw_semaphore.
- Aby korzystać z mmap, dodano nowy moduł mm i abstrakcję VMA (powiązanie w strukturze vm_area_struct).
- Kontroler PL061 GPIO został zmieniony tak, aby używał makra "dev_*!".
- Ogólne czyszczenie kodu.
W końcu jeśli chcesz dowiedzieć się więcej na ten temat o tej nowej propozycji możesz zapoznać się ze szczegółami W poniższym linku.