MINIX was written for educational purposes by Professor Andrew S. Tanenbaum of Vrije Universiteit in Amsterdam, who had been using UNIX in classes he taught about the internal workings of computer operating systems. Tanenbaum wrote it because of a change in policy that prohibited making the UNIX source code available to students.
Source code is the version of software as it is originally written (i.e., typed into a computer) by a human in plain text (i.e., human readable alphanumeric characters). It is necessary to have the source code in order to be able to study the internals of an operating system or other software.
UNIX was originally written by Ken Thompson in 1969 at Bell Labs, the research and development arm of AT&T (The American Telephone and Telegraph Corporation), the former U.S. telecommunications monopoly. In 1973 it was rewritten in the C programming language, which was also developed at Bell Labs.
AT&T was required under the terms of a 1958 court order in an antitrust (i.e., anti-monopoly) case brought by the U.S. government to license its non-telephone-related technology to anyone who asked. Thus, many universities began using UNIX in their curricula. Among them was the University of California at Berkeley (UCB), at which numerous important improvements and additions were developed, collectively known as the Berkeley Extensions.
A major change in AT&T's policy occurred in 1982 as a result of the U.S. Department of Justice permitting the company to to enter the computer business, and thus to sell UNIX commercially, in return for divesting its local telephone services. Later in the same year, AT&T announced official support for UNIX and released its first commercial version. These new releases, however, no longer made the source code available for study or development.
Tanenbaum was in an ideal position to take on this challenge, in part because he had spent time at all three of the main centers of UNIX development: he received his undergraduate degree from the Massachusetts Institute of Technology (MIT) and his doctorate from UCB, and he performed research at Bell Labs. In addition to MINIX, Tanenbaum is also famous for his books on computer architecture, operating systems and networks and as the developer of Amoeba operating system (which turns a collection of workstations or single-board computers into a transparent distributed system).
Tanenbaum wrote MINIX mainly in C, the same language that was subsequently used for much of Linux including almost all of its kernel (i.e., the core of the operating system). A UNIX clone, MINIX contained no AT&T source code in its kernel, compiler, utilities or libraries, and thus there were no restrictions on using the source code in the classroom.
A clone is an operating system or other program that has functions and behavior similar to those of another program but which does not contain source code from that program. Linux is also a clone of UNIX. Linux, MINIX and other UNIX clones, as well as operating systems that have a direct lineage to the original AT&T source code, are commonly referred to as Unix-like operating systems.
A compiler is a specialized program that converts source code in machine language (also called object code or machine code) so that it can be directly understood by computer processors. A library is a collection of routines (also called subprograms, procedures or functions) that perform operations which are commonly required by programs.
The first version of MINIX was written for the mainstream IBM PC and compatible personal computers. Subsequently, versions were also introduced for computers containing the Motorola 68000 (such as the early Macintosh and the Atari ST) and SPARC processors.
The license for MINIX was considered rather liberal when it was first introduced, and the fee was much lower than those for other operating systems available at the time. However, because MINIX was not entirely free software (i.e., free both in a monetary sense and with regard to use) and because of the desire for additional features and improved performance, most developers focused their efforts on Linux and BSD (Berkeley Software Distribution), which was developed at UCB. MINIX was finally converted to free software in the late 1990s with its re-release under a very simple BSD-style license.
MINIX features a small, microkernel-based structure. A microkernel has a much smaller size than the commonly used monolithic kernels, and it usually provides only minimal services, such as defining memory address spaces, process management and interprocess communication (i.e., communication among currently active processes). A process is an instance of an executing (i.e., running) program.
All other functions, such as hardware management, are implemented as processes running independently of the kernel. In the early 1990s, many computer scientists predicted that monolithic kernels would become obsolete; however, that did not happen, because monolithic kernels also have some important advantages.
In 1992 Tanenbaum initiated a now classic Usenet discussion with Torvalds about the advantages and disadvantages of Linux's monolithic kernel versus the microkernel approach that Tanenbaum was convinced was the wave of the future. The less-than-prophetic title of this thread, LINUX is obsolete, has become one of the most famous quotations about Linux.
Among the many additional features of current versions of MINIX are: (1) multitasking (i.e., the ability to run multiple programs simultaneously), (2) support for up to three simultaneous users, (3) protected mode operation on the 286, 386, 486 and Pentium processors, (4) support for extended memory of up to 16MB on 286 processors and up to 4GB on 386, 486 and Pentium processors, (5) RS-232 serial line support with terminal emulation, kermit, zmodem, etc., (6) system calls that are mostly compatible with POSIX standards, (7) an ANSI C compiler, (8) more than 200 utilities (e.g., cat, cp, cron, echo, grep, head, ls, make, mail, su and sort), (9) more than 300 library functions (e.g., alloca, calloc, fork, malloc, pipe, rand, read and stdio), (10) a shell that is functionally identical to the Bourne shell, (11) a TCP/IP networking capability, (12) five text editors (including ed, elvis and ex), (13) a spelling checker for 40,000 English words, (14) extensive online manual pages and (15) inclusion of the full C source code for the operating system, utilities, libraries, etc.
Protected mode is a type of memory utilization in which each program can be allocated a certain section of memory that other programs cannot use, thereby protecting programs from interference by other programs. A system call is a request in a Unix-like operating system by an active process for a service performed by the kernel, such as input/output (I/O) or process creation (i.e., creation of a new process). System calls can also be viewed as clearly-defined, direct entry points into the kernel through which programs request services from the kernel. POSIX (Portable Operating System Interface for uniX) is a set of programming interface standards governing how to write application source code so that the applications are portable between operating systems.
MINIX has evolved over the years, and several versions have been introduced. The two still current versions are MINIX 2.0, which is available for Intel processors, and MINIX 1.5, which is available for the Intel, Macintosh, Amiga, Atari and SPARC platforms.
MINIX 2.0 requires a computer with an 8088, 286, 386, 486 or Pentium processor. The system must be fully hardware compatible with the PC-AT and its successors (e.g., EISA bus and IDE disk). MINIX can be compiled in either the 16-bit mode or the 32-bit mode, depending on the flags (i.e., options) used when compiling. For the 32-bit mode, a 386, 486 or Pentium processor is required.
In addition to running MINIX on a bare Intel CPU, it is also possible to run it on a simulator (i.e., a 386 interpreter) called Bochs, which is included on the MINIX CDROM.
For the 16-bit version, a minimum of 640KB of RAM (random access memory) is required. For the 32-bit version, at least 2MB of RAM is needed and 2.5MB is preferable.
A hard disk is not technically required, although it is strongly recommended in order to be able to take full advantage of the system. 30MB is the practical minimum for loading all of the source code and recompiling the system, but a 20MB partition is sufficient for running and compiling parts of the system.
Excellent Resource for Computer Science Classes
Tanenbaum has occasionally enhanced MINIX in response to requests by its many users. However, he has been reluctant to accommodate every suggestion because he does not want to clutter what was designed as a teaching tool and thereby reduce the understandability of the source code.
Its very small size, abundance of advanced features, freely available source code, excellent documentation and liberal licensing have made MINIX particularly well suited for use in computer science classes that study how operating systems work. In fact, it is said that they make it quite practical for a person who has little or no knowledge of operating system internals to be able to comprehend nearly the entire system after just a few months of careful study.
Created March 27, 2004. Updated April 20, 2005.