Josh Triplett, pracujący w firmie Intel i członek komitetu zajmującego się rozwojem Crates.io, w swoim wystąpieniu na konferencji Open Source Technology Summit grupy roboczej, której celem jest doprowadzenie języka Rust do parytetu z językiem C w dziedzinie programowania systemowego.
W grupie roboczej, która jest w trakcie tworzenia, programiści Rust wspólnie z inżynierami firmy Intel przygotują specyfikacje definiujące funkcjonalności, które należy zaimplementować w Rust dla programowania systemowego. Programowanie systemowe często wymaga niskopoziomowych manipulacji, takich jak wykonywanie uprzywilejowanych instrukcji procesora i uzyskiwanie szczegółowych informacji o stanie procesora. Spośród już rozwijanych dla Rust podobnych możliwości, można wymienić wsparcie dla struktur bez nazw, unii (union), wstawek assemblerowych (makro „asm!”) oraz formatu liczb zmiennoprzecinkowych BFLOAT16.
Josh uważa, że przyszłość programowania systemowego należy do Rust, a język C w dzisiejszych realiach konkuruje o miejsce, które w przeszłości zajmował Assembler. Rust
nie tylko eliminuje problemy związane z niskopoziomowym zarządzaniem pamięcią typowe dla języka C, ale także umożliwia stosowanie nowoczesnych paradygmatów programowania.
W trakcie wystąpienia
Josha pojawiła się idea dodania do jądra Linux możliwości tworzenia sterowników w języku Rust, co pozwoli na łatwe tworzenie bezpiecznych i wyższej jakości sterowników, uwolnionych od problemów, takich jak dostęp do pamięci po jej zwolnieniu, dereferencja wskaźników zerowych i przekroczenie granic bufora.
Greg Kroah-Hartman, odpowiedzialny za wsparcie stabilnej gałęzi jądra Linux, wyraził gotowość dodania do jądra frameworka do tworzenia sterowników w języku Rust, jeśli będzie on miał rzeczywiste korzyści w porównaniu do C, na przykład będzie zapewniał bezpieczne opakowania nad API jądra. Ponadto Greg traktuje ten framework jako opcję, która nie jest aktywna domyślnie, aby nie włączać Rust do zależności budowlanych jądra.
Okazało się, że kilka zespołów już pracuje w tym kierunku. Na przykład 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.
Równolegle kolejny projekt, skoncentrowany na opracowywaniu sterowników dla systemów wbudowanych i urządzeń Internetu Rzeczy, który także wykorzystuje bindgen do generowania warstw na podstawie plików nagłówkowych jądra. Framework pozwala na zwiększenie bezpieczeństwa sterowników bez wprowadzania zmian do jądra — zamiast tworzenia dodatkowych poziomów izolacji dla sterowników w jądrze, proponuje się blokowanie problemów na etapie kompilacji, stosując bezpieczniejszy język Rust. Zakłada się, że takie podejście może być poszukiwane przez producentów sprzętu, opracowujących proprietary sterowniki na szybko bez przeprowadzania odpowiedniego audytu.
Nie wszystkie zamierzone funkcjonalności są jeszcze zrealizowane, ale framework jest już całkowicie gotowy do pracy i został użyty do napisania działającego sterownika dla kontrolera Ethernet LAN9512 USB, dostarczanego na płycie Raspberry Pi 3. Jako wzorcowa realizacja przy pisaniu sterownika w Rust wykorzystano istniejący sterownik smsc95xx, napisany w języku C. Zauważa się, że rozmiar modułu i narzuty wynikające z komponentów runtime przy opracowywaniu sterownika w Rust są nieznaczne, co pozwala na stosowanie frameworka w urządzeniach z ograniczonymi zasobami.
Źródło: opennet.ru
