\chapter{Introduction}

\section{What is portability?}

The word portability has many meanings when used with
respect to computer programs.  Here, I interpret it to be
the amount of modification which must be made to a program
before it will run natively on a system other than that on
which is was written.  The original aim of the GNU system
was to have a system which would be source-code compatible
between many varying machines.  Sun's Java system aims to
be binary-compatible between systems, but the Free Software
Foundation do not have this aim since they believe that
source code should be available for all programs.


\section{The history of HURD}

The Free Software Foundation have been working on their
GNU\footnote{GNU stands for GNU's Not Unix} operating
system since 1985.  It was designed to be a replacement
for Unix.  This had the advantage that when it was released,
there would already be a large number of people who were
able to use the system, and it meant that programmers
could work on implementing small pieces of the system
independently of each other.  Many hundreds of utilities
have been released by GNU and they run on a wide variety
of Unix and Unix-like platforms, and even some totally
unrelated platforms.  Because they are so widely available
and used, they have received a great deal of testing.

The HURD\footnote{HURD stands for HIRD of Unix Replacing
Daemons.  HIRD stands for HURD of Interfaces Representing
Depth} is the GNU replacement for the Unix kernel.  It was
first released on the 6th August 1996.


\section{Features of HURD}

HURD provides a Unix-like interface to applications that run
under it.  HURD is structured as a number of communicating
user-level processes that run on top of the Mach microkernel.
There is almost no machine dependent code in HURD, so all
that is necessary is to port the microkernel that supports
it to new hardware.  In order to do this, it is first
necessary to port the GNU C compiler and the binutils --- the
assembler, the linker and various related utilities.  The
structure of the HURD is illustrated in figure~\ref{hbd} and
discussed further in Section~\ref{arch-hurd}

\begin{figure}
\includegraphics*[0mm,0mm][110mm,40mm]{block.ps}
\caption{Block diagram of HURD.}\label{hbd}
\end{figure}


\section{The goal of this project}

The goal of this project is to determine how easy it is to
make HURD run on differing architectures.  In order to
achieve this, I shall attempt to make it work on an
architecture that it has never previously run on and one
that I am familiar with --- the ARM processor.  Since HURD
is based on Mach, porting the Mach microkernel to the ARM
processor would be sufficient to run HURD, but Mach is not
currently available for the ARM.


\section{Report layout}

This report starts by discussing microkernel based
architectures.  I then discuss my attempt to port the Mach
microkernel to run on the ARM.  Subsequently I examine the
possibility of making HURD run on the L4 microkernel.
