Piąta edycja poprawek dla jądra Linux z wsparciem dla języka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował programistom jądra Linux piątą wersję komponentów do tworzenia sterowników urządzeń w języku Rust. Wsparcie dla Rust traktowane jest jako eksperymentalne, ale już zostało włączone do gałęzi linux-next i jest wystarczająco rozwinięte, aby rozpocząć prace nad tworzeniem warstw abstrakcji nad subsystemami jądra oraz pisaniem sterowników i modułów. Rozwój jest finansowany przez firmę Google i organizację ISRG (Internet Security Research Group), która jest założycielem projektu Let’s Encrypt i wspiera promocję HTTPS oraz rozwój technologii zwiększających bezpieczeństwo internetu.

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.

W nowej wersji poprawek kontynuowano usuwanie uwag zgłoszonych podczas dyskusji na temat pierwszej, drugiej, trzeciej i czwartej edycji poprawek. W nowej wersji:

  • W systemie ciągłej integracji opartym na wspieranym przez firmę Intel bocie 0DAY/LKP dodano testowanie komponentów wspierających Rust, a także rozpoczęto publikację raportów z testów. Przygotowywana jest integracja wsparcia dla Rust w systemie automatycznych testów KernelCI. Testy bazujące na GitHub CI zostały przeprowadzone z wykorzystaniem kontenerów.
  • Moduły jądra w Rust nie muszą już definiować atrybutów crate „#![no_std]” i „#![feature(…)]”.
  • Dodano wsparcie dla pojedynczych celów budowania (.o, .s, .ll i .i).
  • W zaleceniach dotyczących formatowania kodu określono zasady dotyczące rozdzielania komentarzy („//”) i dokumentowania kodu („///”).
  • Przebudowano skrypt is_rust_module.sh.
  • Dodano wsparcie dla statycznych (globalnych) wspólnych zmiennych, opartych na implementacji „CONFIG_CONSTRUCTORS”.
  • Ułatwiono zarządzanie blokadami: Guard i GuardMut zostały połączone w jeden parametryzowany typ.
  • Umożliwiono definiowanie dodatkowych parametrów podczas rejestracji urządzeń.
  • Dodano abstrakcję „RwSemaphore”, działającą jako opakowanie nad strukturą C rw_semaphore.
  • Dodano nowy moduł mm oraz abstrakcję VMA (opakowanie nad strukturą vm_area_struct) do użycia mmap.
  • Sterownik GPIO PL061 został przekształcony w celu wykorzystania makra „dev_*!”.
  • Przeprowadzono ogólną czyszczenie kodu.

Ź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