Bionic (Software)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Bionic
Basisdaten

Entwickler Open Handset Alliance
Erscheinungsjahr 2008
Aktuelle Version 1.0.14[1]
(12. Juli 2019)
Betriebssystem Android
Programmier­sprache C, C++, Assemblersprache
Kategorie Standardbibliothek
Lizenz BSD-Lizenz
android.googlesource.com/platform/bionic/

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.

Der Name Bionic ist eine Anspielung auf den heterogenen Ursprung des genutzten Quellcodes.[2]

Entwicklungsziele

[Bearbeiten | Quelltext bearbeiten]

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

[Bearbeiten | Quelltext bearbeiten]

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

[Bearbeiten | Quelltext bearbeiten]

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.

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.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Release 1.0.14. 12. Juli 2019 (abgerufen am 12. Juli 2019).
  2. a b c d e The Android Open Source Project: Bionic C Library Overview. 3. März 2009, abgerufen am 6. Dezember 2018.
  3. Elliott Hughes: libc: #define to remove support for %n from printf(3)? 2. Mai 2014, abgerufen am 5. Dezember 2018 (englisch).
  4. NDK Revision History. Abgerufen am 6. Dezember 2018 (englisch).