\section{The init Process}

\begin{frame}
   {init}

   \begin{itemize}
      \item \filelink{/sbin/init}
      \item \emph{Parent of all processes}
      \item Coordinates rest of boot process
      \item Three most common implementations:
      \begin{itemize}
         \item \textbf{systemd}
         \item \textbf{Upstart}
         \item \textbf{SysVinit}
      \end{itemize}
      \item All major distributions have now moved to \textbf{systemd}
   \end{itemize}

\end{frame}

\cprotect\note{

   \filelink{/sbin/init} (usually just called
   \textbf{init}) is the first user-level process (or
   task) run on the system and continues to run until the
   system is shutdown.  Traditionally it has been
   considered the \textbf{parent} of all user processes,
   although technically that is not true as some processes
   are started directly by the kernel.

   \textbf{init} coordinates the later stages of the boot
   process, configures all aspects of the environment and
   starts the processes needed for logging into the system.
   \textbf{init} also works closely with the kernel in
   cleaning up after processes when they terminate.

   Traditionally, nearly all distributions based the
   \textbf{init} process on \textbf{UNIX}'s venerable
   \textbf{SysVinit} software.  However, this scheme was
   developed decades ago under rather different
   circumstances:
   \begin{itemize}
      \item The target was multi-user mainframe systems (and
      not personal computers, laptops, and other devices).
      \item The target was a single processor system.
      \item Startup (and shutdown) time was not an important
      matter; it was far less important than getting things
      right.
   \end{itemize}

   Startup was viewed as a \textbf{serial} process,
   divided into a series of sequential stages
   (termed \textbf{run levels}.)  Each stage
   required completion before the next could proceed.
   Thus, startup did not easily take advantage of the
   parallel processing that could be done on multiple
   processors or cores.

   Secondly, shutdown/reboot was seen as a relatively rare event
   and exactly how long it took was not considered important;
   today \textbf{Linux} systems usually boot in a manner of seconds.

   Modern systems have required newer methods with enhanced
   capabilities.

}
\section{Startup Alternatives}
\begin{frame}
   {Startup Alternatives}
   \begin{itemize}
      \item
      \textbf{Upstart}
      \begin{itemize}
         \item Developed by \textbf{Ubuntu} and first included in
         2006
         \item Adopted in \textbf{Fedora} 9 (in 2008) and in
         \textbf{RHEL 6} and its clones
         \item Was also used in various embedded and mobile
         devices
      \end{itemize}
      \item
      \textbf{systemd}
      \begin{itemize}
         \item \textbf{Fedora} was the first major distribution
         to adopt it in 2011
         \item \textbf{RHEL} and \textbf{SUSE} followed
         \item \textbf{Ubuntu 16.04} replaced \textbf{Upstart} with
         \textbf{systemd}.
         \item
         All important \textbf{Linux} distributions are
         now based on \textbf{systemd}
      \end{itemize}
   \end{itemize}

\end{frame}

\cprotect\note {

   To deal with the intrinsic limitations in
   \textbf{SysVinit}, new methods of controlling system
   startup were developed.  While there are others,
   two main schemes were adopted by Enterprise
   distributors, \textbf{Upstart} and \textbf{systemd}.

   Every other major \textbf{Linux} distribution has now
   adopted \textbf{systemd} and configured it as the
   default.  Even \textbf{Ubuntu} phased out
   \textbf{Upstart} in its favor.

   Migration to \textbf{systemd} was non-trivial and bugs
   and missing features could be very disabling, so
   essential compatibility layers were adopted and still
   exist for legacy software.  Thus, \textbf{SysVinit}
   utility compatibility wrappers still persist.

   The history of \textbf{systemd} development and adoption
   is rather complicated, and colorful personalities ensured
   not all the discussion was both friendly and technical.  But this
   holy war is over as far as we are concerned here.

   In the following we will concentrate on \textbf{systemd},
   and, for the most part, ignore \textbf{SysVinit} as well as
   \textbf{Upstart}, which is no longer used in any
   significant way.

}

