\subsection{C Libraries}
\begin{frame}
  \frametitle{glibc}
  \begin{columns}
    \column{0.7\textwidth}
    \begin{itemize}
    \item License: LGPL
    \item C library from the GNU project
    \item Designed for performance, standards compliance and portability
    \item Found on all GNU / Linux host systems
    \item Of course, actively maintained
    \item Quite big for small embedded systems: approx 2.5 MB on ARM
      (version 2.9 - \code{libc}: 1.5 MB, \code{libm}: 750 KB)
    \item \url{http://www.gnu.org/software/libc/}
    \end{itemize}
    \column{0.3\textwidth}
    \includegraphics[width=\textwidth]{slides/sysdev-toolchains-c-libraries/glibc.png}
  \end{columns}
\end{frame}

\begin{frame}
  \frametitle{uClibc}
  \begin{itemize}
  \item License: LGPL
  \item Lightweight C library for small embedded systems
    \begin{itemize}
    \item High configurability: many features can be enabled or
      disabled through a menuconfig interface
    \item Works only with Linux/uClinux, works on most embedded
      architectures
    \item No stable ABI, different ABI depending on the library
      configuration
    \item Focus on size rather than performance
    \item Small compile time
    \end{itemize}
  \item \url{http://www.uclibc.org/}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{uClibc (2)}
  \begin{itemize}
  \item Most of the applications compile with uClibc. This applies to
    all applications used in embedded systems.
  \item Size (arm): 4 times smaller than glibc!
    \begin{itemize}
    \item uClibc 0.9.30.1: approx. 600 KB (libuClibc: 460 KB, libm:
      96KB)
    \item glibc 2.9: approx 2.5 MB
    \end{itemize}
  \item Some features not available or limited: priority-inheritance
    mutexes, NPTL support is very new, fixed Name Service Switch
    functionality, etc.
  \item Used on a large number of production embedded products,
    including consumer electronic devices
  \item Actively maintained, large developer and user base
  \item Supported and used by MontaVista, TimeSys and Wind River.
\end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Honey, I shrunk the programs!}
  \begin{itemize}
  \item Executable size comparison on ARM, tested with {\em glibc}
    2.9 and {\em uClibc} 0.9.30.1
  \item Plain ``hello world'' program (stripped)
    \begin{itemize}
    \item With shared libraries: 5.6 KB with {\em glibc}, 5.4 KB with
      {\em uClibc}
    \item With static libraries: 472 KB with {\em glibc}, 18 KB with
      {\em uClibc}
    \end{itemize}
  \item Busybox (stripped)
    \begin{itemize}
    \item With shared libraries: 245 KB with {\em glibc}, 231 KB with
      {\em uClibc}
    \item With static libraries: 843 KB with {\em glibc}, 311 KB with
      {\em uClibc}
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{eglibc}
  \begin{columns}
    \column{0.8\textwidth}
    \begin{itemize}
    \item {\em Embedded glibc}, under the LGPL
    \item Variant of the GNU C Library (GLIBC) designed to work well on
      embedded systems
    \item Strives to be source and binary compatible with GLIBC
    \item eglibc's goals include reduced footprint, configurable
      components, better support for cross-compilation and
      cross-testing.
    \item Can be built without support for NIS, locales, IPv6, and many
      other features.
    \item Supported by a consortium, with Freescale, MIPS, MontaVista
      and Wind River as members.
    \item The Debian distribution has switched to eglibc too,
      \url{http://blog.aurel32.net/?p=47}
    \item \url{http://www.eglibc.org}
    \end{itemize}
    \column{0.2\textwidth}
    \includegraphics[width=\textwidth]{slides/sysdev-toolchains-c-libraries/eglibc.png}
  \end{columns}
\end{frame}

\begin{frame}
  \frametitle{Other smaller C libraries}
  \begin{itemize}
  \item Several other smaller C libraries have been developed, but
    none of them have the goal of allowing the compilation of large
    existing applications
  \item They need specially written programs and applications
  \item Choices:
    \begin{itemize}
    \item Dietlibc, \url{http://www.fefe.de/dietlibc/}. Approximately
      70 KB.
    \item Newlib, \url{http://sourceware.org/newlib/}
    \item Klibc, \url{http://www.kernel.org/pub/linux/libs/klibc/},
      designed for use in an {\em initramfs} or {\em initrd} at boot
      time.
    \end{itemize}
  \end{itemize}
\end{frame}