L i n u x N e w s

A summary of the goings-on of the Linux community

Issue #3, October 18 through 26, 1992

"The nightmare continues"

*** Interview

Why is Linux News better than BYTE, CACM, the National Inquirer, and sliced bread? We interview Linus! In this first-ever, breathtaking, revealing interview, the Grand Wizard Linus tells it all! Well, almost...

LN: Tell us a bit of yourself and your background. Age, education, occupation, family, pets, hobbies, computing history, etc.

Linus: Hmm. I'm 22 (as some avid kernel source readers have already found out: there is a hidden clue in there somewhere...), and am (slowly) working my way towards a fil.kand (MSc? whatever) in computer science at the University of Helsinki. I'm currently in my fourth year (hmm.. fifth, but one was spent in the army) of studies, and I expect to sit here studying for a long time to come.

I still live at home (which is why I can afford to work on Linux and study at the same time without working too) with my (100% white) cat (Mithrandir, but it's called everything from "randi" to "klomppen" depending on my mood) and my sister and mother. The fun never ends.

I started with computers (a VIC-20) when I was about 11, first with BASIC, then learning 6502 machine code (assemblers are for wimps). I looked on with envy while my friends got their C-64's (I didn't have any more money then than I have now), but was eventually able to get a Sinclair QL and get some real programming done under a multitasking (albeit somewhat weird) system.

