Bionic (Software)
Bionic ist eine Programmbibliothek des Android-Betriebssystems, die den Funktionsumfang der C-Standard-Bibliothek, der Bibliothek für mathematische Funktionen libm, der Bibliothek zum dynamischen Linken libdl und weiteren Funktionsumfang bereitstellt. Bionic unterliegt der BSD-Lizenz und wird von der Open Handset Alliance weiterentwickelt.
Bionic | |
---|---|
Basisdaten | |
Entwickler | Open Handset Alliance |
Erscheinungsjahr | 2008 |
Aktuelle Version | 1.0.14[1] (12. Juli 2019) |
Betriebssystem | Android |
Programmiersprache | C, C++, Assemblersprache |
Kategorie | Standardbibliothek |
Lizenz | BSD-Lizenz |
android.googlesource.com/platform/bionic/ |
Der Name Bionic ist eine Anspielung auf den heterogenen Ursprung des genutzten Quellcodes.[2]
Entwicklungsziele
Mit Bionic sollte eine einfache, effiziente, BSD-lizenzierte C-Bibliothek für das Android-System erstellt werden. Das Entwicklungs-Motto lautete keep it really simple.[2] Android-Systeme sind häufig batteriebetrieben, verfügten über wenig Haupt- und Massenspeicher und nutzten niedrig getaktete Prozessoren.
Durch die BSD-Lizenzierung entfallen Copyleft-Restriktionen, dadurch vereinfacht sich die Entwicklung proprietärer Bestandteile des Android-Systems.
Populäre, häufig genutzte Erweiterungen der GNU-C-Bibliothek, sowie der BSD-C-Bibliotheken wurden in Bionic übernommen.
Als Betriebssystem-Kern ist ausschließlich Linux vorgesehen, eine Binär-Kompatibilität beispielsweise mit der GNU-C-Bibliothek ist nicht vorgesehen.
Unterschiede zu POSIX
Ziel der Entwicklung von Bionic war eine weitgehende Kompatibilität zu POSIX und dem C11-Standard der Programmiersprache C.
In der Android-Version Oreo aus dem Jahr 2018 sind dennoch etwa 70 POSIX-Funktionen der libc nicht enthalten. Ursache für dieses Auslassen von Funktionen ist u. a., dass bestimmte Funktionalität in Android nicht genutzt werden, so nutzt Android beispielsweise keine passwd- und group-Datenbanken, wodurch Zugriffsfunktionen wie getpwent
nicht implementierbar sind und nicht benötigt werden.[2]
Einige Funktionalitäten wurde absichtlich nicht POSIX-konform gestaltet, so wurde etwa auf Unterstützung des printf-Formats %n
aus Sicherheitserwägungen verzichtet.[3]
Unterstützte Plattformen
Es werden die Plattformen x86, x86-64, Armv7-a und ARM64 unterstützt. Bis zum Android Native Development Kit (NDK) r17 wurde ARMv5, MIPS und MIPS64 unterstützt.[4] Eine experimentelle SH-4 Unterstützung wurde kommerziell nie eingesetzt und ist inzwischen eingestellt.
Bestandteile
Teile der libc wie etwa stdio stammen aus OpenBSD, der DNS-Resolver aus NetBSD, der Quellcode der libm für mathematische Funktionen entspricht in weiten Teilen der FreeBSD-Version, wurde aber von mehreren System-on-a-Chip-Herstellern durch Assembler-Implementierungen optimiert.[2]
Die Header-Dateien zum Zugriff auf Linux-Systemaufrufe werden automatisch aus den Header-Dateien des Linux-Quellcodes generiert, sämtlicher als Copyright-relevant angesehener Inhalt wird bei der Generierung entfernt.[2]
Die Unterstützung für POSIX-Threads (libpthread) sowie die Implementierung zum dynamischen Linken (libdl) wurden vollständig neu entwickelt.
Funktionalitäten, die auf POSIX-Systemen in den Bibliotheken libpthread, libresolv und librt bereitgestellt werden, sind bei Bionic direkt in der libc implementiert.
Weblinks
Referenzen
- Release 1.0.14. 12. Juli 2019 (abgerufen am 12. Juli 2019).
- The Android Open Source Project: Bionic C Library Overview. 3. März 2009, abgerufen am 6. Dezember 2018.
- Elliott Hughes: libc: #define to remove support for %n from printf(3)? 2. Mai 2014, abgerufen am 5. Dezember 2018 (englisch).
- NDK Revision History. Abgerufen am 6. Dezember 2018 (englisch).