It differs from the GNU C Library (glibc) in being designed for devices with less memory and processor power than a typical Linux system.
Some parts of the libc source, such as stdio, are from the BSDs (mainly OpenBSD), whereas others, such as the pthread implementation, were written from scratch.
In Android 11, the memory allocator for most devices was switched to Scudo, which sacrifices some of jemalloc's high performance for additional security hardening features.
The Android platform included a statically linked gdbserver, so that developers can use the latest gdb even on old devices.
For libpthread, there is no attempt to optimize for the single-threaded case because apps are in a multi-threaded environment even before the first instruction of third-party code is ever run.
Some functions deliberately do not conform to the POSIX or C standards for security reasons, such as printf which does not support the %n format string.
Many third-party developers still target older OS releases, which contributes to a widespread belief that Bionic lacks many features.
Because fortify relies on runtime support from libc, its portability to older Android releases is limited.
Historically, one of the shortcomings of fortify has been that it is closely tied with GCC, which makes it very difficult to support well in other compilers, like Clang.
This meant that when Android swapped to Clang as its default compiler,[14] Bionic's fortify implementation became substantially less useful.
Since this overhaul, some checks were added above and beyond glibc's to catch code that — while not necessarily causing undefined behavior — is obviously incorrect.
Because this new implementation requires no more libc support than the prior one, the Clang-specific enhancements are available to applications targeting versions of Android before Oreo.
To get rid of the GPL, Google claimed that it cleaned the header files from any copyright-able work, reducing them to non-copyrightable "facts".