Nikolai Bezroukov. Portraits of Open Source Pioneers

For readers with high sensitivity to grammar errors access to this page is not recommended :-)

Minix as a precursor of Linux (1989-1991)

Minix was a mini-OS originally developed by Andrew Tanenbaum to teach of the fundamentals of operating system design and published in his book Operating Systems Design and Implementation published by Prentice Hall in 1987. You can still buy this edition on Amazon for a couple of dollars, and if you are interested in OS design I highly recommend you to do this (currently everything became too complex and its refreshing to read an earlier book ;-).

Minix was the major teaching OS during 1989-1991 before 386 CPUs became widely available. Here is the relevant information from Minix timeline:

1987-01 PUBL: "Operating Systems - Design and Implementation (1st Edition, by Andrew S. Tanenbaum)"

http://minix1.hampshire.edu/osdi2/index.html

http://www.amazon.com/exec/obidos/ASIN/0136374069/ 1987-01 RELE: "MINIX -- which stands for Mini-UNIX" (by Andrew S. Tanenbaum)

"Minix 1.0 resembled the 7th Edition UNIX of the early 1980s"

"for the IBM PC and PC/AT only"

"MINIX was originally written to be system call compatible with V7 UNIX,"

"Early versions of Minix were similar to the ATT UNIX 7th Edition in its operation, although quite different internally."

"The platform Andy used was PC/IX, UNIX on the 8088 written by ISC for IBM."

http://cwx.prenhall.com/bookbind/pubbooks/tanenbaum/chapter0/custom4/deluxe-content.html

http://www.pliner.com/macminix/documentation/intro.pdf (PDF)

http://minix1.hampshire.edu/minix1.html

http://www.kclug.org/old_archives/linux-activists/1992/mar/0/0116.shtml

http://www.kclug.org/old_archives/linux-activists/1992/mar/0/0128.shtml

http://www.kclug.org/old_archives/linux-activists/1992/mar/0/0131.shtml

As we can see Minix was an independent reimplementation of functionality of version 7 Unix, not version 6, described in Leon's book. Minix originally ran on the IBM PC, but has been ported to a number of other computers including the Amiga, Macintosh, and several other architectures. In their Technical Report OS-01 Porting the Minix Operating System to the Leopard-1 Workstation written in February 1990, Australian team (David Bover, Graeme Doherty, Matthew Donaldson, Gordon Irlam & Jeremy Webber) described the structure of Minix in the following way:

The Minix operating system consists of a number of tasks communicating via message passing. Each hardware device is managed by a task that receives and processes messages related to the hardware device. For hardware devices which generate interrupts there is a short interrupt handler which processes the interrupt and turns it into a message which is sent to the controlling task. Much of the information that flows between an interrupt handler and the corresponding task makes use of memory shared between the two. Locks are used to disable interrupts and prevent concurrent access by a task and the corresponding interrupt handler to these shared memory areas. The kernel process contains the code associated with process management. It shares its address space with all the hardware tasks. From a logical perspective however, the kernel and the hardware tasks are well separated. The memory manager process contains most of the code associated with the fork and exec system calls. The file system process contains most of the code associated with the read and write system calls. Both the memory manager and file system send messages to the kernel and hardware tasks to perform some low level functions. User processes perform system calls by sending messages to the memory manager and file system.

The basis of the their port was an NS32000 Version of Minix developed at Warwick University. This version of Minix was based on a very early release, version 1.0, and it did not include many of the changes that have since been made to the PC version of Minix. It consisted of ~60K lines of code (20K for the operating system, 40K for the C system library, Minix utilities, and host utilities.). Please note that the structure is later version of Minix 1.5 and then 2.0 was very different. In Minix Information Sheet those version were described in the following way:

17. MINIX Compatibility List (1 August 1990) Introduction This is a list of machines that MINIX has reportedly run on. An updated version of this list will be posted when a sufficient number of entries have been added or changed or when requested. PC MINIX Version 1.0 is the version in Tanenbaum's book, "Operating Systems: Design and Implementation".

Version 1.1 is the initially released version and the differences between it and 1.0 are minor.