On the sinclair QL I continued to program in assembly (The QL BASIC (SuperBasic) was ok, but I wasn't interested), and I wrote various more-or-less useless programs (ranging from a FORTH compiler and an editor-assembler system of my own to pac-man to a msdos compatible floppy disk driver). The QL was a fun machine, but there weren't very many of them in Finland, and although I was generally happy to write my own programs (still am), it did teach me to buy hardware that actually is supported.

LN: When and why did you start writing Linux?

Linus: I took this course on UNIX and C at the university in the fall of 1990, and I got hooked. I had naturally seen some of the PC-contemptibles running msdos, and I was relatively happy with my QL, although some of the 386's were a lot faster. But one of the books we read during the course was "Operating Systems, Design and Implementation" by Tanenbaum, and that way I learnt about Minix. I wanted my home machine to have a similar setup to the suns at the university, and Minix seemed like a good candidate.

So when I had scrounged up enough money, I bought myself an AT-386 compatible machine (well.. I didn't have enough money, so I'm still paying on it, but it seems I'll get enough money for Linux to finally pay off the last rates). I had long since decided that anything less than a 386 wasn't worth it, and with Minix on it, I thought I'd have a nice enough system.

As it turned out, Minix wasn't available in Finland (at least I wasn't able to find it easily), so while I got my machine on January 5th 1991 (easy date to remember due to the monthly payments :-), I was forced to run DOS on it for a couple of months while waiting for the Minix disks. So Jan-Feb was spent about 70-30 playing "Prince of Persia" and getting aquainted with the machine.

When Minix finally arrived, I had solved "PoP", and knew a smattering of 386 machine code (enough to be able to get the machine into protected mode and sit there looping). So I installed Minix (leaving some room for "PoP" on a DOS partition), and started hacking.

Getting Minix wasn't altogether a pleasant experience: the keyboard bindings were wrong, and it didn't exactly act like the suns I was used to (ugghh. I *hate* the bourne shell for interactive work). The keyboard was easy to correct (although I didn't like the Minix keyboard driver code), and applying Bruce Evans' 386-patches made the system a bit more "real".

So somewhere around March-91, I had a 386 system running Minix-386, and I was able to install awb's gcc-1.37.1 port. After that, I was able to port bash to the resulting mess, and things looked a bit better. I also spent my time generally fooling around (porting gcc-1.40 and various other programs), and kept on learning about the 386 while doing so (writing small boot-disks that would set up a protected mode environment and print out various inane messages).

I had noticed by that time that Minix wasn't enough even with the 386 patches (various troublesome problems: no job control, ugly memory management, no fpu support etc). So I slowly started to try to make something out of my protected mode trials, and the result is Linux.

LN: Please give a short summary of the history of Linux.

Linus: Difficult. "Linux" didn't really exist until about August-91 - before that what I had was essentially just a very basic protected mode system that had evolved from a glorified "Hello world" program into a even more glorified terminal emulator. Linux stopped for quite a while at the terminal emulator stage: I played around with Minix, and used my protected mode program to read news from the univerity machine. No down/upload, but it did a fair vt100 emulation, and did it by using two tasks which communicated from keybodard->modem and modem->screen.

By mid-summer -91, "Linux" was able to read the disk (joyful moment), and eventually had a small and stupid disk driver and a simple buffer cache. So I started out trying to make a filesystem, and used the Minix fs for simple practical reasons: that way I already had a file layout I could test things on. After some more programming (talk about glossing things over), I had a very simple UNIX that had some of the basic functionalities of the real thing: I could run small test-programs under it.

By that time I looked around for some standards texts - I decided early on that I didn't want to write the user-level programs, and that in order to easily port things I'd either have to make the new system compatible with Minix (ugghh) or follow some other kind of standard. What I wanted was a POSIX guide, not so much to be 100% posix, but in order not to do anything really stupid I'd regret later.

My quest for the posix standards failed, as the posix standard committee sells the standard to feed itself as I found out, but I did get a good pointer to the (then very alpha and unsupported) GNU libc.a, which had an early manual accompanying it. The manual was of some help, but the biggest help was actually the contact to the person who pointed it out to me: arl@sauna.hut.fi. He was/is the organizer of the pub/OS subdirectory at nic.funet.fi, and was interested in giving Linux a home at nic.

Back then, I was only idly thinking about making my system available (and I had no real time-table), but arl happily created a pub/OS/Linux subdirectory at nic, and thus also gave the system it's name. I wasn't really ready for a release yet, so the directory contained just a README for about a month ("this directory is for the freely distributable Minix clone" or something like that). Arl probably thought the project wouldn't come to anything.

Anyway, around the end of August-91 or so, I had a system that actually worked somewhat: I was able to run the Minix shell (recompiled with new libraries) under it, and some other things also worked. I released Linux-0.01 in September, telling about it by mail to those who had shown interest in it when I asked around on the minix newsgroup. 0.01 was a source-only release, and I don't think anybody actually compiled it, but it was a statement of intent, and people could look at the sources if they wished. I don't think more than about 5-10 people ever looked at it - I wasn't yet too happy about it, so I didn't announce it publically anywhere.

A few weeks later (October 5th by the minix news-archives), I had gotten my act together sufficiently to release 0.02, along with a couple of binaries you could run under Linux (bash, gcc, update and sync, I believe). It still needed minix-386 to compile the kernel, as the harddisk parameters were hardcoded into the hd driver, but I know some people had it up and running: arl even sent me some ftp-statistics about it (which I've sadly deleted by now). Gcc wasn't reliable under linux yet: it couldn't compile big files due to various buffer-cache problems, but you could get small programs going even under 0.02.

Not much later, I released 0.03, which actually worked pretty well - the buffer cache mostly worked, as did most other things. Heady with my unexpected success, I called the next version 0.10, and by that time I already got comments from early beta-testers, as well as actual patches. The linux community wasn't much: maybe 10-20 minix users who enjoyed hacking a new kernel.

After 0.10 came 0.11, and things were pretty much plain sailing. The system was stable enough to be used for further developement, and it was "just" a matter of correcting bugs and extending the system. I added swapping to the system in three days just before X-mas 91, and was finally able to say that I was no longer playing catch-up with Minix. The swapping code was ugly and not very well tested: it actually had bad bugs in it until I needed it myself when X11 came around, but it was something of a milestone. The next version (0.12) came out exactly (?) one year after I bought my computer (Jan 5th -92), and it was the version that finally got popular: by that time it was a very much valid alternative to Minix, and people started getting interested.

Later versions (0.95 etc) have had a lot of new features, and quite a few bug-fixes. There have also been major re-writes (first the fs was slowly changed to have a vfs layer, then the kernel sleep/wakeup primitives got rewritten, and then the mm got restructured). In spite of that, I think 0.12 was what might have been called 1.0 - it had the basic features, and worked.

LN: Have you enjoyed the past year and a half? Have you liked some things especially, have there been things you haven't liked?

Linus: It's definitely been fun. Things have changed pretty radically: the early couple of months were solitary hacking runs with 5-10 reboots a day to check out bugfixes/features - seeing the system evolve noticeably in a relatively short time. Now, most of my Linux hacking time goes into design (new features do take some more thought now) and/or administrative things like keeping up with linux mails etc - it's seldom a question of 40+ hours a week of pure hacking.

Getting mail (within limits) is fun: especially if it's 99% positive, as it has been. And people have been generally enthusiastic, sending patches, ideas, requests for features, etc. There are downsides: before the newsgroup got founded, I often got more than 70 mails a day. Things have calmed down significantly: while I still get 20-40 mails per day, many of them are from the mailing-lists and not to me personally, so that I can essentially ignore them if they aren't interesting.

Negative things have been mostly due to driver problems: while people have been very nice about it, it's still not fun getting mail about "the system from hell that ate all their files". Especially if I haven't had a clue about what could be wrong. Other problems have included just lack of time and different priorities: some people have gotten impatient when I haven't included some special feature or other. I usually need some kick-starting if it's not something I'm especially interested in.

LN: Why is Linux copylefted? The copyright was different in the early versions. Why did it change? Do you support the GNU view of software in general? What are your feelings about freeware, shareware, and commercial software?

Linus: One of the basic principles has always been being that it should be freely distributable without any money-begging. I generally dislike shareware: I feel guilty about not paying, so I don't use it, but on the other hand it is irritating to know that it's there. Illogical, but that's how I feel.

Early versions of Linux had a very strict copyright: it disallowed any payments at all (not even copying costs etc), while otherwise being similar to the GNU copyleft (ie freely distributable assuming full source is made available). It was probably an over-reaction to the dislike I felt against the way Minix had been set up: I thought (and still do) that Minix would have been better off had it been freely available by ftp or similar.

The copyright got changed with version 0.12, as there were a couple of mails even back then asking about the possibility of a copying service or similar. After removing that clause from the copying conditions, I essentially had the GNU copyleft (without the legal verbiage), so I decided I might as well use the copyleft as-is. And as Linux depended (still does) heavily on copylefted programs, it's only natural that the kernel should be copylefted as well.

LN: When are you planning the 1.0 release, and what do you expect it to include?

Linus: I've planned the 1.0 release for a long time, and I've always waited just a bit longer. Right now my final deadline is "before X-mas", but I hope it would be ready before December. No major new features: I want some cleanups and to get rid of bugs, but it's nothing special I'm waiting for right now.

LN: How do you feel about Minix, 386BSD, and Hurd and their authors? Are they rivals, or or allies?

Linus: 386BSD and Hurd are most definitely allies - I'll be happy to help them any way I can (for 386BSD I was already able to help with the math-emulator, and I've been in contact with some others re: vm86 etc). If 386BSD had been available a year earlier, I would probably never have started on Linux, but as it is, I'm happy to say that 386BSD didn't automatically mean that Linux wasn't worth it. Both 386BSD and Linux have their points, and I naturally think Linux is more fun.

As to Hurd, I don't know when it will be ready nor what it will look like. But it will be different enough that I don't think there is any point in considering it a rival. I doubt Linux will be here to stay, and maybe Hurd is the wave of the future (and maybe not), but at the very least it's an interesting project.

Minix... Hmm. It's no longer a rival, unless ast does something really unexpected with it - the niches are simply too different. Linux won't work on many machines that Minix runs happily on (x86, x<3, amiga, mac etc), and even on a 386, Minix is still probably preferable as a teaching tool due to the book. But for anybody who used Minix to actually get a UNIX environment at home, I don't see any reason to stay with it, as both 386BSD and Linux are free and give much better features.

On the other hand, I have to admit to a very unbecoming (but understandable, I hope) feeling of glee when I saw that c.o.linux had finally more readers than c.o.minix. There was a heated discussion about Linux on the Minix newsgroup back when c.o.linux (actually, alt.os.linux at that time) had just begun, and ast tried to ridicule it (one of his comments on c.o.minix being that I wouldn't have passed his course in OS design with such a bad system..). Ast and I mailed about it, and it left a slightly bitter after-taste.

LN: The Jolitzes suggested a while ago a contest between 386BSD and Linux, what do you think about it?

Linus: I don't necessarily think it would be a good idea: I cannot imagine how it would be "judged" or whatever. The only contact Linux and 386BSD has had has been only positive (aside from occasional flame-wars, but it's a religious argument..), and I don't think there is any need to try to get any kind of rivalry going. The argument seems to have been that such a contest would make both systems better, but I frankly doubt that is the case: both 386BSD and Linux will evolve even without any special contest held between them, and a contest would just result in more rivalry and flame-wars.

Linux and 386BSD have totally different goals - 386BSD wants to be BSD, while Linux just is whatever we make of it. 386BSD was helpful in giving me some ideas (I read the Jolitz column in DDJ with interest), and while it's a bit scary to have a big and well known UNIX kernel that fills a similar niche as Linux, there is no reason to choose one over the other on a larger scale. People will prefer one or the other, and if either shows itself to be much better/popular, so be it.

LN: What about the future? Are you planning to support Linux, or do you intend to retire and let it survive by itself?

Linus: I'm most certainly going to continue to support it, until it either dies out or merges with something else. That doesn't necessarily mean I'll make weekly patches for the rest of my life, but hopefully they won't be needed as much when things stabilize.

LN: Are you going to write a book about Linux? Or a detailed history, > with all the gory details revelead?

Linus: I don't like writing documentation, and writing a book is certainly not planned. There is some pressure for me to write a history, hope this interview will server at least partly as one. And there certainly won't be any gory details: if there were, I've already forgotten them (or flushed them: I have sadly deleted my correspondence with ast along with all other old mail. I simply don't have room for it, and I'm too lazy to back it up.)

LN: Is Linux your dream operating system? Are there things that you dislike, or would like to do differently, if you would start over from scratch?

Linus: There are things I'd like to change - but then it wouldn't be UNIX any more. There are good points to a microkernelish design and distributed systems: I just haven't got the resources to do anything about it. I'd like to do a more exotic system, with better support for pending I/O, distribution of processes etc, but with just one 386 at home, I'm not likely to do anything about it in the next few years. And maybe I'll have found a new area of interest by then anyway..

But in general, I think Linux does what I was looking for pretty well. There are details I dislike in the kernel, but the basic ideas have worked well, and there are no major ugly warts in the Linux design. So in that way it is kind of a dream system - just enough problems to keep up the interest, and keep it evolving. No program is ever perfect, and operating systems are interesting programs: there are a lot of things you have to keep track of, and a lot of different ways you can solve the problems. Linux does it one way: 386BSD has many basic similarities in design, but some major differences in implementation. Then there are OS's like Hurd (well, Mach right now) and Amoeba which have a totally different design strategy, giving different problems and solutions. There may be one right way of doing things, but I doubt it: and Linux doesn't do too badly.