Obsługa Rusta dla jądra Linuksa spotyka się z krytyką ze strony Torvaldsa

Linus Torvalds dokonał przeglądu łatek wprowadzających możliwość tworzenia sterowników w języku Rust dla jądra Linuksa i poczynił kilka krytycznych komentarzy.

Największe skargi budziła potencjalna możliwość wywołania panic() w sytuacjach błędów, np. w sytuacji małej ilości pamięci, gdy operacje dynamicznej alokacji pamięci, także w obrębie jądra, mogą się nie udać. Torvalds stwierdził, że takie podejście w jądrze jest zasadniczo nie do przyjęcia i jeśli ten punkt nie zostanie zrozumiany, może całkowicie oszukać każdy kod, który próbuje zastosować takie podejście. Z drugiej strony twórca łatki zgodził się z tym problemem i uważa go za możliwy do rozwiązania.

Kolejnym problemem były próby użycia typów zmiennoprzecinkowych lub 128-bitowych, które nie są akceptowane w środowiskach takich jak jądro Linuksa. Okazało się to poważniejszym problemem, ponieważ w tej chwili podstawowa biblioteka Rusta jest niepodzielna i reprezentuje jedną dużą plamę - nie ma możliwości zażądania tylko niektórych funkcji, co uniemożliwia użycie tej czy innej problematycznej funkcjonalności. Rozwiązanie problemu może wymagać zmian w kompilatorze rdzy i bibliotekach, chociaż w tej chwili zespół nie ma jeszcze strategii wdrożenia modularyzacji bibliotek językowych.

Ponadto Torvalds zauważył, że podany przykład sterownika był bezużyteczny i zalecił nam użycie jako przykładu sterownika, który rozwiązuje jeden z rzeczywistych problemów.

Aktualizacja: Google ogłosił swój udział w inicjatywie mającej na celu wprowadzenie obsługi Rusta do jądra Linuksa i podał techniczne powody wprowadzenia Rusta w celu zwalczania problemów wynikających z błędów pamięci. Google wierzy, że Rust jest gotowy, aby dołączyć do C jako języka do tworzenia komponentów jądra Linuksa. W artykule podano także przykłady wykorzystania języka Rust do tworzenia sterowników jądra, w kontekście ich wykorzystania na platformie Android (Rust jest uznawany za oficjalnie wspierany język do programowania Androida).

Należy zauważyć, że Google przygotował wstępny prototyp sterownika napisanego w języku Rust dla mechanizmu komunikacji międzyprocesowej Binder, który pozwoli na szczegółowe porównanie wydajności i bezpieczeństwa implementacji Bindera w języku C i Rust. W obecnej formie praca nie jest jeszcze ukończona, ale dla prawie wszystkich podstawowych abstrakcji funkcjonalności jądra niezbędnych do działania Bindera przygotowano warstwy umożliwiające wykorzystanie tych abstrakcji w kodzie Rusta.

Źródło: opennet.ru

Dodaj komentarz