Version 1.2 was released next and followed a year later by 1.3.

Version 1.4 was only released to Usenet.

Currently, Prentice-Hall ships version 1.5 (known as 1.5.10 to Usenet).

Driving to the idea of Minix on steroids



Wired: And yet you've been famously cool about Linux.

Bill Joy: Re-implementing what I designed in 1979 is not interesting to me personally. For kids who are 20 years younger than me, Linux is a great way to cut your teeth. It's a cultural phenomenon and a business phenomenon. Mac OS X is a rock-solid system that's beautifully designed. I much prefer it to Linux Bill Joy, in interview to Wired, 2003

I believe that starting somewhere in 1990-1991 simultaneously with his exposure to Digital Unix Linus became involved in the Minix community and that involvement proved to be one of the keys to his success with the Linux kernel. Minix was one of the first independently rewritten Unix clones and was designed explicitly for education. The author of Minix -- Professor Andy Tannenbaum -- proved to be a very bad politician, as often happens with professors of computer science ;-). The key political mistake was that Andy Tannenbaum misunderstood the attractiveness and the value of GNU compiler and utilities in the academic environment. His decision to grant all MINIX commercial distribution right to Prentice Hall (and PH charged $150 a license) was probably a political suicide, although he did think so:

While most people can talk rationally about kernel design and portability, the issue of freeness is 100% emotional. You wouldn't believe how much [expletive deleted] I have gotten lately about MINIX not being free. MINIX costs $169, but the license allows making two backup copies, so the effective price can be under $60. Furthermore, professors may make UNLIMITED copies for their students. Coherent is $99. FSF charges >$100 for the tape its "free" software comes on if you don't have Internet access, and I have never heard anyone complain. 4.4 BSD is $800. I don't really believe money is the issue. Besides, probably most of the people reading this group already have it.

Tannenbaum probably could have occupied Linus' place in the free software world (and can probably get more money by selling books), just because Minix was developed earlier that Linux and there were many volunteers who wanted to get it to the POSIX compatibility level. But it is the fact that Minix code remained proprietary and refusal of Tannenbaum to allow such a fork that doomed it; he failed to understand that if an educational OS is free and POSIX compatible, many more people will use/support or even enhance it, especially if it can run GCC and other GNU software.

While he was absolutely correct as a teacher, I think it would be more politically correct to have two versions of MINIX:

For teaching you better preserve something really simple (and here he was absolutely right refusing to bloat the codebase)

For enthusiasts and advanced students you might benefit from proposing "Minix Next Step" (or Minix2), a more complex version, designed specifically for more powerful, but still affordable CPU (like 386sx was at this time)...

Actually I feel that this lack of flexibility (along with the overcontrolling impulses: to a certain extent he strangulated it with his own hands) were decisive considerations and the main reason why so many power Minix users instantly switched to Linux and helped Linus to take it to the next level. Tannenbaum tried to put a happy face on this situation later in Minix FAQ:

What do you think of Linux? I have never used it. People tell me that if you like lots of bells and whistles, it is a nice system. I would like to take this opportunity to thank Linus for producing it. Before there was Linux there was MINIX, which had a 40,000-person newsgroup, most of whom were sending me email every day. I was going crazy with the endless stream of new features people were sending me. I kept refusing them all because I wanted to keep MINIX small enough for my students to understand in one semester. My consistent refusal to add all these new features is what inspired Linus to write Linux.

As I already mentioned above, Tannenbaum's approach to people requesting features in Minix, was to tell them that they didn't really need that feature anyway. He did not realize that with the mass production of 386sx situation has changed. Stressing just educational value of the Minix simplicity, he did not accept enhancements related to fledging group of 386 users; nor he wanted to create Minix2 for 386sx platform and advanced users that outgrow 286 version. This was a pretty reasonable educational approach. But it backfired in the advanced sector of the user community, which is always the most valuable sector for any software development project. The mass exodus of advanced Minix users in the direction of Linux proved that a more flexible dual-OS approach could make more sense and save Minix (the main complain of advanced users was that Minix can not run GNU software). Later Tannenbaum realized this (and with the help of Kees Bot produced a POSIX compatible version), but it was too little, too late. Here is a relevant quote from the Tannenbaum's FAQ:

