Programmiersprache: Android springt auf den Rust-Zug auf
Das Android Open Source Project öffnet sich zum Entwickeln des Betriebssystems mit der Programmiersprache Rust.
Google hat das Android Open Source Project (AOSP) für Rust geöffnet. Damit kann die ursprünglich von Mozilla entworfene Programmiersprache künftig für Android zum Einsatz kommen – und zwar zum Entwickeln des Betriebssystems selbst. Bei der App-Entwicklung stehen weiterhin vor allem Kotlin und Java im Fokus.
Die Hauptmotivation für den Einsatz von Rust ist die erhöhte Sicherheit bei Speicherzugriffen. Rust setzt von Haus aus auf Memory Safety und vermeidet im Gegensatz zu C oder C++ typische Fehler, die zu Sicherheitslücken führen können. Laut dem Google-Security-Blog sind Memory-Safety-Bugs für rund 70 Prozent der kritischen Schwachstellen in Android verantwortlich.
In guter Gesellschaft
Google nutzt zwar auch im Betriebssystem teilweise Java, das sich wie Kotlin um das Speichermanagement kĂĽmmert. FĂĽr die unteren Ebenen des Betriebssystems sind allerdings schon aus PerformancegrĂĽnden systemnahe Sprachen erforderlich, und bei Android kommen bisher C beziehungsweise C++ zum Einsatz.
Entwicklerinnen und Entwickler müssen sich dabei um die Zuweisung von Speicher kümmern, was zu Fehlern einlädt. Rust bietet Konzepte, die solche Bugs von vornherein verhindern oder beim Kompilieren entdecken. Hinzu kommen Überprüfungen zur Laufzeit, ob Speicherzugriffe erlaubt sind.
Diese Konzepte sind nicht nur für Googles Betriebssystem reizvoll: Die Linux-Community diskutiert seit geraumer Zeit über den Einsatz von Rust und hat im Juli 2020 die Pläne konkretisiert. Microsoft experimentiert ebenfalls an einigen Stellen mit der Programmiersprache und hat im Mai 2020 eine Preview von Rust/WinRT vorgestellt. Googles Betriebssystem Fuchsia bietet zwar von Haus aus eine Schnittstelle zur Programmierung mit Rust, aber der Zircon-Kernel setzt weiterhin auf C/C++.
Seit Februar kĂĽmmert sich mit der Rust Foundation eine eigene Stiftung um die Programmiersprache.
Raus aus der Sandbox der Zweierregel
Google folgt bei der Android-Entwicklung der sogenannten "Rule of 2": Von den folgenden drei unsicheren Optionen dürfen höchstens zwei greifen:
- Code, der nicht vertrauenswĂĽrdige Eingaben verarbeitet,
- Code, der nicht in einer abgesicherten Sandbox läuft und
- Code, der in einer unsicheren Sprache (C/C++) geschrieben ist.
Das bedeutet bisher für das in C und C++ geschriebene Android-Betriebssystem, dass jeder Code in einer Sandbox laufen muss, wenn er nicht vertrauenswürdigen Input verarbeitet. Der Prozess ist mit einem Overhead verbunden, der zu Performanceeinbußen und höherem Speicherbedarf führt. Außerdem isoliert das Verfahren zwar Fehler, vermeidet sie aber nicht vollständig, zumal sich mehrere Schwachstellen für Angriffe kombinieren lassen und so Sicherheitsvorgaben aushebeln können.
Kurswechsel statt Komplettsanierung
Laut eigenen Angaben hat Google AOSP bereits seit eineinhalb Jahren auf Rust vorbereitet, und es existieren wohl bereits erste Early-Adopter-Projekte, über die der Internetriese in den nächsten Monaten genauer berichten will. Die Ausweitung auf weitere Teile des Betriebssystems ist als mehrjähriges Projekt ausgelegt. Neben der Anpassung von Dependencies, Toolchains und weiteren Werkzeugen unter anderem für die Testinfrastruktur, gilt es Entwicklerinnen und Entwickler entsprechend zu schulen.
Ein komplettes Umschreiben des Betriebssystems steht nicht an. "Eine Codebasis umzuschreiben, die mehrere Zehnmillionen Codezeilen umfasst, ist schlicht unmöglich", vermerkt der Blogbeitrag zur Einführung von Rust. Über 50 Prozent der Memory-Safety-Bugs sind nach Googles eigenen Untersuchungen weniger als ein Jahr alt. Daher sei der alte Code weniger renovierungsbedürftig als der aktiv entwickelte. Als Grund macht der Beitrag aus, dass der ältere Code nicht weiterentwickelt, wohl aber gewartet wird. Damit ziehen keine neuen Fehler ein, aber das Team behebt regelmäßig gefundene Bugs.
Weitere Details zu den Plänen, Rust für AOSP zu nutzen, finden sich in Googles Security-Blog.
(rme)