This is going to be long and rambling. If you're going to read it, you may want to wait until you're ill, and can't get out of bed, and your head is filled with cotton, and you're eating painkillers like they were candy. I don't want you to feel pain while reading. Being unconscious and having a speech synthesizer read it to you at high speed is an even better option.
Linux is 20 years old this year. That's a long time. Since I was there from the beginning I thought I'd share some memories of what's happened.
In 1988 I graduated from high school, and got accepted into the University of Helsinki to study computer science. The studies started in September, and also in September I got invited to join Spektrum, the Swedish speaking club for those studying math, physics, chemistry, geography, or computer science.
Spektrum is a social club, which was good, since I was, and remain, shy and socially awkward, and the club provided me with a way to easily meet people when I'd moved into a new city. That's also where I met the only other Swedish speaking new CS student of that year, a guy named Linus Torvalds.
That first year, we took some of the same classes, since all new students took those classes, and we met at Spektrum as well. A sort of friendship grew.
Computers were quite expensive back then, and the university provided access to classrooms full of PCs running MS-DOS, plus a few Macs, and some terminals connected to a big VAX/VMS system. I never liked MS-DOS that much, and they were often all in use. I couldn't make heads or tails of the couple of Macs I tried, never having seen a GUI before. Thus I naturally graduated to the terminals, even though VAX/VMS was a horrible system to use, I thought.
After Christmas, things changed a bit. The CS department had a small Ultrix computer hidden away, mostly unused, and I happened to get access to that. Ultrix was DEC's version of Unix. I had read about Unix, particularly in the K&R C book, and liked what I'd read. I had even written a few MS-DOS command line tools that worked like similar Unix tools. It was a joy to get access to a real Unix computer: pipes worked in real time, not via temporary files! Multiple processes at the same time! Filenames weren't unnaturally constricted! It was quite liberating.
While playing around with the Ultrix box, which I think was called kreeta (Finnish for Crete, the island), one day I accidentally typoed the "rm" command. I had previously developed a habit of typoing "em", which was the local version of MicroEMACS, as "rm", so I tried very hard not to typo commands. However, that day, I typoed "rm something" as "rn something", and discovered Usenet.
After I got over the utter amazement of it, and the porters threw me out because the building was closing, I went home. There was a whole world out there, with people who talked about interesting things such as the C language, and I could listen in on their discussions. What could be better?
I told Linus about rn, and he liked it too. We both spent way too much time reading newsgroups. Neither of us posted anything that year, though. There were big warnings against wasting other people's time, and we took them to heart.
The comp.lang.c newsgroup, which quickly became my favorite, had people from Bell Labs participating. Dennis Ritchie himself had fairly recently stopped posting to the group, but others were still there, such as Andrew Koenig, whose book "C Traps and Pitfalls" I'd just read. As a meek first year student, I wouldn't have dared disturb such discourse. Linus wasn't so meek, but he didn't want to post something and be shown to be wrong.
Our studies for the first year ended in May, and in June we both started the semi-mandatory military service, but in different places. I did not see Linus for the next year. The Finnish army taught me to shut up, stop thinking, hurry up to wait, shoot people at a distance, and collect dirty dishes in a restaurant. My IQ dropped markedly during those nine months. I did not enjoy the experience.
I finished my military service in March, and a bit later got a summer job, writing a database application for the bureau for official translators in Finland. The application was written in dBASE IV, which taught me that I should not let others pick my tools for me, and that although it may be possible to write good software using bad tools, it's something to be avoided if at all possible.
That summer, I re-connected with my fellow students from the university, including Linus. One of the students a few years older than Linus and me, Patrik, had a sauna in the building he lived, and he booked it once a week for the group of us. You perverts who think the word sauna is a synonym for brothel can stop imagining orgies: in Finland, saunas are for bathing, medication, even meditation, not sex.
There's a semi-famous picture of Linus, looking naked, drinking beer. The picture was taken at Patrik's, by a fellow student, Stina, and Linus is wearing trousers, but it was a hot summer day, so he didn't have his shirt on. No orgies. Really.
When studies started again that fall, I continued to hang out with Linus at some of the same classes, and the same parties, and also especially in the terminal rooms. We both enjoyed playing with the Unix system, and one of the courses we took that fall was on C and Unix programming. I had known C since 1987, when I taught it to myself using K&R1, and I think Linus had some previous experience with it as well. Most of the course was perhaps a bit too basic for us, so we spent some time on silly things like compressing our answers to exercises into as few lines of code as possible, competing on who got the shorter answer.
We explored the Unix system and related tech in other ways as well, and had great fun. I wrote my first cron job, in order to flood Linus's e-mail, and showed him that yes, indeed, Unix does update the access timestamps in real time (this has now been fixed in Linux, of course). He, at one point, noticed that the university had a Postscript printer, and wrote some PS code by hand to see what it was like, and enjoyed printing pages with weirdly shaped boxes on them.
We had a great time with kreeta, except for the times it crashed. Ultrix was not a high quality system. One of its flaws was that whenever a normal user would call the mknod system call, the kernel would crash within a minute. During the week when the C and Unix programming class discussed mknod, kreeta was down most of the time.
Christmas 1990 came and went, and on January 5, Linus bought a new computer. He'd been using a Sinclair QL at home, but wanted a PC with an Intel 386 CPU. He took his student loan and bought one. He intended to learn about multitasking by learning how the 386 did it. Unfortunately, he also got a copy of Prince of Persia (I think it was), a computer game.
Months later, when he finally got bored of the game, he started actualy learning 386 programming. One day, when I was visiting him, he showed me a tiny program he'd gotten to work, which had threads. It was an amazing thing, even if it didn't look like much: one thread wrote As on the screen, and the other wrote Bs, and you could see threads switching when the As stopped and the Bs started, and a bit later back to As.
The amazing bit was, of course, that Linus had written the whole thing himself. This was not an expensive piece of commercial software written by greying wizards. This was a cool, but quick hack by a student. That was a moment where it became clear to me that even an individual programmer could achieve great things, and that mysteriously magical technology could be really rather simple under the hood.
Of course, I didn't expect Linus's quick hack to actually become anything important, for two reasons. First, it was just As and Bs, and that's really too simple to amount to anything much. Second, I'd known Linus for a while now, and although he was clever, he was also lazy, and sometimes, when he was drunk, he'd start arguing about things and say some of the silliest, most stupid things one can imagine anyone saying.
However, Linus kept playing with multitasking on his 386, and making it do more, piece by piece. One of the things he wanted was to be able to access kreeta via a modem. Rather than use an existing terminal program (there were a bunch), he started adding simple terminal emulation into his multitasking program. He'd have two threads: one would read the keyboard, and write characters into the serial port, and the other would read the serial port, and write them on his screen. After he added some interpretation of VT-100 escape sequences, he had a terminal emulator sufficiently good for reading Usenet from home.
What Linus really wanted, though, was a Unix computer at home. He'd heard of Minix, and he'd bought the book, and got Minix running on his 386 PC. It worked, but nowhere near as well as the machines at the university. Thus he kept prodding Minix, and improving his own multitasking program, and generally hacking away.
That spring of 1991, I got a job on the side, in order to get some money so that I could buy my own PC. The job involved writing some GIS software in C++. I had forgotten my lesson about letting others choose my tools. This work kept me quite busy, so I didn't keep track of much of what Linus did that spring and summer. However, at one point, we were discussing various things about programming, and he was explaining something about writing log messages in his multitasking thing. He'd have functions such as 'print_string("error: i="); print_int(i); print_string("\n");' and I was quite appalled. Linus knew, of course, about printf in the C standard library, which made these things much easier, but since he was, in essence, writing an operating system kernel, the standard library was not available to him, and he didn't know how to write his own printf.
So I wrote an sprintf for him. That was my first contribution to the Linux kernel. It's still there, though it's been transformed into snprintf now (and that's a much better interface, of course). Linus, being himself, thought he could improve the code and hand-optimized some parts of it in ways that made me wince, but as long as he was happy, I didn't really care.
Linus's multitasking program grew, and grew, and gained features such as a hard disk driver, and memory management, and a filesystem. He had enough of a kernel to run some userspace programs, and he made it so that he could compiler programs on Minix, and run them on his own kernel.
By this time, summer of 1991, we had both started posting to Usenet. In August, Linus mentioned his kernel project on comp.os.minix for the first time. Later on, he decided to make the code available, and got one of the admins of ftp.funet.fi to put it there. For this, the project needed a name. Linus wanted to call it Freax, but Ari Lemmke, the ftp.funet.fi admin, decided to call it Linux instead. You can find the Freax name in the Makefile of the earliest Linux releases.
The first Linux release was not installable, as I recall. Linus needed to develop a way to install his operating system. His own computer had slowly morphed from running Minix/386 into a Linux computer. I offered my computer, and Linus came over, and hacked on it until he could install Linux on it, via a boot floppy. The installation process was not exactly easy, requiring hex editing of disk sectors, but it was a step in the right direction.
During the following months, Linux gained interest, and others started hacking on it as well. During Christmas break 1991, Linus added virtual memory to the kernel, and that single step made Linux massively more useful in the real world.
During 1992, Linux's popularity grew quickly, and a lot of people started using it who weren't all kernel hackers. We started a Usenet group of our own, alt.os.linux, which eventually became comp.os.linux, and that eventually split into a whole lot of subgroups. During 1992, I helped start the Linux Documentation Project, and later, when comp.os.linux.announce was created, became one of its moderators. I did not, however, hack on the kernel, still being scared of mysterious magic.
Still in 1992, Linus was thinking he was getting closer to releasing 1.0, so he bumped the version number from 0.12 to 0.95 in one release. Then came 0.96, 0.96b, 0.96c, and I think there may have been a 0.96c++2, even. At some point, I think 0.97, I got tired of the lack of documentation in the kernel and wrote the first README to help people compile their own kernels.
In 1993, both Linus and I got hired by the CS department as assistant teachers (possibly teaching assistant is the correct English term): we helped other students with their homework, and checked that they had done it. This meant that we got to share an office. This was quite good for Linux development. Linus had an income, so he didn't have to worry about that, and more importantly, fast Internet access, which helped things quite a bit, especially since Linux was gaining networking abilities.
For a while, Linux did not quite do everything right with networking, so it was banned from the university network. That gave Linus a lot of motivation to fix it, of course.
One of the things that fast Internet access made possible was that it took only seconds to download most software, such as the Linux kernel. This de-motivated Linus from doing backups, or, indeed, version control, except by doing frequent tarball releases, which got mirrored by many sites.
Fast Interent access also allowed Linus and me to have a look at the various Linux distributions that were popping up. For whatever reason, Linus picked Red Hat. I thought that the Force needed some balance, so I picked Debian. We've both stuck to our choices since.
The emergence of Linux distributions was, of course, a boon for Linux. Even if the systems were much harder to use than, say, Mac or Windows ones, at least it was no longer necessary to fiddle with hex editors to get it to install and boot. This made the user base much larger, and brought in a lot of new people, some of whom also participated in the development of the systems. And the snowball grew faster.
Being employed by the university also helped us when we decided to organize a launch event for Linux version 1.0, in 1994, when it finally happened. We got access to the auditorium, and the head of the CS department gave a speech, and all this gave us enough credibility that there was a fair bit of interest from mainstream media. There was even a television crew, and the footage is occasionally found in various places on the Internet. During the speeches, we had a ceremonial compilation of the 1.0 kernel running in the background.
In 1997, Linus graduated and got hired by Transmeta, and moved to the US, and I mostly lost direct contact with him.
For a view of how I looked at the Linux world in 1998, see Linux Anecdotes.
So, what have I learned during these twenty years?
Most importantly, everyone can make a difference. A big, important accomplishment consists of a very long series of small steps, and having what we call sisu in Finnish helps. It also helps if you're smart and know what you're doing, but remember that 20-year-old who was very stupid when drunk, and also posed half-naked for beer photos? Not so smart, but also didn't give up. It helps to be stupid and ignorant in the right way, so that you think "hey, I can do that" instead of "that must be very difficult to do".
Also most importantly, regardless of how much perseverance you have, and how smart you may be, it helps to have others help you. A revolution takes a decade, at least, but you can't do it at all if you're alone.
Freedom is also the most important thing. The freedom to use, study, share, modify, and share modified software, and the freedom to write software in the first place, are essential. They're essential not just for Linux, but for the well-being of all people in the modern world.
Over the past twenty years, we've seen a revolution. Linux has been a part of it, but not the only part. The Internet has been one of the great enablers, software freedom another one. The core of the revolution has been to turn people from passive consumers patiently watching television, into creating, communicating actors who shape the world. This revolution of freedom is still going on, of course.
Let's hope Linux and free software are around for the next twenty years and help nurture the revolution further.