\subsection{Linux features}

\begin{frame}
  \frametitle{Linux kernel in the system}
  \begin{center}
    \includegraphics[width=\textwidth]{slides/sysdev-linux-intro-features/linux-kernel-in-system.pdf}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{History}
  \begin{itemize}
  \item The Linux kernel is one component of a system, which also
    requires libraries and applications to provide features to end
    users.
  \item The Linux kernel was created as a hobby in 1991 by a Finnish
    student, Linus Torvalds.
    \begin{itemize}
    \item Linux quickly started to be used as the kernel for free
      software operating systems
    \end{itemize}
  \item Linus Torvalds has been able to create a large and dynamic
    developer and user community around Linux.
  \item Nowadays, hundreds of people contribute to each kernel
    release, individuals or companies big and small.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Linux license}
  \begin{itemize}
  \item The whole Linux sources are Free Software released under the
    GNU General Public License version 2 (GPL v2).
  \item For the Linux kernel, this basically implies that:
    \begin{itemize}
    \item When you receive or buy a device with Linux on it, you
      should receive the Linux sources, with the right to study,
      modify and redistribute them.
    \item When you produce Linux based devices, you must release the
      sources to the recipient, with the same rights, with no
      restriction..
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Linux kernel key features}
  \begin{columns}
    \column{0.5\textwidth}
    \begin{itemize}
    \item Portability and hardware support. Runs on most
      architectures.
    \item Scalability. Can run on super computers as well as on tiny
      devices (4 MB of RAM is enough).
    \item Compliance to standards and interoperability.
    \item Exhaustive networking support.
    \end{itemize}
    \column{0.5\textwidth}
    \begin{itemize}
    \item Security. It can't hide its flaws. Its code is reviewed by
      many experts.
    \item Stability and reliability.
    \item Modularity. Can include only what a system needs even at run
      time.
    \item Easy to program. You can learn from existing code. Many
      useful resources on the net.
    \end{itemize}
  \end{columns}
\end{frame}

\begin{frame}
  \frametitle{Supported hardware architectures}
  3.0 status
  \begin{itemize}
  \item See the \code{arch/} directory in the kernel sources
  \item Minimum: 32 bit processors, with or without MMU, and
    \code{gcc} support
  \item 32 bit architectures (\code{arch/} subdirectories)\\
    \code{arm, avr32, blackfin, cris, frv, h8300, m32r, m68k, microblaze, mips, mn10300, parisc, s390, score, sparc, um, unicore32, xtensa}
  \item 64 bit architectures:\\
    \code{alpha, ia64, sparc64, tile}
  \item 32/64 bit architectures\\
    \code{powerpc, x86, sh}
  \item Find details in kernel sources: \code{arch/<arch>/Kconfig},
    \code{arch/<arch>/README}, or \code{Documentation/<arch>/}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{System calls}
  \begin{itemize}
  \item The main interface between the kernel and userspace is the set
    of system calls
  \item About ~300 system calls that provide the main kernel services
    \begin{itemize}
    \item File and device operations, networking operations,
      inter-process communication, process management, memory mapping,
      timers, threads, synchronization primitives, etc.
    \end{itemize}
  \item This interface is stable over time: only new system calls can
    be added by the kernel developers
  \item This system call interface is wrapped by the C library, and
    userspace applications usually never make a system call directly
    but rather use the corresponding C library function
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Virtual filesystems}
  \begin{itemize}
  \item Linux makes system and kernel information available in
    user-space through virtual filesystems.
  \item Virtual filesystems allow applications to see directories and
    files that do not exist on any real storage: they are created on the
    fly by the kernel
  \item The two most important virtual filesystems are
    \begin{itemize}
    \item \code{proc}, for process-related information
    \item \code{sysfs}, for device-related information
    \end{itemize}
  \end{itemize}
\end{frame}
