Greg Kroah-Hartman, odpowiedzialny za wsparcie stabilnej gałęzi jądra Linux, opowiedział się za rozwijaniem nowych komponentów jądra w języku Rust. Jako osoba, przez którą przez ostatnie 15 lat przewija się cała informacja o błędach i lukach w jądra Linux, twierdzi, że większość błędów w jądrze wynika z szczególnych przypadków języka C (corner case), które są całkowicie wykluczone w kodzie napisanym w Rust.
Korzystając z Rust, będzie można zostawić w przeszłości takie problemy jak próba dostępu do pamięci po jej zwolnieniu, częściowe wyjście poza granice bufora, niewłaściwe zwolnienie zasobów podczas obsługi błędów i zapomniane kontrole zwracanych kodów błędów, co pozwoli konserwatorom skupić się na rzeczywistych błędach, takich jak stany wyścigowe i problemy z logiką, zamiast rozpraszać uwagę podczas przeglądów na drobiazgach.
Już istniejący stary kod w języku C nic nie zniknie, ale w przypadku nowego kodu i nowych sterowników wdrożenie Rust znacznie poprawi jakość. Wdrożenie Rust umożliwi również uporządkowanie wewnętrznych interfejsów programowania sterowników w taki sposób, że błędy związane z używaniem wewnętrznego API praktycznie zostaną wyeliminowane — w jądrze zgromadziło się zbyt wiele skomplikowanych i nieprzejrzystych API, co stwarza dużą presję na utrzymujących je w pracy, aby sprawdzić, czy te API są używane poprawnie. W procesie rozwijania powiązań Rust osoby zajmujące się utrzymywaniem zyskują możliwość przemyślenia i uporządkowania API, co przyniesie korzyści dla wszystkich, w tym dla użytkowników języka C.
Greg nie uważa, że Rust jest „srebrną kulą”, która rozwiąże wszystkie problemy w jądrze, ale ten język na pewno pomoże w wielu sytuacjach. Wsparcie dla Rust zaspokoi również potrzeby programistów sterowników, którzy mają nadzieję otrzymać narzędzie umożliwiające pisanie kodu dla ich sprzętu, eliminując wiele typów błędów. Jeśli chodzi o mieszanie kilku języków, Greg nie widzi w tym dużego problemu, w jego opinii, w przeszłości programiści jądra radzili sobie z bardziej wymagającymi zadaniami i nie ma powodu, by rezygnować z wprowadzania do jądra nowych dobrych pomysłów, które pomogą zapewnić sukces projektu na następne 20+ lat.
Do dyskusji dołączył również Kees Cook, były główny administrator systemu kernel.org i lider zespołu zabezpieczeń Ubuntu. Kees wyjaśnił, że nie chodzi o przepisywanie istniejącego kodu w jądrze, lecz o udostępnienie możliwości korzystania z Rust do tworzenia nowych sterowników i podsystemów. Zastosowanie Rust w nowym kodzie pozwoli nie tylko zmniejszyć liczbę błędów związanych z pamięcią, ale także skrócić czas rozwoju. Szybkość rozwoju wzrasta dzięki zmniejszeniu nakładów pracy na debugowanie oraz obecności w języku surowych gwarancji, które umożliwiają wykrywanie błędów na wczesnym etapie pisania kodu, jeszcze przed rozpoczęciem testowania produktu.
Skuteczność strategii użycia Rust do poprawy jakości nowego kodu została już udowodniona przez Google na platformie Android. Wykazano, że głównym źródłem problemów z bezpieczeństwem jest nowy kod i należy przede wszystkim skupić się na poprawie jego jakości. Dla starego kodu obserwuje się eksponencjalną zależność bezpieczeństwa od czasu (na przykład, 5-letni kod średnio ma 3,4 razy mniejszą gęstość podatności niż nowy kod).
Źródło: opennet.ru
