Alternate OS: Minix3

by Darrel Johnston (djohnston)


MINIX is a UNIX-like computer operating system based on a microkernel architecture created by Andrew S. Tanenbaum for educational purposes. He created MINIX at Vrije Universiteit in Amsterdam to exemplify the principles conveyed in his textbook, Operating Systems: Design and Implementation (1987). Tanenbaum originally developed MINIX for compatibility with the IBM PC computers available at the time. MINIX 1.5, released in 1991, included support for IBM PS/2 systems and was also ported to the Atari ST, Commodore Amiga, Apple Macintosh and Sun SPARCstation computers.

MINIX 2.0, released in 1997, was only available for the x86 and SPARC architectures. It was the subject of the second edition of Tanenbaum's textbook, co-written with Albert Woodhull and was distributed on a CD-ROM included with the book. MINIX 2.0 added POSIX.1 compliance, support for i386 and later processors in 32-bit mode and replaced the Amoeba network protocols included in MINIX 1.5 with a TCP/IP stack.

At the time of its original development, the licensing fee of $69 was very small compared to those of other operating systems. Although Tanenbaum wished for MINIX to be as accessible as possible to students, his publisher was not prepared to offer material that could be copied freely. So a restrictive license requiring a nominal fee, included in the price of Tanenbaum's book, was applied as a compromise. This prevented the use of MINIX as the basis for a freely distributed software system.

When free and open source Unix-like operating systems such as Linux and 386BSD became available in the early 1990s, many volunteer software developers abandoned MINIX in favor of these. In April 2000, MINIX became free/open source software under a permissive free software license. But, by this time other operating systems had surpassed its capabilities, and it remained primarily an operating system for students and hobbyists.

MINIX 3 is comprehensively redesigned to be "usable as a serious system on resource-limited and embedded computers and for applications requiring high reliability." It currently supports only i386 PC compatible systems. It is available in a live CD format that allows it to be used on a computer without installing it on the hard drive.

Version 3.1.5 contains the X11 window system and over 650 UNIX programs. With the addition of X11, this version marks the transition away from a text-only system. It can also withstand driver crashes. In many cases it can automatically replace drivers without affecting running processes. In this way, MINIX is self-healing and can be used in applications demanding high reliability. MINIX 3 also has support for virtual memory management, making it suitable for desktop OS use. Desktop applications such as Firefox and are not yet available for MINIX 3, however.

Early Linux kernel development was done on a MINIX host system, which led to Linux inheriting various features from MINIX, such as the MINIX file system. However, Linus Torvalds' design deviated from the MINIX architecture in significant ways, most notably by creating a monolithic kernel instead of a microkernel. Many Linux users are familiar with the ongoing debate between Torvalds and Tanenbaum over the merits of a microkernel versus a monolithic kernel.

For this installation, I started by downloading the latest iso available, version 3.1.8, from the Minix download page of their website. I originally allocated 2 GB of hard disk storage for the VM. According to Minix’s main page, “for a hard disk installation, 50 MB is needed as a minimum, 600 MB minimum if you want all the sources.” While installing packages, I discovered I had not allocated enough disk space. I ended up allocating 8 GB of disk space, for good measure. Booting from the iso, we see the following screen.

After booting Minix, we see instructions on how to install Minix to the hard drive. At this point, only the root account exists, so we login at the prompt as root. After starting the installation procedure, we see some additional notes.

Pressing [ENTER] at the colon prompt, we are instructed to select a keyboard type. [us-std] is the default type.

Next, we need to partition the hard drive. Pressing [ENTER] here will select automatic mode for partitioning.

We select /dev/c0d0 to install to.

I chose to make the /home partition 1GB in size and accepted the default 4KB file system block size.

Minix’s automatic installer has chosen to create three partitions, /, /home and /usr. The partitions are created and the filecopy portion of the installation begins.

I had initially set the VirtualBox emulated network card to be an Intel PRO/100, which turned out to be a mistake. It should be set as PCnet-FAST III, which corresponds to item #7 in the network menu, AMD LANCE. I changed the setup later, as I could not get a network connection with the emulated Intel ethernet card. The network IP address method was set to DHCP.

