Propozycja omówienia dodania do jądra Linux narzędzi do programowania w języku Rust

Nick Desaulniers (Nick Desaulniers), który w Google zajmuje się obsługi kompilacją jądra Linux przy użyciu kompilatora Clang i także pomaga naprawiać błędy w kompilatorze Rust, zaproponował poprowadzi na konferencji Linux Plumbers Conference 2020 sesję na temat wspierania rozwoju komponentów jądra w języku Rust. Nick prowadzi również mikro-konferencję poświęconą LLVM i uważa, że warto by było omówić aspekty techniczne możliwej integracji wsparcia dla Rust w jądrze (ma już gotowy prototyp roboczy dla KBuild) oraz zrozumieć, czy taka pomoc jest rzeczywiście potrzebna i jakie ograniczenia w użyciu Rust powinny być przyjęte.

Przypominamy, że w niedawnej dyskusji na konferencji „Open Source Summit and Embedded Linux” Linus Torvalds nie wykluczył możliwości powstania powiązań do rozwijania niepodstawowych subsystemów jądra (na przykład sterowników) w takich językach jak Rust. Możliwość tworzenia sterowników w języku Rust umożliwiłaby łatwe tworzenie bezpiecznych i wyższej jakości sterowników, wolnych od problemów takich jak odwołania do pamięci po jej zwolnieniu, dereferencjonowanie wskaźników null i przekroczenie granic bufora. Istnieje już kilka projektów zewnętrznych realizujących taką możliwość:

  • Programiści z firmy „Fish in a Barrel” przygotowali Narzędzie do pisania modułów kernelowych dla systemu Linux w języku Rust, wykorzystujące zestaw abstrakcyjnych warstw nad interfejsami i strukturami jądra w celu zwiększenia bezpieczeństwa. Warstwy są automatycznie generowane na podstawie istniejących plików nagłówkowych jądra za pomocą narzędzia bindgen. Do kompilacji warstw używany jest Clang. Budowane moduły, oprócz warstw, korzystają z pakietu staticlib.
  • Naukowcy z Chińskiego Uniwersytetu w Hongkongu rozwijają projekt do opracowywania sterowników dla wbudowanych systemów i urządzeń Internetu Rzeczy w języku Rust, który także wykorzystuje bindgen do generacji warstw na podstawie plików nagłówkowych jądra. Framework pozwala na zwiększenie bezpieczeństwa sterowników bez modyfikowania jądra - zamiast tworzenia dodatkowych poziomów izolacji dla sterowników w jądrze, proponuje się blokowanie problemów na etapie kompilacji, stosując bardziej bezpieczny język Rust. Zakłada się, że takie podejście może być poszukiwane przez producentów sprzętu, którzy opracowują własne sterowniki w pośpiechu, bez przeprowadzania odpowiedniego audytu.
  • Deweloperzy frameworka C2Rust do translacji kodu C na Rust, przeprowadzają Eksperymenty w zakresie przekształcania modułów jądra z minimalnymi ręcznymi poprawkami. Z problemów zauważono zastosowanie w wielu częściach jądra kodu, w którym używane są rozszerzenia GCC, które nie są obecnie wspierane w C2Rust. W celu rozwiązania tego problemu w C2Rust planuje się dodać wsparcie dla atrybutów GCC inline, cold, alias, used oraz section, a także rozszerzyć możliwości inline-assemblera i rozwiązać problemy ze strukturami, które są jednocześnie wyrównane i zapakowane (np. xregs_state). Istotne problemy wymagające ręcznej pracy to niemożność transpilacji nietrywialnych makr C do makr Rust oraz konieczność ponownego zdefiniowania typów, ponieważ C2Rust transpiluje typy C do definicji w pakiecie libc, ale ten pakiet nie może być używany w modułach jądra.

Ź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