\subsection{Bionic}

\begin{frame}
  \frametitle{Whole Android Stack}
  \begin{center}
    \includegraphics[height=0.85\textheight]{slides/android-native-layer-bionic/android-stack-bionic.pdf}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Bionic 1/2}
  \begin{itemize}
  \item Google developed another C library for Android:
    \code{Bionic}. They didn't start from scratch however, they
    based their work on the BSD standard C library.
  \item The most remarkable thing about Bionic is that it doesn't have
    full support for the POSIX API, so it might be a hurdle when porting an
    already developed program to Android.
  \item Among other things, are lacking:
    \begin{itemize}
    \item Full pthreads API
    \item No locales and wide chars support
    \item No \code{openpty()}, \code{syslog()}, \code{crypt()}, functions
    \item Removed dependency on the \code{/etc/resolv.conf} and
      \code{/etc/passwd} files and using Android's own mechanisms instead
    \item Some functions are still unimplemented (see
      \code{getprotobyname()}
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Bionic 2/2}
  \begin{itemize}
  \item However, Bionic has been created this way for a number of
    reasons
    \begin{itemize}
    \item Keep the libc implementation as simple as possible, so that
      it can be fast and lightweight (Bionic is a bit smaller than
      uClibc)
    \item Keep the (L)GPL code out of the user space. Bionic is under
      the BSD license
    \end{itemize}
  \item And it implements some Android-specifics functions as well:
    \begin{itemize}
    \item Access to system properties
    \item Logging events in the system logs
    \end{itemize}
  \item In the \code{prebuilt/} directory, Google provides a prebuilt toolchain
    that uses Bionic
  \item See
    \url{http://androidxref.com/4.0.4/xref/ndk/docs/system/libc/OVERVIEW.html}
    for details about Bionic.
  \end{itemize}
\end{frame}
