Linus Torvalds przeprowadził recenzję poprawek dotyczących możliwości tworzenia sterowników w języku Rust dla jądra Linux i wyraził kilka krytycznych uwag.
Największe zastrzeżenia wzbudziła potencjalna możliwość skoku do panic() w sytuacjach błędnych, na przykład w przypadku braku pamięci, gdy operacje dynamicznego przydzielania pamięci, w tym wewnątrz jądra, mogą zakończyć się błędem. Torvalds stwierdził, że takie podejście w jądrze jest zasadniczo niedopuszczalne i w przypadku braku zrozumienia tego aspektu może całkowicie odrzucić (totally NAKed) każdy kod, który spróbuje zastosować takie podejście. Z drugiej strony, deweloper pracujący nad poprawkami zgodził się z tym problemem i uznał go za rozwiązany.
Jeszcze jednym problemem stały się próby używania obliczeń zmiennoprzecinkowych lub typów 128-bitowych, co nie jest dopuszczalne w takich środowiskach jak jądro Linux. Okazało się to poważniejszym problemem, ponieważ na ten moment podstawowa biblioteka Rust jest nierozdzielna i stanowi jeden duży blob — nie ma możliwości zażądania tylko niektórych funkcji, co zapobiegłoby użyciu problematycznych funkcjonalności. Rozwiązanie problemu może wymagać wprowadzenia zmian w kompilatorze Rust i bibliotece, a obecnie zespół nie ma jeszcze strategii, jak wdrożyć modułowość bibliotek tego języka.
Ponadto Torvalds zauważył, że dostarczony przykład sterownika jest bezużyteczny i zasugerował dołączenie jako przykładu jakiegoś sterownika, który rozwiązuje rzeczywisty problem.
Uzupełnienie: Firma Google ogłosiła swoje uczestnictwo w inicjatywie na rzecz promowania wsparcia dla Rust w jądrze Linux i przedstawiła aspekty techniczne zasadności wdrożenia Rust w celu rozwiązania problemów związanych z błędami w zarządzaniu pamięcią. Google uważa, że Rust jest już gotowy dołączenia do C jako język do tworzenia komponentów jądra Linux. W artykule przedstawiono również przykłady użycia języka Rust do tworzenia sterowników jądra w kontekście ich wykorzystania na platformie Android (Rust został oficjalnie uznany za wspierany język do tworzenia aplikacji na Android).
Zauważono, że Google przygotował wstępny prototyp sterownika napisanego w języku Rust dla mechanizmu międzyprocesowego Binder, co umożliwi szczegółowe porównanie wydajności i bezpieczeństwa implementacji Binder w C i Rust. W obecnym stanie prace jeszcze nie zostały zakończone, ale prawie dla wszystkich podstawowych abstrakcji funkcjonalności jądra, niezbędnych do działania Binder, przygotowano przystawki do wykorzystania tych abstrakcji w kodzie napisanym w języku Rust.
Źródło: opennet.ru
