Propozycja omówienia kwestii dodania narzędzi deweloperskich Rusta do jądra Linuksa

Nick Desagnier (Nicka Desaulniersa), który pracuje w Google, aby zapewnić wsparcie budowanie jądra Linuksa przy użyciu kompilatora Clang, a także porcja jedzenia naprawić błędy w kompilatorze Rusta, sugerowane trzymać na konferencji Konferencja hydraulików systemu Linux 2020 sesję w celu omówienia możliwości tworzenia komponentów jądra w Rust. Nick organizuje mikrokonferencję poświęconą LLVM i uważa, że ​​miło byłoby przedyskutować techniczne aspekty możliwej integracji obsługi Rusta z jądrem (przygotował już działający prototyp dla KBuild) i dowiedzieć się, czy taka obsługa powinna w ogóle dodać i jakie ograniczenia w stosowaniu Rusta należy zaakceptować.

Przypomnijmy, że w niedawnej dyskusji na konferencji Open Source Summit i Embedded Linux Linus Torvalds nie wykluczyłem pojawienie się powiązań do rozwoju podsystemów jądra innych niż podstawowe (na przykład sterowników) w językach takich jak Rust. Możliwość tworzenia sterowników w Rust pozwoliłaby nam na 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. Istnieje już kilka projektów innych firm wdrażających tę funkcję:

  • Deweloperzy z firmy „Ryba w beczce” przygotowany zestaw narzędzi do pisania ładowalnych modułów dla jądra Linuksa w języku Rust, wykorzystujący zestaw abstrakcyjnych warstw na interfejsach i strukturach jądra w celu zwiększenia bezpieczeństwa. Warstwy są generowane automatycznie na podstawie istniejących plików nagłówkowych jądra za pomocą narzędzia wiązać. Clang służy do budowania warstw. Oprócz warstw pośrednich zmontowane moduły korzystają z pakietu staticlib.
  • Naukowcy z Chińskiego Uniwersytetu w Hongkongu rozwijać projekt tworzenia sterowników dla systemów wbudowanych i urządzeń Internetu rzeczy w Rust, który wykorzystuje również bindgen do generowania warstw w oparciu o pliki nagłówkowe jądra. Framework pozwala na poprawę bezpieczeństwa sterowników bez dokonywania zmian w jądrze - zamiast tworzyć dodatkowe poziomy izolacji sterowników w jądrze, zaproponowano blokowanie problemów na etapie kompilacji, wykorzystując bezpieczniejszy język Rust. Zakłada się, że takie podejście może być pożądane przez producentów sprzętu opracowujących w pośpiechu autorskie sterowniki bez przeprowadzenia odpowiedniego audytu.
  • Twórcy frameworków C2Rdza do nadawania kodu C do Rusta, wydać eksperymenty dotyczące konwersji modułów jądra przy minimalnej liczbie ręcznych edycji. Jednym z zauważonych problemów jest użycie w wielu częściach jądra kodu korzystającego z rozszerzeń GCC, które nie są jeszcze obsługiwane w C2Rust. Aby rozwiązać ten problem, C2Rust planuje dodać obsługę atrybutów GCC inline, cold, alias, Used isection, a także rozszerzyć możliwości wbudowanego asemblera i rozwiązać problemy ze strukturami, które są zarówno wyrównane, jak i spakowane (na przykład xregs_state) . Poważne problemy wymagające pracy ręcznej obejmują niemożność przetłumaczenia nietrywialnych makr C na makra Rusta i potrzebę ponownego zdefiniowania typów, ponieważ C2Rust tłumaczy typy C na definicje w pakiecie libc, ale tego pakietu nie można używać w modułach jądra.

Źródło: opennet.ru

Dodaj komentarz