A Google Rust nyelven írja és írja át az Android egyes részeit, hogy javítsa az operációs rendszer egészének biztonságát a C és C++ között. Olvasson tovább, ha többet szeretne megtudni!
Az Android, mint teljes operációs rendszer-megoldás, sok mozgó alkatrészt tartalmaz. Nagy vonalakban ezek a részek az alkalmazásökoszisztéma, majd maga az operációs rendszer. Fejlesztőként a választott programozási nyelv attól függően változik, hogy az Android melyik részén dolgozik. Az alkalmazásfejlesztők számára a Java és a Kotlin népszerű lehetőségek. Az operációs rendszeren és annak alsóbb szintjein dolgozó fejlesztők számára eddig a C és a C++ volt a népszerű választás. Ma a Google egy harmadik opcióval bővíti az operációs rendszer fejlesztőit, mivel az Android Open Source Project már támogatja a Rust programozási nyelvet magának az operációs rendszernek a fejlesztéséhez.
A C és C++ korlátai
Az Android operációs rendszer alacsonyabb szintjei olyan rendszerprogramozási nyelveket igényelnek, mint a C és a C++. Ezek a nyelvek irányítást és kiszámíthatóságot biztosítanak a fejlesztőknek, ami fontos az alacsony szintű rendszererőforrásokhoz és hardverekhez való hozzáféréskor.
Sajnos a C és a C++ nem nyújt memóriabiztonsági garanciákat, így hajlamosak a hibákra és a biztonsági résekre. A fejlesztő felelős a memória élettartamának kezeléséért ezeken a nyelveken, de összetett és többszálú kódbázisokban ezt könnyebb mondani, mint megtenni.
A C és a C++ együtt több tízmillió kódsort alkot az Android platformon. Ezek a memóriabiztonsági hibák a kódhibák legnehezebben kezelhető forrásaivá válnak, amelyek az Android súlyos biztonsági réseinek körülbelül 70%-át jelentik. E hibák puszta kijavítása nem elegendő a probléma kezeléséhez, és jobb megközelítés lenne, ha először megelőznénk őket.
A memória biztonságának hiánya arra kényszeríti a fejlesztőket, hogy az Android-folyamatokat szigorúan korlátozott és kiváltságtalan homokozókban futtassák. A homokozók azonban drágák az erőforrások tekintetében, többletköltséget emésztenek fel, és késleltetést vezetnek be. A sandboxing nem szünteti meg teljesen a kód sebezhetőségeit, és a hatékonysága csökken a nagy hibasűrűség miatt, így a támadók több sebezhetőséget is összeláncolhatnak.
Egy másik korlátozás, bár nem egyedi a C és C++ esetében, de minden memóriabiztonsági kérdésre érvényes, az, hogy a hibás állapotot ténylegesen a műszeres kódban kell kiváltani ahhoz, hogy észlelni lehessen. Tehát még akkor is, ha a kódod kiválóan tesztelt, a tényleges hiba észrevétlen maradhat. Ha pedig hibákat találnak, azok kijavítása egy másik feladat, amely hosszú és költséges folyamatot foglal magában, amely nem mindig vezet megfelelő javításhoz. Így a hibaészlelés megbízhatatlanná válik, és ezeknek a korlátozásoknak a fényében a hibamegelőzés a jobb megközelítés.
Itt jön képbe a váltás egy olyan memóriabiztos nyelvre, mint a Rust.
Rozsda és előnyei
A Rust memóriabiztonsági garanciákat nyújt a fordítási idejű ellenőrzések kombinációjával az objektum élettartamának/tulajdonjogának érvényesítésére, valamint a futásidejű ellenőrzések kombinációjával, amelyek biztosítják a memória-hozzáférések érvényességét. Ezt a biztonságot úgy érik el, hogy a C és C++ teljesítményével egyenértékű teljesítményt nyújtanak. A rozsda emellett csökkenti a sandbox használatának szükségességét, így a fejlesztők több szabad helyet biztosítanak a biztonságosabb és erőforrás-takarékosabb új funkciók bevezetéséhez.
Noha a Rustnak valóban megvannak az előnyei, nem lehetséges egyik napról a másikra a teljes Android operációs rendszert Rust-ra váltani. És erre talán nincs is szükség, mivel az Android memóriahibáinak nagy része új vagy nemrégiben módosított kódban fordul elő, körülbelül 50%-uk egy évnél fiatalabb. A Google úgy véli, hogy a memóriabiztos nyelvi erőfeszítései a legjobban az új fejlesztésekre összpontosítanak, nem pedig a kiforrott C és C++ kódok újraírására.
A Rust a hibák megelőzésére is összpontosít, nem pedig a hibák észlelésére, ami javítja a kód helyességét. Számos kulcsfontosságú tulajdonsággal rendelkezik, mint például a memória biztonsága, az adatok egyidejűsége, kifejezőbb típusú rendszerek, megváltoztathatatlan alapértelmezés szerint hivatkozások és változók, biztonságosabb egész számok kezelése, jobb hibakezelés a szabványos könyvtárakban és sok minden több.
Mit jelent a Rust-ra váltás az Android számára?
A Google azt állítja, hogy az elmúlt 18 hónapban hozzáadta a Rust támogatást az Android nyílt forráskódú projekthez. De egy új nyelv hozzáadása az Android platformhoz óriási vállalkozás. Néhány eszközláncot és függőséget karban kell tartani, frissíteni kell a tesztinfrastruktúrát és az eszközöket, valamint ki kell képezni a fejlesztőket.
A Google-nak van néhány korai alkalmazói projektje, amelyeket a következő hónapokban megosztanak. De még így is világossá válik, hogy a Rust-támogatás skálázása több operációs rendszerre többéves projekt.
A látottak alapján a Google néhány helyen már használja a Rust-ot. Az Android új Bluetooth-veremének újraírása kódnéven "Gabeldorsche" írják Rust nyelven. A Gabeldorschén az Android 11 idején kezdődött a munka, de még mindig nincs használatban. Androidos Kulcstár 2.0 A modul Rust nyelven íródott, és a binder, az Android IPC-illesztőprogramjának userspace része is. Bár nem kapcsolódik az Androidhoz, Fuksziaúj netstack Rust nyelven is írják.
Az alkalmazásfejlesztők számára a váltás semmit sem változtat azon, hogy Ön, mint alkalmazásfejlesztő hogyan ír alkalmazásokat, vagy hogyan működik a keretrendszer API-k. Ez a kapcsoló csak az operációs rendszer írásmódját érinti. Az Android Developer Relations csapatának egyik tagja szerint, a Google jelenleg sem tervez Rust NDK kiadását. Az alkalmazásfejlesztés támogatott nyelvei továbbra is a Kotlin, a Java, a C és a C++.