Minix has now unmounted the hard disk partitions. Note that we are instructed to enter “shutdown”. I encountered file system check errors on next boot by shutting the system down this way. The best method I found is to enter “poweroff”. You will be left at a system prompt from which you can manually power off the VM.

After detaching the CD from the Minix virtual machine, I booted from the new hard drive installation. Logging in as root, I set the root password by running the passwd command. By browsing the contents of the /usr/share/zoneinfo/US directory, I determined the correct designation for my timezone is US/Central. I set the timezone by entering:


echo export TZ=US/Central > /etc/rc.timezone

After rebooting, I checked it by entering:

echo $TZ

Next, we need to add the wheel group to the list of groups by issuing the command:


echo 'wheel:*:12:' >> /etc/group

I added the user darrel as a member of the wheel group, with /home/darrel as the user’s home directory. Then I entered a password for the user darrel.

The package manager for Minix is pkgin. To get the current list of packages, we enter the command ‘pkgin update’. If we have a working network connection, the package list will be updated, as shown below.

To install the entire Minix package base, we can install the package minix-all. At this point, I discovered the 2GB size allocated for the hard drive was not enough.

After  changing the size to 8GB, I was able to install the minix-all package.

I received an error that the package smcgit-base, listed in minix-all, is not in the repository. I proceeded with the installation, anyway.

After installing all the packages, I decided to remove any orphaned dependencies with the ‘pkgin ar’ command. p5-Error package was removed. I decided to try a full upgrade with the ‘pkgin fug’ command.

p5-Error and scmgit-base are to be reinstalled, but scmgit-base is not in the repository. Seems to be a circular package dependency error or a bad repository list. I elected not to proceed.

We need to set up the X server. Login as root, and run the following command:

Xorg -configure

This command should create a file in /root.

In Section "Screen" from file, make sure to remove all SubSection "Display", except the one containing: Depth: 16.

Add the desired screen resolution. Possible screen resolutions can be found in /var/log/Xorg.0.log. Search for Modes: containing BitsPerPixel: 16. This is important!


                    SubSection "Display"

                            Viewport   0 0

                            Depth         16

                            Modes "1024x768"


The file can then be moved or copied to /usr/pkg/X11R6/lib/X11/xorg.conf.

After logging in as user darrel and issuing the startx command, I get the following displayed. It is a login terminal, two xterm windows and a clock.

If I login as user root, I can issue the xdm command and get the X display manager login screen.

If I login as user darrel from here, I get a slightly different display.

This time I have two xterm windows and one mailbox window. Not exactly what I was hoping for, considering the capabilities of the X window manager and today’s desktop environments.

I read that the Equinox Desktop Environment was available for Minix version 3. It has a much more user-friendly GUI. An example is shown below.

I went in search of the Equinox Desktop Environment for installation. I searched a current Minix 3 repository and found the ede package, as well as its only required dependency, efltk.

However, pkgin indicates that neither packages are in the repository. The repository pkgin is using is The ede and efltk packages are not listed there. I have yet to find where Minix 3 stores the pkgin repository sources list. It is not listed in the Minix 3 User’s Guide.

I created a user account on the only Minix forum I could find and posted the following:

Problem with pkgin

I have installed Minix 3.1.8. I see the ede and efltk packages listed. When I do:

pkgin update

pkgin install ede efltk

I get a message that the packages are not available in the repository. In addition, I installed the package minix-all, as it was listed when I did:

pkgin available

However, minix-all (meta) package is not listed on the 3.1.8 repository list page. And 1 package that should have been part of the group, scmgit-base, is not installable. When I do:

pkgin ar

to autoremove orphan dependencies, the package p5-Error is removed. Then when I do:

pkgin fug

to upgrade all packages, pkgin wants to re-install the p5-Error package (previously removed) and the scmgit-base package (not installable).

I had to wait 10 days for my post to be approved for publishing on the forum. There have been a few views to date, but still no replies, almost a month later. My Minix 3 installation in VirtualBox has not been upgraded any further. I suppose I could attempt to do some programming. However, that seems to be fraught with errors, as well.

Well, they are looking for a systems programmer. Do you suppose they’d consider hiring Linus Torvalds?