Many people have read that post by Linus Torvalds in the comp.os.minix newsgroup on Usenet, or at least heard about it. Many more are aware of how that (free) operating system ended up taking over vast swathes of the computing world, and becoming both "big" and "professional." But what about before that famous moment? What were the key events that led to Linus creating that first public release of Linux?

To find out, in December 1996, I went to Finland to interview Linus in his flat in Helsinki. I used some of his replies in a feature that appeared in Wired magazine in August 1997; more of them appeared in my book, Rebel Code: Inside Linux and the open source revolution, published in 2001. What follows is a more detailed explanation of how Linux came into being, as told in Linus' own words.

In the autumn of 1988, Linus had entered Helsinki University to study computer science. It was only two years later that he encountered Unix for the first time:

There was one pretty short Unix course. This was fall 1990, the University had gotten a MicroVAX running Ultrix, whatever, 16-user licence, stuff like this. They used to be a VMS shop entirely, so this small Unix course had a maximum number of people, 16, because we didn't have the hardware for anything more. And you had to wait in line to get to a terminal, but even so I immediately enjoyed Unix. I think it was the programming interface it had. Unix is called complex but it's actually very simple.

One of the coursebooks that Linus used was Andrew Tanenbaum's Operating Systems: Design and Implementation. As well as a wealth of detailed information about how to write an operating system, Tanenbaum's book came with the source code for a small study system called Minix. Originally written for Intel's 8088 processor, it was later ported to the Intel 80386.

Linus has always been something of a connoisseur of chips, and while he had hated the earlier Intel products, he regarded the 80386 as "a lot better than any of the previous chips." The availability of the Unix-like Minix on a half-way decent chip proved decisive: "That's when I actually broke down and got a PC." Until then, he had been programming on a Sinclair QL ("Quantum Leap"), and before that a Commodore Vic-20.

Linus was able to buy his first PC thanks to falling hardware prices and a happy combination of personal circumstances. Because of the way the Finnish university education system was funded, he was able to get a student loan. Since he was living at home with his mother, he didn't need to spend much of that loan on living costs, and could therefore put it to other uses. It was also Christmas time: "I had Christmas money, stuff like that. I remember the first non-holiday day of the New Year I went to buy a PC." That was on 5 January, 1991. Even in 1996, Linus remembered well the specifications of his first PC:

[Intel] 386, DX33, 4 megs of RAM, no co-processor—I actually had to buy a floating-point unit half a year later just because I had the emulation stuff, but there were people who had the floating point unit and I couldn't be sure I could make [Linux] work. 40 megs hard disk, so not very large.

Even though Linus had rushed out to buy his PC as soon as he had scraped together the money to do so, he was unable to plunge into the world of Unix immediately, since it took several months for the Minix floppy disks to turn up. So he passed the time as any real coder would—by playing games like Prince of Persia under MS-DOS. He was also exploring the architecture of the Intel 80386 chip. Linus described his early experiments thus:

I was testing the task-switching capabilities, so what I did was I just made two processes and made them write to the screen and had a timer that switched tasks. One process wrote A, the other wrote B, so I saw AAAA BBBB and so on. The first two months the amount of code I wrote was very small, because it was a lot of details, totally new CPU, I've never programmed Intel before.

Remarkably, that very simple task-switching program turned out to be the seed that grew into the Linux kernel:

At some point I just noticed that hey, I almost have this [kernel] functionality because the two original processes that I did to write out A and B, I changed those two processes to work like a terminal emulation package. You have one process that is reading from the keyboard, and sending to the modem, and the other is reading from the modem and sending to the screen. I had keyboard drivers because I obviously needed some way to communicate with this thing I was writing, and I had driver for text mode VGA and I wrote a driver for the serial line so that I could phone up the University and read news. That was really what I was initially doing, just reading news over a modem.

One advantage of being able to read newsgroups using his simple proto-kernel was that Linus could get answers to technical issues that helped him improve his system:

That summer of '91, I really took advantage of the newsgroups to ask information about the POSIX standard, stuff like that. I was reading news, I was making this emulation package better. Then I wanted to download stuff, so I had to write a disk driver, I had to write a file system so I could read the Minix file system in order to be able to write files and read files to upload them. So essentially when you have task-switching, you have a file system, you have device drivers—that's Unix.

Linux may have existed by this point, but Linus wasn't calling it that yet. Its name came about as a result of Linus's request for information about the POSIX specifications for ensuring compatibility between Unix-like operating systems. A member of the Helsinki University staff, Ari Lemmke, told Linus that POSIX wasn't freely available online, and had to be paid for—hardly an option for an impecunious student. But as Linus recalled:

The same person who told me that the standards weren't available also told me his area of interest was kernels, operating systems. He had this small area on [the FTP server] ftp.funet.fi, and he said: "hey, I'm putting a directory aside for you." So he created the /pub/os/linux directory.

Linux was my working name, so in that sense he didn't really name it, but I never wanted to release it as Linux. Linux was a perfectly good working name, but if I actually used it as the official one people would think that I am egomaniac, and wouldn't take it seriously. So I chose this very bad name "Freax," for "Free Unix." Luckily, Ari Lemmke used this working name instead. And after that he never changed it.

As well as giving Linux a decent name, Lemmke also kickstarted the entire public development process:

The first version [of Linux] I never even announced; I only sent personal emails to a few people who had shown interest [in the newsgroups.] The next version, a few weeks later, was a lot better; I announced that one. The first version was very hurried, partly because the FTP site was there—had been there for a month or something like that—and I felt that I have to make something available because I had this site, I had to upload something to it. So the second version was much closer to what I really wanted, and that one I announced on the Minix newsgroups.

Back in 1996, Linus said: "I don't know how many people got [this first public version in comp.os.minix]—probably 10, 20, this kind of size." Fortunately it was evidently big enough to set in motion a series of events that have resulted in a rather larger number of people now using the 24-year-old lineal descendant of that humble task switcher from 1991.