Nowa wersja poprawek dla jądra Linux z obsługą języka Rust

Miguel Ojeda, autor projektu Rust-for-Linux, zaproponował wydanie komponentów v5 do tworzenia sterowników urządzeń w języku Rust do rozważenia przez twórców jądra Linuksa. Jest to szósta edycja łatek, biorąc pod uwagę wersję pierwszą, opublikowaną bez numeru wersji. 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, czwartej i piątej edycji łatek. W nowej wersji:

  • Zestaw narzędzi został zaktualizowany do wersji Rust 1.59.0. Wariant biblioteki alloc jest również zsynchronizowany z nową wersją Rusta, eliminując możliwość generowania stanu „paniki” w przypadku wystąpienia błędów, takich jak brak pamięci. Ustabilizowano możliwość korzystania z wkładek asemblera („feature(global_asm)”).
  • Dodano obsługę tworzenia programów hosta w Rust, które są używane podczas kompilacji jądra.
  • Zamiast dostarczać wstępnie wygenerowane pliki specyfikacji platformy docelowej, są one generowane dynamicznie w oparciu o konfigurację jądra.
  • Dodano parametr jądra HAVE_RUST, aby włączyć go dla architektur obsługujących Rust.
  • Zaproponowano abstrakcje do wykorzystania w kodzie Rusta dla sprzętowego generatora liczb pseudolosowych.
  • Zezwolono na użycie kodów błędów bez przedrostka „Error::” (na przykład „return Err(EINVAL)”) w celu przybliżenia obsługi kodów błędów w języku C.
  • Dodano typ „CString” dla niestandardowych ciągów C. Typy Formatter i Buffer zostały połączone.
  • Dodano typy Bool i LockInfo.
  • Uproszczono implementację blokad obrotowych.

Źródło: opennet.ru

Dodaj komentarz