Nick Desaulniers (), który w Google zajmuje się kompilacją jądra Linux przy użyciu kompilatora Clang i także naprawiać błędy w kompilatorze Rust, poprowadzi na konferencji 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 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” 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 . Do kompilacji warstw używany jest Clang. Budowane moduły, oprócz warstw, korzystają z pakietu staticlib.
- Naukowcy z Chińskiego Uniwersytetu w Hongkongu 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 do translacji kodu C na Rust, 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
