Na trwającej właśnie konferencji Maintainers Summit omówiono wyniki eksperymentu dotyczącego dodania do jądra Linux możliwości rozwijania komponentów w języku Rust. Uczestnicy uznali eksperyment za udany i postanowili przenieść wsparcie dla języka Rust do kategorii podstawowych funkcji jądra, znosząc jego status funkcjonalności eksperymentalnej.
Trzy lata temu możliwość rozwijania sterowników i modułów w języku Rust została dodana do jądra 6.1. Od tego czasu do składu jądra włączono abstrakcje do rozwijania sterowników w Rust dla GPU, systemów plików, urządzeń blokowych, adapterów sieciowych oraz urządzeń USB. W języku Rust rozwijany jest sterownik Nova dla GPU NVIDIA, asahi dla GPU Apple AGX, Tyr dla GPU ARM Mali, rust_ext2 dla systemu plików Ext2. W skład jądra przyjęto implementację IPC Binder napisaną w Rust. Projekt RROS rozwija system podsystemów czasu rzeczywistego dla jądra Linux, napisany w Rust. Wsparcie dla Rust nie jest domyślnie aktywne i nie powoduje włączenia Rust do listy obowiązkowych zależności budowlanych jądra.
Zdaniem zwolenników promowania Rust, ten język eliminuje większość błędów, które występują w jądrze i są spowodowane cechami języka C (corner case), co pozwala podczas przeglądów skupić się na błędach logicznych i stanach wyścigu. Rust pomaga uniknąć problemów takich jak dostęp do pamięci po jej zwolnieniu, wyjście poza granice bufora, nieprawidłowe zwalnianie zasobów podczas obsługi błędów oraz zapomniane sprawdzanie zwracanych kodów błędów. Zastosowanie Rust do nowego kodu pozwala również skrócić czas rozwijania, dzięki zmniejszeniu nakładów pracy na debugowanie oraz istnieniu w języku surowych gwarancji wykrywających błędy na wczesnym etapie pisania kodu.
Przeciwnicy wprowadzenia Rust do jądra uważają, że stosowanie kilku języków programowania w złożonych projektach jest niedopuszczalne — mieszane bazy kodu komplikują pracę maintainerów, gdyż stawiają ich w zależności od kodu napisanego w innym języku. Na przykład, gdy istnieją powłoki w Rust, programiści subsystemów napisanych w C muszą uwzględniać wpływ zmian na dalszą funkcjonalność tych powłok.
Źródło: opennet.ru
