\documentstyle[doublespace]{article}
\addtolength{\oddsidemargin}{-.5in}
\addtolength{\evensidemargin}{-.25in}
\addtolength{\textwidth}{1.0in}
%\addtolength{\textheight}{1.0in}

\author{David Golombek}
\title{AUP Proposal:\\
Investigation and Extension of the Exokernel Driver Model}
\date{\today}
\begin{document}
\maketitle

The Exokernel Project at MIT is in the process of releasing a full
distribution of its operating sytem for PCs, called ExoPC.  While
much of the functionality of the operating system is complete, the
release still lacks device drivers for much of the hardware found in
normal PCs.  This AUP will concentrate on widening ExoPC's supported
hardware list.  Work will take on two major stages; first, I will add
support of normal IDE drives to ExoPC, and second, I will attempt to
create a more generic wrapper interface between the ExoPC driver model
and the driver model used by other freely distributed operating
systems.

The ExoPC distribution already contains ports of several device
drivers from other free operating systems, including several network
card drivers from OpenBSD and NetBSD, and a SCSI controller from
NetBSD.  These drivers already work, and can serve as a model of the
necessary changes needed to a driver to make it work under ExoPC.  The
first stage of this AUP will be to take the IDE disk drive controller
code contained in {\tt wd.c} from NetBSD and get it working under
ExoPC.  This will have the immediate benefit of greatly expanding the
number of computers that ExoPC will run on.  It will also have the
benefit of teaching me the ExoPC driver model, and the differences
between it and other OS's driver models.  

Using the experience gained from the reworking of the IDE disk driver,
I will begin to work on a more generic wrapper to allow for the
quicker porting of future device drivers to ExoPC.  Ideally, such a
wrapper would have an upper layer interface identical to that expected
by ExoPC, and a lower level interface identical to that expected by
some other free OS's driver model.  At this point, it is unclear which
of the free OS's driver model we will attempt to emulate.  Under
consideration are Linux, NetBSD, OpenBSD, and FreeBSD.  Linux has the
advantage of supporting the widest variety of hardware, but it's upper
layer driver model tends to change the most frequently, making
tracking of the base driver very difficult.  NetBSD, OpenBSD, and
FreeBSD tend to share a lot of driver code, and thus the differences
will be less, but none the less, each has evolved into slightly
different driver models.  After I reach a better understanding of the
ExoPC driver model, I will be better equipped to make a good
decision.  

Using this wrapper model, there are a wide variety of extensions to
this AUP that could be reached with relatively little effort.  For
example, a NE2000 network card device driver is needed to support the
many PC's that contain such cards (or clones of it).  A wide variety
of other drivers could possibly be added, if the wrapper model was
found to be extensible enough, greatly increasing the number of PCs
ExoPC could possibly run on.  Equally importantly, a wrapper model
would allow the underlying drivers to be updated more easily, without
needing to worry about the effects changes had on the embedded ExoPC
code, as is currently the case.  Instead, only when the upper level
interface changed (a much less frequent occurance), would the wrapper
need to be changed.

This AUP will allow me to start learning the exokernel model from the
ground up, and will give me extensive experience working with a
variety of different device driver models.  I will also gain
experience with the IDE driver model in specific, and get a better
idea of the portability issues involved in and flexibility of the
various free OS's drivers for that device.  By the end of it, I should
be very comfortable with the ExoPC distribution and its various
components, and able to make constructive suggestions for its future.

\end{document}