Google píše a přepisuje části Androidu v Rustu, aby zlepšil zabezpečení operačního systému jako celku, oproti C a C++. Čtěte dále a dozvíte se více!
Android jako kompletní řešení OS zahrnuje mnoho pohyblivých částí. Velmi obecně řečeno, tyto části jsou ekosystém aplikací a poté samotný OS. Jako vývojář se váš programovací jazyk liší v závislosti na tom, na jaké části Androidu pracujete. Pro vývojáře aplikací jsou populární možnosti Java a Kotlin. Pro vývojáře pracující na OS a jeho nižších úrovních byly C a C++ zatím populární volbou. Dnes Google přidává třetí možnost pro vývojáře OS, protože Android Open Source Project nyní podporuje programovací jazyk Rust pro vývoj samotného OS.
Omezení C a C++
Nižší úrovně operačního systému Android vyžadují systémové programovací jazyky jako C a C++. Tyto jazyky poskytují vývojářům kontrolu a předvídatelnost, což je důležité při přístupu k nízkoúrovňovým systémovým prostředkům a hardwaru.
C a C++ bohužel neposkytují záruky bezpečnosti paměti, takže jsou náchylné k chybám a zranitelnostem zabezpečení. Vývojář je zodpovědný za správu životnosti paměti v těchto jazycích, ale ve složitých a vícevláknových kódových základech se to snadněji řekne, než udělá.
C a C++ dohromady tvoří desítky milionů řádků kódu na platformě Android. Tyto chyby zabezpečení paměti se stávají nejobtížněji řešitelným zdrojem nesprávnosti kódu a představují ~70 % vysoce závažných bezpečnostních zranitelností systému Android. Pouhá oprava těchto chyb se stává nedostačující k řešení problému a lepším přístupem by bylo v první řadě jim předcházet.
Nedostatečná bezpečnost paměti nutí vývojáře spouštět procesy Android v přísně omezených a neprivilegovaných karanténách. Ale sandboxy jsou drahé na zdroje, spotřebovávají další režii a zavádějí latenci. Sandboxing také zcela neodstraňuje zranitelnosti kódu a jeho účinnost je snížena kvůli vysoké hustotě chyb, což dále umožňuje útočníkům řetězit více zranitelností.
Dalším omezením, i když není jedinečné pro C a C++, ale platí pro všechny problémy s bezpečností paměti, je to, že chybný stav musí být ve skutečnosti spuštěn v instrumentovaném kódu, aby mohl být detekován. Takže i když má váš kód vynikající testování, skutečná chyba může zůstat neodhalena. A když jsou nalezeny chyby, jejich oprava je další úkol, který zahrnuje dlouhý a nákladný proces, který nemusí vždy vést ke správné opravě. Detekce chyb se tak stává nespolehlivou a prevence chyb je lepší přístup, který je třeba vzít ve světle těchto omezení.
Zde přichází na řadu přechod na jazyk bezpečný pro paměť, jako je Rust.
Rez a její výhody
Rust poskytuje záruky bezpečnosti paměti pomocí kombinace kontrol v době kompilace k vynucení životnosti/vlastnictví objektu a kontrol za běhu, aby se zajistilo, že přístupy do paměti jsou platné. Této bezpečnosti je dosaženo při poskytování ekvivalentního výkonu jako v C a C++. Rust také snižuje potřebu sandboxingu, což umožňuje vývojářům více režijního prostoru pro zavádění nových funkcí, které jsou bezpečnější a lehčí na zdroje.
Přestože Rust skutečně má své výhody, není možné přes noc přepnout celý OS Android na Rust. A to možná ani nebude potřeba, protože většina chyb paměti Androidu se vyskytuje v novém nebo nedávno upraveném kódu, přičemž asi 50 % je mladších než rok. Google věří, že jeho úsilí o bezpečný jazyk se soustředí spíše na nový vývoj než na přepisování vyspělého kódu C a C++.
Rust se také zaměřuje na prevenci chyb, spíše než aby se silně opíral o detekci chyb, což má za následek zlepšenou správnost kódu. Má několik klíčových funkcí, jako je bezpečnost paměti, souběžnost dat, systémy výraznějšího typu, neměnné reference a proměnné ve výchozím nastavení, bezpečnější zpracování celých čísel, lepší zpracování chyb ve standardních knihovnách a mnoho dalšího více.
Co znamená přechod na Rust pro Android?
Google říká, že během posledních 18 měsíců přidává podporu Rust do projektu Android Open Source Project. Ale přidání nového jazyka na platformu Android je obrovský úkol. Je třeba udržovat některé toolchainy a závislosti, aktualizovat testovací infrastrukturu a nástroje a školit vývojáře.
Google má několik prvních projektů, které budou sdílet v nadcházejících měsících. Ale i tak se jasně ukazuje, že škálování podpory Rust na větší část OS je víceletý projekt.
Z toho, co vidíme, Google již Rust na několika místech používá. Přepis nového zásobníku Bluetooth pro Android s kódovým názvem "Gabeldorsche“ se píše v Rustu. Práce na Gabeldorsche začaly přibližně v době Androidu 11, ale stále se ještě nepoužívá. Android Úložiště klíčů 2.0 modul je napsán v Rustu a stejně tak i uživatelská část binderu, IPC ovladače pro Android. I když to nesouvisí s Androidem, Fuchsieje nový netstack se také píše v Rustu.
Pro vývojáře aplikací tento přepínač nemění nic na tom, jak jako vývojář aplikací píšete aplikace nebo jak fungují rozhraní API. Tento přepínač ovlivní pouze způsob zápisu operačního systému. Tvrdí to člen týmu Android Developer RelationsGoogle také v tuto chvíli neplánuje vydání Rust NDK. Podporovanými jazyky pro vývoj aplikací budou nadále Kotlin, Java, C a C++.