Is MINIX dead? Oh no. Far from it. It is simply focused on the target area it was always focused on: education. The excursion into hackerland was a detour. A co-author, Al Woodhull, and I have rewritten the MINIX book based on the new, POSIX-compliant, version of MINIX which Kees Bot produced. It is still be aimed at having students be able to learn the principles of operating systems and most of a real system in one semester.

From this example you can see that in software political mistakes are even more dangerous than technical mistakes and that for success in software it is not enough to have technical abilities, you also need to be politically savvy. Simplifying, we can say that the success of a large software project depends upon:

30% political abilities (ability to exploit an opening (timing)) and market your idea

30% tech abilities,

30% persistence

10% the ability to solve ego-related problems with collaborators and contributors.

Importance of understanding of what users want and where things are going and the ability to express that in a suitable PR language makes software development a highly political occupation ;-). Being able to withstand fashion is another political quality that counts. Here Tannenbaum's record is not as strait as some would like :-). As one Usenet correspondent pointed out to Tannenbaum " 'Microkernel' was the buzz-word of last year, so Minix is a microkernel. 'Object-oriented' is this year, so Minix is object-oriented - right?" .

Anyway, Minix was and is an excellent piece of educational software and Linux owes a lot to Minix as a system, to the Tanenbaum book that describes it, and even more to the Minix community -- the decisive factor in the success of Linux. The Minix community included a lot of talented developers who later contributed to Linux and other open source software projects.

Before Linux, Minix was a good starting point for anyone who wants to learn about operating systems. But the main problem was absence of 386-oriented version of Minix, as well as strangulating and rather expensive for Europe license. That's essentially were Linus saw the opening and that's what he decided to change: a new OS should be designed for 386sx and should be licensed on more liberal terms. From the very beginning Linux was a strictly reimplementation effort for a POSIX-compatible Unix clone on 386sx.

That means that Linus can probably can be considered the second after Tanenbaum author of open source PC Unix (and first working GPLed kernel, as HURD remained vaporware), but in no way he is a pioneer of PC Unix or a PC-based POSIX compatible UNIX. There were several earlier successful commercial PC-based Unix re-implementations. We already mentioned Microsoft XENIX. Another example that existed long before Linux (since 1983, I think) is Coherent, a product of Mark Williams company (Waterloo, Canada).

After cutting his teeth on Minix and DEC Ultrix and having Usenet-based connections with a rather large pool of talented people in Minix community Linus decided to reengineer a POSIX-compatible Unix kernel for 386sx CPU.

I would like to stress the importance of the community -- it was approximately 40 thousand community that included a lot of very talented software developers (and many of them had known Unix internals much better than Linus and some of them already published code that enhanced the current version of Minix to almost full POSIX compatible). Moreover, many members of this, largely European, community wanted a better system than Minix, but cannot afford a computer that would run (at this time it required 486 to run) or Microsoft XENIX license (actually Microsoft XENIX was one of the most popular Unixes in the PC world in early 90th).

When discussing Linux one need to understand that like in case with Microsoft Windows there was actually several different operating system called Linux. For example Linux 0.01-1 is completely different from Linux 2.0 and Linux 2.6 is almost completely different OS from both Linux 2.0 and Linux 0.01-1.0. There was not much continuity in design and not much code survived. Only the first several versions can be attributed to Linux Torvalds. After that he became more of a "configuration manager in chief" then the force behind the kernel and most technical decisions were made by other people (still due to his central role in putting suggested improvements into the kernel, he reserved the right of veto and the right to chose between several variants, see below).

Unix reimplementation by an MS DOS user ;-)

...Linux has only succeeded as a clone of Unix

because the definition of Unix was stable,

and clear written standards were available. Why KDE is Still a Bad Idea by Bruce Perens

"Where do you want to go today"

Microsoft marketing slogan

I would like stress the importance of ignorance and arrogance. Even in the summer 1991 Linus was still a pretty much amateur programmer. As Lars Wirzenius noted:

