Bionic (software)
# Bionic (software)

Bionic es una bifurcación de la biblioteca estándar de C de BSD (también conocida como libc) desarrollado por Google para su sistema operativo Android.

## Descripción

Los objetivos que se presentaron inicialmente para Bionic fueron las siguientes:

* La Licencia BSD es una licencia sin copyleft y Google quiso aislar las aplicaciones Android de los efectos tanto de la GPL como de la LGPL:
   * Android se basa en el kernel de Linux, que está sujeto a la Licencia Pública General de GNU (GPL) versión 2.
   * Las bibliotecas C estándar más difundido para los núcleos Linux son las biblioteca C de GNU (glibc) y uClibc, ambos sujetos a la Licencia Pública General de GNU (LGPL); en contraste con la GPL, la LGPL permite explícitamente la vinculación dinámica pero no permite la vinculación estática del software propietario.
* Tamaño pequeño: Bionic es mucho menor que la biblioteca GNU C (glibc) y algo menor que uClibc. Más importante es que los requerimientos de memoria son (y permanecen) inferiores.
* Velocidad: Bionic está diseñado para CPUs con frecuencias de reloj relativamente bajas.

La forma recomendada de utilizar Bionic es con el kit de desarrollo de Android nativo (NDK).

## Características y limitaciones

Bionic tiene varias restricciones en comparación con glibc, a menudo derivados del hecho de que Bionic. es una biblioteca diseñada específicamente para Android

Algunas de las limitaciones son:

* Bionic. no incluye el manejo de excepciones de C++, probablemente porque como las aplicaciones de Android se programan principalmente en Java, las excepciones se tratan directamente ahí.
* Bionic no incluye la biblioteca de plantillas estándar (STL), y los desarrolladores deben incluirla de forma manual si lo necesitan.
* Bionic no incluye soporte a caracteres ampliados.
* Algunas funciones dentro de Bionic POSIX y cabeceras del sistema de llamadas son Stubs o wrappers para el comportamiento específico de Android, provocando un comportamiento no deseado en algunos casos.
* A partir de Android Jelly Bean MR1 (4.2), los builds de Bionic empleados en Android incluyen soporte para FORTIFY_SOURCE de glibc, que es una característica con la que funciones no seguras de memoria y de manejo de cadenas de caracteres (como strcpy strcat y memcpy) realizan controles para evitar desbordamientos de búfer cuando el tamaño de búfer se pueden determinar en tiempo de compilación. Esta función sólo está disponible para las aplicaciones compiladas con gcc para procesadores ARM.
