Czwarta edycja łatek dla jądra Linux z wsparciem dla języka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował deweloperom jądra Linux czwarty zestaw komponentów do tworzenia sterowników urządzeń w języku Rust. Wsparcie dla Rust jest traktowane jako eksperymentalne, ale zostało już zatwierdzone do włączenia do gałęzi linux-next i jest wystarczająco rozwinięte, aby rozpocząć prace nad tworzeniem warstw abstrakcji nad subsystemami jądra, a także do pisania sterowników i modułów. Rozwój jest finansowany przez firmę Google oraz organizację ISRG (Internet Security Research Group), która jest założycielem projektu Let's Encrypt i wspiera promowanie 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 łat wciąż kontynuowane są poprawki uwag zgłoszonych w trakcie dyskusji nad pierwszą, drugą i trzecią wersją łatek. W nowej wersji:

  • Dokonano przejścia na stosowanie stabilnej wersji kompilatora Rust 1.58.0 jako wersji referencyjnej. Wśród niezbędnych zmian w projekcie, które jeszcze nie zostały włączone do głównego zestawu narzędzi Rust, wyróżnione są flaga „-Zsymbol-mangling-version=v0” (oczekiwana w Rust 1.59.0) oraz tryb „maybe_uninit_extra” (oczekiwany w Rust 1.60.0).
  • Dodano automatyczne sprawdzanie dostępności odpowiednich narzędzi Rust oraz rozszerzono możliwości testowania wsparcia Rust w systemie.
  • Proponowane są nowe abstrakcje do dostępu z kodu w języku Rust do tabel identyfikatorów urządzeń („IdArray” i „IdTable”).
  • Dodano warstwy do wywoływania funkcji związanych z zegarem (clok framework).
  • Sterowniki dla platform są teraz definiowane poprzez realizację typów.
  • Dodano nowy makro do uproszczenia rejestracji sterowników platform oraz zaproponowano nowy szablon typowego sterownika.
  • Dodano makra dla struktur „dev_*”.
  • Dodano metody „{read,write}*_relaxed” dla typu IoMem.
  • Usunięto właściwość FileOpener dla uproszczenia operacji na plikach.
  • Do argumentów przekazywanych podczas rejestracji sterownika dodano parametr „ThisModule”.
  • Proponowany jest typowy szablon do tworzenia modułów jądra w języku Rust.

Ź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