I wrote sprintf in the summer of 1991. Linus needed some easy way to print messages from the kernel, and did not then know how to use the stdarg mechanism to implement variable argument lists to functions. I see some people in the audience shaking their heads. Yes, it's true. There was a time when Linus didn't know everything. Really. Trust me. I was there.

If Linus were sufficiently educated and less of an "overachiever" type of the person, he would never venture into this adventure. If he simply wanted a better operating system than DOS, he would be better off installing more modern operating system: OS/2 (version 1.2 was available in 1989 with HPFS and REXX), or, even, Solaris. If he was really addicted to Unix or Unix-on-Intel he can buy Xenix or Coherent: he was a son of pretty rich parents and definitely can afford any of them (of he can work with 4.3BSD NET/1 tape which was released in November 1988; NET/2 tape was released in June 1991, three months before Linux 0.01).

But from the beginning he wanted to write his own Unix kernel. Despite this megamaniac goal and complete absence of experience, I looks to me that he had chosen a simple and realistic path -- use Minix as a development platform and gradually implement a 386 compatible kernel using the series of papers published by William and Lynne Jolitz on how to port BSD Unix to i386-based PCs that was published from January to November 1991 (11 papers were published) and a couple of available books Back's book, "Programming the 80386" by Crawford and Gelsinger, AT Technical Reference Manual (notably the BIOS listing) and other PC DOS-related tech documentation. Here is the chronology of William and Lynne Jolitz's papers (note that the development started after the third paper was published):

Jan, 1991 The first paper by William and Lynne Jolitz on how to port BSD Unix to i386-based PCs was published in Dr. Dobbs Feb, 1991 The second paper by William and Lynne Jolitz PORTING UNIX TO THE 386:THREE INITIAL PC UTILITIES

Utilities to let you execute GCC-compiled programs in protected mode from MS-DOS, and copy files to a shared portion of disk so MS-DOS and Unix can exchange information. Mar, 1991 The third paper by William and Lynne Jolitz

PORTING UNIX TO THE 386: THE STANDALONE SYSTEM

Using their protected mode program loader, Bill and Lynne create a minimal 80386 protected mode standalone C programming environment for operating systems kernel development. Apr, 1991 The forth paper by William and Lynne Jolitz

PORTING UNIX TO THE 386: LANGUAGE TOOLS CROSS SUPPORT

Bill and Lynne describe "cross" mode operations as they work towards bootstrapping 386BSD. May, 1991 The fifth paper by William and Lynne Jolitz PORTING UNIX TO THE 386:THE INITIAL ROOT FILESYSTEM

Bill and Lynne describe the 386BSD root filesystem, a key component of kernel development. June, 1991 The six paper by William and Lynne Jolitz PORTING UNIX TO THE 386:RESEARCH & THE COMMERCIAL SECTOR

Before beginning the kernel port, Bill and Lynne reflect on 386BSD's place in the world of UNIX. July, 1991 The Seventh paper by William and Lynne Jolitz PORTING UNIX TO THE 386: A STRIPPED-DOWN KERNEL

386BSD's basic kernel incorporates a unique "recursive" paging feature that leverages resources and reduces complexity. Aug, 1991 The 8-th paper by William and Lynne Jolitz PORTING UNIX TO THE 386: THE BASIC KERNEL

The 386BSD kernel services and data structures are initialized in this month's installment. Sept, 1991. The 9-th paper by William and Lynne Jolitz PORTING UNIX TO THE 386:THE BASIC KERNEL Multiprogramming is the focus of this month's installment. Oct, 1991 The 10-th paper by William and Lynne Jolitz

PORTING UNIX TO THE 386: THE BASIC KERNEL Bill and Lynne continue their exploration of multiprogramming and multitasking. Nov, 1991 The 11-th paper by William and Lynne Jolitz

PORTING UNIX TO THE 386: THE BASIC KERNEL It's necessary to understand UNIX device interfaces before integrating device drivers. Bill and Lynne examine BSD kernel/device driver interfaces and how BSD works the miracle of autoconfiguration.

