Nowy język do niskopoziomowego kodu Androida.
Google promuje język Rust zamiast C i C++ głównie z jednego powodu – chce doprowadzić do mniejszej liczby błędów bezpieczeństwa pamięci.
Chodzi o bezpieczeństwo
W zeszłym miesiącu widzieliśmy pierwsze małe kroki w kierunku przyjęcia Rusta do jądra Linuksa. Google najwyraźniej myślało w ten sam sposób jak deweloperzy kernela bo we wtorkowym wpisie na blogu firma ogłosiła, że projekt Android Open Source oparty jest teraz o Rust – przynajmniej w zakresie niskopoziomowych komponentów tego systemu operacyjnego.
Zespół Androida wkłada rzeczywiście sporo pracy wypychając Kotlina i Javę do roli języka dla programistów aplikacji. Oba te języki opierają się na Android Runtime (ART), bez którego nie mają racji bytu. W Javie nie da się napisać niczego na niższym poziomie niż ART, ponieważ po prostu nie byłoby dla takiego kodu środowiska wykonawczego, w którym można by go uruchomić. W przeszłości Google zazwyczaj używał C lub C++, ale żaden z nich nie jest językiem zarządzającym pamięcią, co czyni Androida podatnym na wycieki pamięci i przepełnienia bufora.
Zalety Rusta
Google przedstawiło zalety stosowania Rusta w porównaniu z C i C++, twierdząc, że:
Rust daje gwarancję bezpieczeństwa pamięci, używając kombinacji dwóch rodzajów kontroli: kontroli na etapie kompilacji kodu (w celu zapewnienia prawidłowego życia obiektu) i kontroli w czasie wykonywania kodu. Ma to na celu zapewnienie, że dostęp do pamięci jest udzielany w prawidłowy sposób. Bezpieczeństwo jest osiągane przy jednoczesnym zapewnieniu wydajności porównywalnej z C i C++.
Poczytaj o tym więcej u nas.
Poglądy forsowane przez Google wydają się zbieżne ze statystykami opublikowanymi przez Microsoft. Zdaniem Google błędy bezpieczeństwa pamięci nadal są głównym źródłem problemów ze stabilnością i nadal stanowią około 70% poważnych luk w zabezpieczeniach Androida.
Migracja starego kodu na Rusta jest niemożliwa
Google twierdzi, że przepisanie dziesiątek milionów wierszy istniejącego kodu C i C++ w Rust jest po prostu niewykonalne, ale też i przepisanie starego kodu Androida nie będzie miało już większego znaczenia bo większość błędów została już usunięta. Ponieważ kod źródłowy Androida jest projektem open source z miliardami użytkowników, jest też sprawdzany i monitorowany przez bardzo dużą liczbę osób. Google twierdzi, że większość naszych błędów pamięci występuje w nowym lub niedawno zmodyfikowanym kodzie, a około 50% z nich ma mniej niż rok. W razie potrzeby Rust będzie używany do pisania nowych komponentów, co powinno pomóc zredukować ryzyko występowania nowych błędów pamięci, które Google mógłby wprowadzić w przyszłości.
Sprawdź oferty pracy na TeamQuest
Blog Google podsumował temat taką zapowiedzią:
Przez ostatnie 18 miesięcy dodawaliśmy obsługę Rusta do projektu Android Open Source i mamy kilka projektów na etapie early adopters. Będziemy się nimi dzielić z Wami w nadchodzących miesiącach. System operacyjny to projekt wieloletni. Bądź na bieżąco, będziemy publikować więcej aktualizacji na naszym blogu.
Rust w Linuksie
Jeszcze w 2020 roku na konferencji Linux Plumbers programiści kernela zaczęli poważnie omawiać pomysł wykorzystania języka Rust w jądrze. Tu też nie chodziło o całkowite, od podstaw przepisanie jądra w Rust - po prostu na dodaniu nowego kodu, napisanego w Rust.
Torvalds wcale nie wydawał się wtedy przerażony tym pomysłem a ostatnio powiedział:
Interesuje mnie ten projekt, myślę, że jest on napędzany przez ludzi, którzy są bardzo podekscytowani Rustem. Chcę zobaczyć, jak to faktycznie skończy się w praktyce.
Wydaje się, że zarówno Microsoft, Google jak i społeczność Linuksa zgadzają się, że dwie trzecie lub nawet więcej luk w zabezpieczeniach wynika z problemów z bezpieczeństwem pamięci. Wraz ze wzrostem złożoności oprogramowania będzie to miało coraz większe znaczenie.