Minix versions and their use in teaching

modified: 29 Jun 2006

There have been three editions of the Operating Systems Design and
Implementation text, each one of which was released in conjunction with
a release of the Minix operating system described in detail in
the book.

Operating Systems Design and Implementation, by Andrew S.
Tanebaum, (1987) describes Minix 1.1. Minix itself was not available
free, but it could be purchased separately on a set of floppy disks from
Prentice-Hall. The license did not allow free distribution, but for
educational purposes the disks could be duplicated for students. A
printed Minix Reference Manual was provided with the Minix
distribution. This version of Minix did not provide support for
hard disk or network operation, but it could run on a first-generation
IBM-PC with as little as 256 KB memory, and one floppy disk drive (although
two drives were recommended).

Numerous upgrades for Minix 1 were made available -- because of
licensing restrictions complete upgrades were not available on the net,
but source code patches could be downloaded to apply to existing legal
copies of Minix. At least two complete new versions of Minix, Minix
1.3 and Minix 1.5, were sold by Prentice-Hall, complete with revised
editions of the Minix Reference Manual. Minix 1.5 (1991) came
on 12 3.5" 720 KB floppy disks. Minix 1.5 was intended to be
installed on a hard disk, although it did not initially provide a boot
monitor, which meant a Minix system had to be booted from a floppy
disk. It was available in versions for the IBM PC, XT, AT, 386, and
PS-2 (although it only ran in 16-bit mode on a 386), as well as for the
Atari ST, Commodore Amiga, Apple MacIntosh, and Sun SPARC. A printed
source code listing was supplied in the Reference Manual, and most
of the code of the kernel and other system components remained similar
enough to the listings in the 1987 text that using the new code for
teaching was practical.

The official Minix 1.5 release had some support for Tanenbaum's amoeba
distributed processing system, but IP networking was not supported.
However, networking code written by Michael Temari, known as Tnet,
became available on the net, and could be added with fairly minimal patches
to the main body of Minix for Intel processors.

Operating Systems Design and Implementation, 2nd edition, by
Andrew S. Tanebaum and Albert S. Woodhull, (1997) describes Minix
2.0.0, which was included on a CD-ROM. A new license allowed unlimited
copying of the CD-ROM, and the terms of the new license were also applied
retroactively to older versions of Minix. Minix 2 could be compiled to run
on a first-generation IBM-PC, and operation without a hard disk was
possible, but impractical. In addition, two versions of the
assembly-language portions of the source code were provided, one for
systems with 16-bit processors (i.e., 80286 and earlier, and one for
32-bit Intel processors (80386 and later). The reference version
described in the text is the 32-bit version. Network code developed
at Tanenbaum's university in Amsterdam was distributed and could be
easily added by recompiling the system. A sophisticated boot monitor
was also available and it was easy to set up a Minix 2 system in a dual-
or triple-boot configuration with Windows and/or Linux and Minix on separate
partitions of the hard disk.

It should be mentioned that with the exception of the Sun SPARC
version, implementations of Minix for non-Intel systems were not
updated to Minix 2. There have been some experiments with porting
Minix to various handheld devices. There is a page on this site with
links to
more information about Minix 2.0 for non-Intel platforms.

Minix 2.0.2 was released in 1998. For
teaching OS courses the most important change is probably the addition
of the DOSMinix method of running Minix. This uses low level MS-DOS
disk support routines to access a simulated Minix disk partition which
is actually just a large file in a FAT directory on an MS-DOS or
Windows system. Repartitioning of the disk is not necessary.
Installation consists of unpacking a zipped directory which provides an
MS-DOS boot program, a 50 MB simulated disk, and a utility which can be
used to create additional simulated disks of any size desired. Native
Minix disk drivers are also present, so a DOSMinix system can mount
true Minix file systems on additional partitions or disks if needed.

Unfortunately, DOSMinix requires a FAT file system, and will not work
with the NTFS file system of Windows NT, Windows 2000, or Windows XP.
However, all of these systems can access FAT file systems, so DOSMinix
may be usable on machines with these operating systems if a FAT
partition is provided. You would probably also have to use an MS-DOS
(or FreeDOS) floppy disk to boot such a system, however. DOSMinix can
be started directly on machines with Windows versions through Windows
98, 2nd edition, and possibly Windows ME (I'm not sure of ME). It
requires only the lowest level MS-DOS underpinnings of Windows, which
means that you have to boot the Windows machine into what Microsoft
calls Safe Mode with Command Prompt only -- which is simply MS-DOS.

I have not taught using Minix 2 releases later than Minix 2.0.0, but I
believe the bulk of the source code is similar enough to that described
in the OSDI 2nd ed. text that the code descriptions in the text
will be easy to follow. The same is probably true of later releases of
Minix 2. Major improvements to Minix 2.0.3 (2001) deal with
networking. First, a means of starting the network server after the
rest of the system has started is provided, so it is not necessary to
recompile the Minix system to enable networking. Second, networking
can be made much more secure by configuring a serv.access file that
enables one to limit network connections by connection type and IP address.

The last Minix 2 release was Minix 2.0.4, in late 2003. The purpose of
this release was to pull all patches and fixes for Minix 2.0.3 into a
single package for the convenience of work that was beginning on Minix
3. Probably Minix 2.0.4 is as useful as earlier Minix 2 releases as a
classroom tool. An important reference for anyone planning to teach with
Minix 2.0.4 is the
Minix 2.0.4 Changes
document, which lists all of the differences between the 2.0.0 and 2.0.4
releases. This points out a few places where changes in the
kernel code make it notably different from the code described in the
OSDI 2nd ed. text.

Continued support for Minix 2.0.4: Although Minix 3 was released in
late 2005 and the OSDI 3rd ed. text was published in early 2006,
Minix 2 and OSDI2 are still in widespread use at the time is being
written (June 2006).
Many professors have course materials based on Minix 2 that
they wish to continue to use, and it may be several years before translations
of the new edition of the text to languages other than English are available.
For these reasons I am committed to continuing to support Minix 2 on this
website. A number of fixes and additions to Minix 2.0.4 have been released
since November 2003, and these can be found in the
Minix 2.0.4 fixes
directory. A recent development which is applicable to use of Minix 2 in
teaching is the release of the free VMWare Player, which makes it
possible to run Minix as a virtual machine on top of a Windows
or Linux host. This provides the kind of no-repartitioning, no-installation,
convenience for which the DOSMinix method was developed. More
information and a downloadable Minix 2.0.4+ virtual machine are available
here on a
Minix on VMWare Player page.

Operating Systems Design and Implementation, 3rd edition, by
Andrew S. Tanebaum and Albert S. Woodhull, (2006) describes Minix
3.1.0, which is included on a CD-ROM. Many parts of Minix are similar
to earlier versions, and laboratory exercises to do things
like add a new system call or driver probably will be easily adaptable
to Minix 3. But there are some fairly radical changes in the basic
design. Most importantly, all device drivers have become truly
independent processes. In earlier versions of Minix drivers executed
as independent processes but they were all compiled together into the
same binary file as the kernel. In Minix 3 drivers do not share code
or data with the kernel and in many cases can be loaded and unloaded
independently of the kernel.

Minix 3 development is ongoing. Minix 3.1.1 was released even
before the OSDI 3rd ed. text had been published, and Minix
3.1.2 was released in April 2006. However, most of the effort is going
into extensions to the system; the core components described in the text
are not expected to change much from those in the 3.1.0 release. To
keep posted on developments see the new
Minix 3 website.