Initially I thought that Linus just started with Minix code and rewrote it gradually, but in 2004 Linus explicitly discounted this hypothesis in his interview to CNET.com (although please do not forget you we deal here with a poker player ;-)

"I didn't 'write the Minix code out of Linux,' " Torvalds said. "I was using Minix when I wrote Linux, but that's in the same sense that you are using Windows when you write your columns. Do your articles contain Windows source code because you use Windows to write them?"

I now think that probably Jolitz's papers played a more important role then "Minix elimination" strategy as the chronology looks very close, almost perfectly matching the development of Linux. Also the initial version (0.01) is extremely Spartan and short more in a style of magazine articles then well commented teaching-oriented (and pretty bulky) code in Minix.

Using Minix as a development platform was not only a very sound way to develop a 386 kernel. It not only help to relate Minix solutions to Jolitz's but provided an instant pool of supporters, Minix enthusiasts, who wanted to run GNU software on Minix. I think Linus also have access to Xenix, at least in the fall of 1991 as his friend Lars Wirzenius used it (as he recollected "FreeBSD didn't exist then. 386BSD did, but it wouldn't have worked on my computer, since it required a 387 co-processor. I used SCO Xenix from fall 1991 to spring or summer of 1992, until Linux matured enough to be a usable environment for writing code. ")

It is this idea that essentially permitted hijacking the advanced part of MINIX community -- the same members, who pressed Andy Tannenbaum to add POSIX compatibility to Minix and were frustrated by rejections of their patches. This part of community was ripe for hijacking :-). Also gradual modification permits gradual improvement of C programming skills and gradual learning of intricacies of Intel 386 architecture.

Again without Minix community the Linux success (and even survival) would be impossible -- Minix community provided not only vital support, but also the necessary legitimacy for the effort. As I mentioned before Linus' attempt to enhance Minix to the level of POSIX compliance was not the first. Earlier sets of Minix patches that enhanced Minix to POSIX compliance were available, but Linux wanted to reengineer the whole kernel to make his kernel freely redistributable, unlike the original Minix. In a sense Minix community was not only educational community, it was also a virtual Unix-style operating system research lab open to Linus.

Without MINIX community Linux success would be impossible

I do not buy the idea that Linus Torvalds started developing the kernel for personal use and "for the fun of it". This is not how one develops such complex things as UNIX kernel: UNIX kernel is not a Tetris clone or a simple utility, it requires huge and disciplined effort.

IMHO "vanity fair" motives probably were dominant (if we believe his sister and Lars Wirzenius opinion about Linus personality), otherwise the project would had been ended long before version 1.0 ;-). But, anyway, for a student with approximately just one year experience in C and a simple terminal emulator as the only (semi) completed project, it was an extremely bold move. And even this simplified path required extreme, fanatical dedication. As Linus noted "For half a year I sat in front of a computer. I had no social life. I ate. I slept. I typed code."

Development started in assembler (all real programmers start with assembler :-) and later switched to C. He described the beginning of the development as following:

"It started out as a project, just testing what a computer could do. I'd just add this and this and it started looking like an operating system. "It was: I'm not interested in getting a job. I know about girls. But I was searching for something interesting. Linux sort of grew out of that. For half a year I sat in front of a computer. I had no social life. I ate. I slept. I typed code.'' Anna Torvalds, Linus' mother, e-mailed to mention that all you had to do to keep him happy was to put him in a spare closet with a good computer and periodically feed him dry pasta. "My heart was in my throat when he was growing up: How on Earth was he going to meet any nice girls that way?'' she says.

In another retrospect interview Linus wrote:

``After that it was plain sailing: hairy coding still, but I had some devices, and debugging was easier. I started using C at this stage, and it certainly speeds up development. This is also when I start to get serious about my megalomaniac ideas to make `a better Minix than Minix'. I was hoping I'd be able to recompile GCC under Linux some day...

Society

Quotes

Bulletin:

History:

Classic books:

Most popular humor pages:

The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D

Copyright © 1996-2020 by Softpanorama Society. www.softpanorama.org was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) in the author free time and without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine. FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes. This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree... You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info Disclaimer: The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose. The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

Last modified: March 12, 2019