Linuxi tuuma koodibaasi, mille aluseks on 6.18 versioon, on vastu võetud Rusti keeles kirjutatud interprotsesside suhtluse mehhanismi Binder rakendus. Binderit kasutatakse Androidis protsessidevahelise suhtluse korraldamiseks ja kaugmeetodite kutsumiseks (üks Androidi protsess võib kutsuda teise Androidi protsessi meetodit või funktsiooni, kasutades Binderit, et tuvastada, kutsuda ja edastada argumente protsesside vahel). Bindi kood on kirjutatud Rusti keeles ümber, et tugevdada turvalisust, edendada turvalise programmeerimise praktikaid ja tõsta mäluhalduse probleemide tuvastamise efektiivsust Androidis (umbes 70% kõigist Androidis tuvastatud ohtlikest haavatavustest on põhjustatud mäluhaldusvigadest).
Rusti kasutamine lahendas mõned probleemid, millega Binderi arendajad silmitsi seisid, sealhulgas viidete arvu, lukustuste ja piirikontrolliga seotud vead, samuti vähendas vigade töötlemise keerukust. Rustis rakendatud Binder on funktsionaalsuselt sarnane algse C-keeles versiooniga, läbib kõik AOSP (Android Open-Source Project) testid ja seda saab kasutada töökeskkondade loomiseks Androidi tarkvarade jaoks. Hoolimata edasijõudnud omadustest ja keerulise omandi semantikaga objekti toetamisest on Rustil põhinev draiver väiksem kui C versioon — 5,5 versus 5,8 tuhat koodi rida.
Commit'i kirjelduses mainib autor järgmist motivatsiooni Binder'i ümberkirjutamiseks:
- Binder on arenenud juba 15 aastat ja selle aja jooksul on selle funktsionaalsus ja keerukus oluliselt suurenenud — projekt asub kõigi Androidi komponentide ristteel ja katab palju ülesandeid, mis ületavad IPC ulatust:
- korektne analüüs ja tehingu sisu ümberkujundamine, mis võivad sisaldada erinevate tüüpide objekte (näiteks viidatud, failide descriptorid), kes omavahel suheldes;
- voogude puul suuruse kontrollimine kasutajaruumis ning tehingute suunamine voogudele nii, et vältida rakenduste järjepanu ummistumist puu voogude lõppemise korral;
- objektide viidete loenduri jälgimine, mida jagavad mitu protsessi, edastades viiteteräkiste muudatused protsesside vahel korrektselt;
- mitme erineva veakäsitluse stsenaariumi töötlemine ning 13 erineva lukustuse, 7 viidete loenduri ja aatommuutuja ühendamine. Samuti tuleb ta neid ülesandeid täita võimalikult kiiresti ja täpselt.
- Vanas koodis on kogunenud märkimisväärne tehniline võlg, mis on raskendanud nii vigade leidmist kui ka edasist arendamist. Näiteks tuumosas on üsna suured funktsioonid, mis sisaldavad üle tuhande koodi rea, kahtlased veakäsitlusmeetodid ja segased struktuurid.
- Binder on Androidi jaoks kriitiliselt oluline turvakomponent, kuna platvormielemendid, mis töötavad isoleeritud liivakasti keskkondades, nagu Chrome'i renderdamisprotsess ja SW Codec, pääsevad sellele otse ligi. Binderi haavatavus võimaldab kõrvaldada isoleerituse. Kõrge keerukus koos tehnilise võlaga muudab Binderi kõrge turvalisuse taseme säilitamise äärmiselt keeruliseks.
Allikas: opennet.ru
