\chapter{Problem definition}
\label{problem_definition}

Most organisations, be it your family or your workplace, start small.
They have few people who require little in the way of explicit
communication and procedures.  Today, most organisations use computers
extensively and those computers need maintenance.  As long as you have
a small number of hosts, maintaining each as a single entity --
troubleshooting, debugging, installing and removing software on each
machine by itself, is not too much work.

As the organisation grows, so will the number of computers, and at
some point maintaining all the diverging hosts will become a
nightmare.  The users will be unhappy (since the hosts are broken in
various ways: printing works on one, the word processor on another,
and so on).  Or, huge amounts of resources are spent on maintaining
the hosts.

\section{Packaging systems}

What is a packaging system?  It is a tool which helps the
user\footnote{The user might not always be the end-user, it can also
  be the local system administrator or a software distributor.}  to:
\label{pd_packaging_systems}
\begin{enumerate}
\item \label{pd_consistent_system} Keep systems consistent across
  system boundaries such as hosts or architectures.
  \item Install and upgrade software.
  \item Distribute software and configurations in a consistent,
    predictable manner.
  \item Keep track of installed software.
  \item Make sure the installed software has the needed dependencies
    installed so it can actually work.
\end{enumerate}

All of this is about handling complexity and scalability, and this is
the hard problem at hand.  Distributing a piece of software (as a
tarball), and unpacking it somewhere is easy.  Making it interact
correctly with other software and being able to remove or upgrade it
later without fear of breaking other software makes the problem a lot
harder.

Some of the dimensions in which we want scalability are:

\begin{enumerate}
  \item \label{pd_scalability_autonomous} {\em Autonomous sites}.
    The University of Oslo and Bergen are different sites.  Even
    though they might have a common source for most of their packages,
    they will have some difference.  Different departments within a
    university can also be autonomous sites.
  \item \label{pd_scalability_release} {\em Release levels}.  Examples
    are stable and unstable.  Some will want more graded release
    levels, like archaic, oldstable, stable, frozen, fresh, unstable.
  \item \label{pd_scalability_regional} {\em Regional differences}.
    Such as time zones, default language.
  \item \label{pd_scalability_dependencies} {\em Package choices and
      relations}.  Examples are conflicts and dependencies between
    packages and meta-packages.
\end{enumerate}
