Bionic (Software)
# 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.
Der Name Bionic ist eine Anspielung auf den heterogenen Ursprung des genutzten Quellcodes.

## 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. 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.
Einige Funktionalitäten wurde absichtlich nicht POSIX-konform gestaltet, so wurde etwa auf Unterstützung des printf-Formats %n aus Sicherheitserwägungen verzichtet.

## 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. 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.
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.
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.