Na konferencji, która odbywa się w tych dniach Linux Podczas konferencji Plumbers 2022 inżynier Western Digital przedstawił raport na temat rozwoju eksperymentalnego sterownika na poziomie jądra dla dysków SSD NVM-Express (NVMe) napisanego w języku Rust. LinuxMimo że projekt jest jeszcze w początkowej fazie rozwoju, testy wykazały, że wydajność sterownika NVMe opartego na języku Rust jest porównywalna ze sterownikiem NVMe wbudowanym w jądro systemu i napisanym w języku C.


W raporcie stwierdza się, że obecny sterownik NVMe w języku C jest całkowicie zadowalający dla programistów, ale podsystem NVMe jest dobrą platformą do badania wykonalności opracowania sterowników w języku Rust, ponieważ jest dość prosty, szeroko stosowany, ma wysokie wymagania wydajnościowe i ma sprawdzona implementacja referencyjna do porównania i obsługuje różne interfejsy (dev, pci, dma, blk-mq, gendisk, sysfs).
Należy zauważyć, że sterownik PCI NVMe dla Rusta zapewnia już funkcjonalność niezbędną do działania, ale nie jest jeszcze gotowy do powszechnego użytku, ponieważ wymaga indywidualnych ulepszeń. Plany na przyszłość obejmują pozbycie się kodu z istniejących niebezpiecznych bloków, obsługę operacji usuwania urządzeń i wyładowywania sterowników, obsługę interfejsu sysfs, implementację leniwej inicjalizacji, utworzenie sterownika dla blk-mq i eksperymentowanie z użyciem asynchronicznego modelu programowania dla kolejki_rq.

Dodatkowo możemy odnotować eksperymenty prowadzone przez Grupę NCC w celu opracowania sterowników w języku Rust dla jądra FreeBSD. Jako przykład szczegółowo przeanalizujemy prosty sterownik echa, który zwraca dane zapisane do pliku /dev/rustmodule. W kolejnej fazie eksperymentów Grupa NCC rozważa możliwość przerobienia podstawowych komponentów jądra w języku Rust w celu poprawy bezpieczeństwa operacji sieciowych i plikowych.
Chociaż możliwość tworzenia prostych modułów w Ruście została zademonstrowana, ściślejsza integracja Rusta z kernelem FreeBSD będzie wymagała dodatkowych nakładów pracy. Na przykład, wspomniano o potrzebie stworzenia zestawu warstw abstrakcji dla podsystemów i struktur kernela, podobnych do frameworków opracowanych przez Rusta dla projektu. LinuxW przyszłości planujemy przeprowadzić podobne eksperymenty z rdzeniem Illumos i zidentyfikować wspólne abstrakcje w języku Rust, które można by wykorzystać w sterownikach napisanych w języku Rust. Linux, BSD i Illumos.
Według Microsoft i Google około 70% luk w zabezpieczeniach ich oprogramowania wynika z niebezpiecznej obsługi pamięci. Oczekuje się, że zastosowanie języka Rust zmniejszy ryzyko wystąpienia podatności spowodowanych niebezpieczną pracą z pamięcią oraz wyeliminuje występowanie błędów, takich jak dostęp do obszaru pamięci po jej zwolnieniu i przepełnienie bufora.
Bezpieczna obsługa pamięci w Rust jest zapewniona w czasie kompilacji poprzez sprawdzanie referencji, śledzenie własności obiektu i czasu życia obiektu (zakres), a także poprzez ocenę poprawności dostępu do pamięci podczas wykonywania kodu. Rust zapewnia również ochronę przed przepełnieniami liczb całkowitych, wymaga obowiązkowej inicjalizacji wartości zmiennych przed użyciem, lepiej radzi sobie z błędami w standardowej bibliotece, domyślnie stosuje koncepcję niezmiennych odniesień i zmiennych, oferuje silne typowanie statyczne w celu zminimalizowania błędów logicznych.
Źródło: opennet.ru
