Linux: The 0.01 Release

Submitted by Jeremy
on July 26, 2007 - 3:56pm

"This is a free minix-like kernel for i386(+) based AT-machines," began the Linux version 0.01 release notes in September of 1991 for the first release of the Linux kernel. "As the version number (0.01) suggests this is not a mature product. Currently only a subset of AT-hardware is supported (hard-disk, screen, keyboard and serial lines), and some of the system calls are not yet fully implemented (notably mount/umount aren't even implemented)." Booting the original 0.01 Linux kernel required bootstrapping it with minix, and the keyboard driver was written in assembly and hard-wired for a Finnish keyboard. The listed features were mostly presented as a comparison to minix and included, efficiently using the 386 chip rather than the older 8088, use of system calls rather than message passing, a fully multithreaded FS, minimal task switching, and visible interrupts. Linus Torvalds noted, "the guiding line when implementing linux was: get it working fast. I wanted the kernel simple, yet powerful enough to run most unix software." In a section titled "Apologies :-)" he noted:

"This isn't yet the 'mother of all operating systems', and anyone who hoped for that will have to wait for the first real release (1.0), and even then you might not want to change from minix. This is a source release for those that are interested in seeing what linux looks like, and it's not really supported yet."

Linus had originally intended to call the new kernel "Freax". According to Wikipedia, the name Linux was actually invented by Ari Lemmke who maintained the ftp.funet.fi FTP server from which the kernel was originally distributed.

The initial post that Linus made about Linux was to the comp.os.minix Usenet group titled, "What would you like to see most in minix". It began:

"I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things)."

Later in the same thread, Linus went on to talk about how unportable the code was:

"Simply, I'd say that porting is impossible. It's mostly in C, but most people wouldn't call what I write C. It uses every conceivable feature of the 386 I could find, as it was also a project to teach me about the 386. As already mentioned, it uses a MMU, for both paging (not to disk yet) and segmentation. It's the segmentation that makes it REALLY 386 dependent (every task has a 64Mb segment for code & data - max 64 tasks in 4Gb. Anybody who needs more than 64Mb/task - tough cookies).

"It also uses every feature of gcc I could find, specifically the __asm__ directive, so that I wouldn't need so much assembly language objects. Some of my 'C'-files (specifically mm.c) are almost as much assembler as C. It would be 'interesting' even to port it to another compiler (though why anybody would want to use anything other than gcc is a mystery).

"Unlike minix, I also happen to LIKE interrupts, so interrupts are handled without trying to hide the reason behind them (I especially like my hard-disk-driver. Anybody else make interrupts drive a state-machine?). All in all it's a porters nightmare. "

Indeed, Linux 1.0 was released on March 13th, 1994 supporting only the 32-bit i386 architecture. However, by the release of Linux 1.2 on March 7th, 1995 it had already been ported to 32-bit MIPS, 32-bit SPARC, and the 64-bit Alpha. By the release of Linux 2.0 on June 9th, 1996 support had also been added for the 32-bit m68k and 32-bit PowerPC architectures. And jumping forward to the Linux 2.6 kernel, first released in 2004, it has been and continues to be ported to numerous additional architectures.


Linux 0.01 release notes:
		Notes for linux release 0.01


		0. Contents of this directory

linux-0.01.tar.Z	- sources to the kernel
bash.Z			- compressed bash binary if you want to test it
update.Z		- compressed update binary
RELNOTES-0.01		- this file


		1. Short intro


This is a free minix-like kernel for i386(+) based AT-machines.  Full
source is included, and this source has been used to produce a running
kernel on two different machines.  Currently there are no kernel
binaries for public viewing, as they have to be recompiled for different
machines.  You need to compile it with gcc (I use 1.40, don't know if
1.37.1 will handle all __asm__-directives), after having changed the
relevant configuration file(s). 

As the version number (0.01) suggests this is not a mature product. 
Currently only a subset of AT-hardware is supported (hard-disk, screen,
keyboard and serial lines), and some of the system calls are not yet
fully implemented (notably mount/umount aren't even implemented).  See
comments or readme's in the code.

This version is also meant mostly for reading - ie if you are interested
in how the system looks like currently.  It will compile and produce a
working kernel, and though I will help in any way I can to get it
working on your machine (mail me), it isn't really supported.  Changes
are frequent, and the first "production" version will probably differ
wildly from this pre-alpha-release. 

Hardware needed for running linux:
	- 386 AT
	- VGA/EGA screen
	- AT-type harddisk controller (IDE is fine)
	- Finnish keyboard (oh, you can use a US keyboard, but not
	  without some practise :-)

The Finnish keyboard is hard-wired, and as I don't have a US one I
cannot change it without major problems. See kernel/keyboard.s for
details. If anybody is willing to make an even partial port, I'd be
grateful. Shouldn't be too hard, as it's tabledriven (it's assembler
though, so ...)

Although linux is a complete kernel, and uses no code from minix or
other sources, almost none of the support routines have yet been coded.
Thus you currently need minix to bootstrap the system. It might be
possible to use the free minix demo-disk to make a filesystem and run
linux without having minix, but I don't know...


		2. Copyrights etc


This kernel is (C) 1991 Linus Torvalds, but all or part of it may be
redistributed provided you do the following:

	- Full source must be available (and free), if not with the
	  distribution then at least on asking for it.

	- Copyright notices must be intact. (In fact, if you distribute
	  only parts of it you may have to add copyrights, as there aren't
	  (C)'s in all files.) Small partial excerpts may be copied
	  without bothering with copyrights.

	- You may not distibute this for a fee, not even "handling"
	  costs.

Mail me at [email blocked] if you have any questions.

Sadly, a kernel by itself gets you nowhere. To get a working system you
need a shell, compilers, a library etc. These are separate parts and may
be under a stricter (or even looser) copyright. Most of the tools used
with linux are GNU software and are under the GNU copyleft. These tools
aren't in the distribution - ask me (or GNU) for more info.


		3. Short technical overview of the kernel.


The linux kernel has been made under minix, and it was my original idea
to make it binary compatible with minix. That was dropped, as the
differences got bigger, but the system still resembles minix a great
deal. Some of the key points are:

	- Efficient use of the possibilities offered by the 386 chip.
	  Minix was written on a 8088, and later ported to other
	  machines - linux takes full advantage of the 386 (which is
	  nice if you /have/ a 386, but makes porting very difficult)

	- No message passing, this is a more traditional approach to
	  unix. System calls are just that - calls. This might or might
	  not be faster, but it does mean we can dispense with some of
	  the problems with messages (message queues etc). Of course, we
	  also miss the nice features :-p.

	- Multithreaded FS - a direct consequence of not using messages.
	  This makes the filesystem a bit (a lot) more complicated, but
	  much nicer. Coupled with a better scheduler, this means that
	  you can actually run several processes concurrently without
	  the performance hit induced by minix.

	- Minimal task switching. This too is a consequence of not using
	  messages. We task switch only when we really want to switch
	  tasks - unlike minix which task-switches whatever you do. This
	  means we can more easily implement 387 support (indeed this is
	  already mostly implemented)

	- Interrupts aren't hidden. Some people (among them Tanenbaum)
	  think interrupts are ugly and should be hidden. Not so IMHO.
	  Due to practical reasons interrupts must be mainly handled by
	  machine code, which is a pity, but they are a part of the code
	  like everything else. Especially device drivers are mostly
	  interrupt routines - see kernel/hd.c etc.

	- There is no distinction between kernel/fs/mm, and they are all
	  linked into the same heap of code. This has it's good sides as
	  well as bad. The code isn't as modular as the minix code, but
	  on the other hand some things are simpler. The different parts
	  of the kernel are under different sub-directories in the
	  source tree, but when running everything happens in the same
	  data/code space.

The guiding line when implementing linux was: get it working fast. I
wanted the kernel simple, yet powerful enough to run most unix software.
The file system I couldn't do much about - it needed to be minix
compatible for practical reasons, and the minix filesystem was simple
enough as it was. The kernel and mm could be simplified, though:

	- Just one data structure for tasks. "Real" unices have task
	  information in several places, I wanted everything in one
	  place.

	- A very simple memory management algorithm, using both the
	  paging and segmentation capabilities of the i386. Currently
	  MM is just two files - memory.c and page.s, just a couple of
	  hundreds of lines of code.

These decisions seem to have worked out well - bugs were easy to spot,
and things work.


		4. The "kernel proper"


All the routines handling tasks are in the subdirectory "kernel". These
include things like 'fork' and 'exit' as well as scheduling and minor
system calls like 'getpid' etc. Here are also the handlers for most
exceptions and traps (not page faults, they are in mm), and all
low-level device drivers (get_hd_block, tty_write etc). Currently all
faults lead to a exit with error code 11 (Segmentation fault), and the
system seems to be relatively stable ("crashme" hasn't - yet).


		5. Memory management


This is the simplest of all parts, and should need only little changes.
It contains entry-points for some things that the rest of the kernel
needs, but mostly copes on it's own, handling page faults as they
happen. Indeed, the rest of the kernel usually doesn't actively allocate
pages, and just writes into user space, letting mm handle any possible
'page-not-present' errors.

Memory is dealt with in two completely different ways - by paging and
segmentation.  First the 386 VM-space (4GB) is divided into a number of
segments (currently 64 segments of 64Mb each), the first of which is the
kernel memory segment, with the complete physical memory identity-mapped
into it.  All kernel functions live within this area. 

Tasks are then given one segment each, to use as they wish. The paging
mechanism sees to filling the segment with the appropriate pages,
keeping track of any duplicate copies (created at a 'fork'), and making
copies on any write. The rest of the system doesn't need to know about
all this.


		6. The file system


As already mentioned, the linux FS is the same as in minix. This makes
crosscompiling from minix easy, and means you can mount a linux
partition from minix (or the other way around as soon as I implement
mount :-). This is only on the logical level though - the actual
routines are very different.

	NOTE! Minix-1.6.16 seems to have a new FS, with minor
	modifications to the 1.5.10 I've been using. Linux
	won't understand the new system.

The main difference is in the fact that minix has a single-threaded
file-system and linux hasn't. Implementing a single-threaded FS is much
easier as you don't need to worry about other processes allocating
buffer blocks etc while you do something else. It also means that you
lose some of the multiprocessing so important to unix.

There are a number of problems (deadlocks/raceconditions) that the linux
kernel needed to address due to multi-threading.  One way to inhibit
race-conditions is to lock everything you need, but as this can lead to
unnecessary blocking I decided never to lock any data structures (unless
actually reading or writing to a physical device).  This has the nice
property that dead-locks cannot happen. 

Sadly it has the not so nice property that race-conditions can happen
almost everywhere.  These are handled by double-checking allocations etc
(see fs/buffer.c and fs/inode.c).  Not letting the kernel schedule a
task while it is in supervisor mode (standard unix practise), means that
all kernel/fs/mm actions are atomic (not counting interrupts, and we are
careful when writing those) if you don't call 'sleep', so that is one of
the things we can count on.


		7. Apologies :-)


This isn't yet the "mother of all operating systems", and anyone who
hoped for that will have to wait for the first real release (1.0), and
even then you might not want to change from minix.  This is a source
release for those that are interested in seeing what linux looks like,
and it's not really supported yet.  Anyone with questions or suggestions
(even bug-reports if you decide to get it working on your system) is
encouraged to mail me. 


		8. Getting it working


Most hardware dependancies will have to be compiled into the system, and
there a number of defines in the file "include/linux/config.h" that you
have to change to get a personalized kernel.  Also you must uncomment
the right "equ" in the file boot/boot.s, telling the bootup-routine what
kind of device your A-floppy is.  After that a simple "make" should make
the file "Image", which you can copy to a floppy (cp Image /dev/PS0 is
what I use with a 1.44Mb floppy).  That's it. 

Without any programs to run, though, the kernel cannot do anything. You
should find binaries for 'update' and 'bash' at the same place you found
this, which will have to be put into the '/bin' directory on the
specified root-device (specified in config.h). Bash must be found under
the name '/bin/sh', as that's what the kernel currently executes. Happy
hacking. 


		Linus Torvalds		[email blocked]
		Petersgatan 2 A 2
		00140 Helsingfors 14
		FINLAND


First posting about Linux:

From: Linus Benedict Torvalds
Newsgroups: comp.os.minix
Subject: Gcc-1.40 and a posix-question
Date: 3 Jul 91 10:00:50 GMT

Hello netlanders,

Due to a project I'm working on (in minix), I'm interested in the posix
standard definition. Could somebody please point me to a (preferably)
machine-readable format of the latest posix rules? Ftp-sites would be
nice.

As an aside for all using gcc on minix - the new version (1.40) has been
out for some weeks, and I decided to test what needed to be done to get
it working on minix (1.37.1, which is the version you can get from
plains is nice, but 1.40 is better :-).  To my surpice, the answer
turned out to be - NOTHING! Gcc-1.40 compiles as-is on minix386 (with
old gcc-1.37.1), with no need to change source files (I changed the
Makefile and some paths, but that's it!).  As default this results in a
compiler that uses floating point insns, but if you'd rather not,
changing 'toplev.c' to define DEFAULT_TARGET from 1 to 0 (this is from
memory - I'm not at my minix-box) will handle that too.  Don't make the
libs, use the old gnulib&libc.a.  I have successfully compiled 1.40 with
itself, and everything works fine (I got the newest versions of gas and
binutils at the same time, as I've heard of bugs with older versions of
ld.c).  Makefile needs some chmem's (and gcc2minix if you're still using
it).

                Linus Torvalds          [email blocked]

PS. Could someone please try to finger me from overseas, as I've
installed a "changing .plan" (made by your's truly), and I'm not certain
it works from outside? It should report a new .plan every time. 

First Linux announcement:

From: Linus Benedict Torvalds [email blocked]
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Date: 25 Aug 91 20:57:08 GMT

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones.  This has been brewing
since april, and is starting to get ready.  I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things).

I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want.  Any suggestions
are welcome, but I won't promise I'll implement them :-)

                Linus (torva... at kruuna.helsinki.fi)

PS.  Yes - it's free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that's all I have :-(.


From: Jyrki Kuoppala [email blocked] Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Date: 25 Aug 91 23:44:50 GMT In article Linus Benedict Torvalds writes: >I've currently ported bash(1.08) and gcc(1.40), and things seem to work. >This implies that I'll get something practical within a few months, and >I'd like to know what features most people would want. Any suggestions >are welcome, but I won't promise I'll implement them :-) Tell us more! Does it need a MMU? >PS. Yes - it's free of any minix code, and it has a multi-threaded fs. >It is NOT protable (uses 386 task switching etc) How much of it is in C? What difficulties will there be in porting? Nobody will believe you about non-portability ;-), and I for one would like to port it to my Amiga (Mach needs a MMU and Minix is not free). As for the features; well, pseudo ttys, BSD sockets, user-mode filesystems (so I can say cat /dev/tcp/kruuna.helsinki.fi/finger), window size in the tty structure, system calls capable of supporting POSIX.1. Oh, and bsd-style long file names. //Jyrki
From: Linus Benedict Torvalds [email blocked] Newsgroups: comp.os.minix Subject: Re: What would you like to see most in minix? Date: 26 Aug 91 11:06:02 GMT In article Jyrki Kuoppala writes: >> [re: my post about my new OS] >Tell us more! Does it need a MMU? Yes, it needs a MMU (sorry everybody), and it specifically needs a 386/486 MMU (see later). >>PS. Yes - it's free of any minix code, and it has a multi-threaded fs. >>It is NOT protable (uses 386 task switching etc) >How much of it is in C? What difficulties will there be in porting? >Nobody will believe you about non-portability ;-), and I for one would >like to port it to my Amiga (Mach needs a MMU and Minix is not free). Simply, I'd say that porting is impossible. It's mostly in C, but most people wouldn't call what I write C. It uses every conceivable feature of the 386 I could find, as it was also a project to teach me about the 386. As already mentioned, it uses a MMU, for both paging (not to disk yet) and segmentation. It's the segmentation that makes it REALLY 386 dependent (every task has a 64Mb segment for code & data - max 64 tasks in 4Gb. Anybody who needs more than 64Mb/task - tough cookies). It also uses every feature of gcc I could find, specifically the __asm__ directive, so that I wouldn't need so much assembly language objects. Some of my "C"-files (specifically mm.c) are almost as much assembler as C. It would be "interesting" even to port it to another compiler (though why anybody would want to use anything other than gcc is a mystery). Unlike minix, I also happen to LIKE interrupts, so interrupts are handled without trying to hide the reason behind them (I especially like my hard-disk-driver. Anybody else make interrupts drive a state- machine?). All in all it's a porters nightmare. >As for the features; well, pseudo ttys, BSD sockets, user-mode >filesystems (so I can say cat /dev/tcp/kruuna.helsinki.fi/finger), >window size in the tty structure, system calls capable of supporting >POSIX.1. Oh, and bsd-style long file names. Most of these seem possible (the tty structure already has stubs for window size), except maybe for the user-mode filesystems. As to POSIX, I'd be delighted to have it, but posix wants money for their papers, so that's not currently an option. In any case these are things that won't be supported for some time yet (first I'll make it a simple minix- lookalike, keyword SIMPLE). Linus [email blocked] PS. To make things really clear - yes I can run gcc on it, and bash, and most of the gnu [bin/file]utilities, but it's not very debugged, and the library is really minimal. It doesn't even support floppy-disks yet. It won't be ready for distribution for a couple of months. Even then it probably won't be able to do much more than minix, and much less in some respects. It will be free though (probably under gnu-license or similar).
From: Alan Barclay [email blocked] Newsgroups: comp.os.minix Subject: Re: What would you like to see most in minix? Date: 27 Aug 91 14:34:32 GMT In article Linus Benedict Torvalds writes: >yet) and segmentation. It's the segmentation that makes it REALLY 386 >dependent (every task has a 64Mb segment for code & data - max 64 tasks >in 4Gb. Anybody who needs more than 64Mb/task - tough cookies). Is that max 64 64Mb tasks or max 64 tasks no matter what their size? -- Alan Barclay iT | E-mail : [email blocked] Barker Lane | BANG-STYLE : [email blocked] CHESTERFIELD S40 1DY | VOICE : +44 246 214241
From: Linus Benedict Torvalds [email blocked] Newsgroups: comp.os.minix Subject: Re: What would you like to see most in minix? Date: 28 Aug 91 10:56:19 GMT In article Alan Barclay writes: >In article Linus Benedict Torvalds writes: >>yet) and segmentation. It's the segmentation that makes it REALLY 386 >>dependent (every task has a 64Mb segment for code & data - max 64 tasks >>in 4Gb. Anybody who needs more than 64Mb/task - tough cookies). >Is that max 64 64Mb tasks or max 64 tasks no matter what their size? I'm afraid that is 64 tasks max (and one is used as swapper), no matter how small they should be. Fragmentation is evil - this is how it was handled. As the current opinion seems to be that 64 Mb is more than enough, but 64 tasks might be a little crowded, I'll probably change the limits be easily changed (to 32Mb/128 tasks for example) with just a recompilation of the kernel. I don't want to be on the machine when someone is spawning >64 processes, though :-) Linus

Early Linux installation guide:
		Installing Linux on your system

Ok, this is a short guide for those people who actually want to get a
running system, not just look at the pretty source code :-). You'll
certainly need minix for most of the steps.


	0.  Back up any important software.  This kernel has been
working beautifully on my machine for some time, and has never destroyed
anything on my hard-disk, but you never can be too careful when it comes
to using the disk directly.  I'd hate to get flames like "you destroyed
my entire collection of Sam Fox nude gifs (all 103 of them), I'll hate
you forever", just because I may have done something wrong.

Double-check your hardware.  If you are using other than EGA/VGA, you'll
have to make the appropriate changes to 'linux/kernel/console.c', which
may not be easy.  If you are able to use the at_wini.c under minix,
linux will probably also like your drive.  If you feel comfortable with
scan-codes, you might want to hack 'linux/kernel/keyboard.s' making it
more practical for your [US|German|...] keyboard.


	1.  Decide on what root device you'll be using.  You can use any
(standard) partition on any of your harddisks, the numbering is the same
as for minix (ie 0x306, which I'm using, means partition 1 on hd2).  It
is certainly possible to use the same device as for minix, but I
wouldn't recommend it.  You'd have to change pathnames (or make a chroot
in init) to get minix and linux to live together peacefully.

I'd recommend making a new filesystem, and filling it with the necessary
files: You need at least the following:

	- /dev/tty0		(same as under minix, ie mknod ...)
	- /dev/tty		(same as under minix)
	- /bin/sh		(link to bash)
	- /bin/update		(I guess this should be /etc/update ...)

Note that linux and minix binaries aren't compatible, although they use
the same (gcc-)header (for ease of cross-compiling), so running one
under the other will result in errors. 


	2.  Compile the source, making necessary changes into the
makefiles and linux/include/linux/config.h and linux/boot/boot.s.  I'm
using a slightly hacked gcc-1.40, to which I have added a -mstring-insns
flag, which uses the i386 string instructions for structure copy etc. 
Removing the flag from all makefiles should do the trick for you.

NOTE! I'm using -Wall, and I'm not seeing many warnings (2 I think, one
about _exit returning although it's volatile - it's ok.) If you get
more warnings when compiling, something's wrong.


	3.  Copy the resultant code to a diskette of the right type. 
Use 'cp Image /dev/PS0' or equivalent. 


	4.  Boot with the new diskette.  If you've done everything right
(and if *I've* done everything right), you should now be running bash as
root.  You can't do much (alias ls='echo *' is a good idea :-), but if
you do run, most other things should work.  I'd be happy to hear from
anybody that has come this far - and I'll send any ported binaries you
might want (and I have).  I'll also put them out for ftp if there is
enough interest.  With gcc, make and uemacs, I've been able to stop
crosscompiling and actually compile natively under linux.  (I also have
a term-emu, sz/rz, sed, etc ...)

The boot-sequence should start with "Loading system...", and then a
"Partition table ok" followed by some root-dev info. If you forget to
make the /dev/tty0-character device, you'll never see anything but the
"loading" message. Hopefully errors will be told to the console, but if
there are problems at boot-up there is a distinct possibility that the
machine just hangs.


	5.  Check the new filesystem regularly with (minix) fsck.  I
haven't got any errors for some time now, but I cannot guarantee that
this means it will never happen.  Due to slight differences in 'unlink',
fsck will report "mode inode XXX not cleared", but that isn't an error,
and you can safely ignore it (if you don't like it, do a fsck -a every
once in a while).  Minix "restore" will not work on a file deleted with
linux - so be extra careful if you have a tendency to delete files you
don't really want to.

Logging out from the "login-shell" will automatically do a sync, and
will leave you hanging without any processes (except update, which isn't
much fun), so do the "three-finger-salute" to restart dos/minix/linux or
whatever.


	6.  Mail me and ask about problems/updates etc.  Even more
welcome are success-reports (yeah, sure), and bugreports or even patches
(or pointers to corrections).


NOTE!!! I haven't included diffs with the binaries I've posted for the
simple reason that there aren't any - I've had this silly idea that I'd
rather change the OS than do a lot of porting.  All source to the
binaries can be found on nic.funet.fi under /pub/gnu or /pub/unix. 
Changes have been to makefiles or configuration files, and anybody
interested in them might want to contact me. Mostly it's been a matter
of adding a -DUSG to makefiles.

The one exception if gcc - I've made some hacks on it (string-insns),
and have got it (with the gracious help of Bruce Evans) to correctly
emit software floating point. I haven't got diffs to that one either, as
my hard-disk is overflowing and I cannot accomodate both originals and
changes, but as per the GNU copyleft I'll make them available if
someone wants them. I hope nobody want's them :-)


		Linus		[email blocked]

README about early pictures of Linus Torvalds:
I finally got these made, and even managed to persuade Linus into
allowing me to publish three pictures instead of only the first one.
(He still vetoes the one with the toy moose... :-)  

linus1.gif, linus2.gif, linus3.gif

        Three pictures of Linus Torvalds, showing what a despicable
        figure he is in real life.  The beer is from the pre-Linux
        era, so it's not virtual.

In nic.funet.fi: pub/OS/Linux/doc/PEOPLE.

--
Lars.Wirzenius [email blocked]  (finger wirzeniu at klaava.helsinki.fi)
   MS-DOS, you can't live with it, you can live without it.
AttachmentSize
linux-0.01.tar.bz261.88 KB
linux-0.01.tar.bz2.sign248 bytes
linux-0.01.tar.gz71.38 KB
linux-0.01.tar.gz.sign248 bytes
linus1.gif104.93 KB
linus2.gif72.24 KB
linus3.gif123.49 KB

just a hobby

Anonymous (not verified)
on
July 26, 2007 - 4:29pm

"just a hobby, won't be big and professional like gnu"

Yay, that hurds. ;)

sockets in /dev

Anonymous (not verified)
on
July 26, 2007 - 4:36pm

"cat /dev/tcp/kruuna.helsinki.fi/finger"

Nice, where did this idea go? I only know something like that from gawk. ;)

Thank you Jeremy for that article, and for the other that recently appeared pretty frequently.

Andreas Coward

That's part of bash, at

on
July 26, 2007 - 4:57pm

That's part of bash, at least it is if your distro compiled it with that option enabled.

It's been done

Anonymous (not verified)
on
July 27, 2007 - 11:59am

Hurd and plan9 do it.

Hmm...

Alex Buell (not verified)
on
July 26, 2007 - 6:33pm

I've just tried to compile linux 0.01 with GCC 4.1.2 tonight for a laugh. Might try and fix these errors and get it to build a working kernel...

What hardware are you going

Anonymous (not verified)
on
July 26, 2007 - 6:58pm

What hardware are you going to run it on? Dosbox?

I'd enjoy running 0.01 on my laptop but first I'd have to backport ACPI...!

Install the x386 emulator

zoroaster (not verified)
on
July 27, 2007 - 1:12am

Install the x386 emulator and compile the ancient gcc/linux on it. It should all build even though you can't run it on anything (unless of course you created a console for it under the emulator).

Don't laugh - even in 2001 I was running an emulator on a Pentium machine to hack software and write new code for an Apple2e. Today you'll find numerous PDP11 implementations on PGAL and FPGA to replace subsystems in legacy devices. Come to think of it, there are still numerous tools which people run off a 1.4M floppy with DOS!

Now, 15 years later, Linux can still be built for a Genuine 80386 machine and it will run well (as well as you can do with these ancient machines). Anyone care to try VisDuh on an x386?

Simply, I'd say that porting is impossible.

Fred Flinta (not verified)
on
July 26, 2007 - 7:51pm

"Simply, I'd say that porting is impossible." -- Linus Torvalds (26th Aug, 1991)

Funny how he said that, and now Linux is the most ported operating system in the history of computing.

http://en.wikipedia.org/wiki/Linux_kernel_portability_and_supported_arch...

Portability?

Timothy (not verified)
on
July 27, 2007 - 12:29am

640k should be enough for anybody

this is truely the remarkable part

whitepenguin (not verified)
on
July 27, 2007 - 10:50am

yet only 10 little years ago people still took the rule of mores law for granted.

man is never able to conceive the rapid growth of technology to this day the corporate world is still in shame for not being all they can be

If you look at NetBSD's

Anonymous (not verified)
on
July 27, 2007 - 7:50am

If you look at NetBSD's ports page, they support 60 ports on 16 CPU architecures. The 2.6.22 tree on my computer only has 27 trees off the 'arch' directory, so I'd contest your 'most ported' comment.

I count 74 ports on 27

Anonymous (not verified)
on
July 27, 2007 - 8:19am

I count 74 ports on 27 architectures for Linux. That's more than NetBSD's 60 ports on 16 architectures.

You're comparing apples with

Anonymous (not verified)
on
July 27, 2007 - 8:30am

You're comparing apples with oranges. NetBSD supports $x architectures, kernel *and* userland, from a single source tree. Linux, doesn't: only $y ports of the *kernel* are there.

In 15 years, has anyone ever

Anonymous (not verified)
on
July 27, 2007 - 9:41am

In 15 years, has anyone ever argued Linux was more than just a kernel? Your statement seems obvious. If you want user space you go to GNU.

Regardless, that puts us at 16 archs for the NetBSD kernel and 27 archs for the Linux kernel. Just comparing Kernels, Linux has more.

Take a look at the original

Anonymous (not verified)
on
July 27, 2007 - 11:31am

Take a look at the original post: if you count the number of architectures on the Linux source code tree, you count the number of apples (ports of the kernel). The number of NetBSD ports (from NetBSD's ports page) includes both kernel *and* userland (i.e. not just apples, but oranges as well).

In other words, I think it makes little sense to compare those two naked numbers.

If you compare userland then

Anonymous (not verified)
on
July 27, 2007 - 10:57am

If you compare userland then you must add GNU tools too.

But NetBSD themselves say that they USED TO have the upper hand but Linux, even though the architecture design wasnt as good as NetBSD, has catched them up and superceded them finally.

It was discussed in emails about problems of NetBSD

If you look at NetBSD's

Anonymous (not verified)
on
July 27, 2007 - 8:42am

If you look at NetBSD's ports page, they support 60 ports on 16 CPU architecures. The 2.6.22 tree on my computer only has 27 trees off the 'arch' directory, so I'd contest your 'most ported' comment.
I don't see how those number support your argument. The subtree of 'arch' are
CPU architectures and 27 > 16. Even if you remove trees that are arguably just variants of others (sparc/sparc64, arm/arm26, m68k/m68knommu) you are still left with 19 > 16.

yah well.. it's still not as

Anonymous (not verified)
on
July 27, 2007 - 9:15am

yah well.. it's still not as ported as UNIX!

According to the Wikipedia

Greviant (not verified)
on
July 27, 2007 - 9:16am

NetBSD has been ported to a large number of 32- and 64-bit architectures, from VAX minicomputers to Pocket PC PDAs. The NetBSD motto is "Of course it runs NetBSD." As of 2007, NetBSD supports 54+ hardware platforms (comprising around 17 different processor architectures). Although the Linux 2.6 kernel includes support for more processor architectures[1], NetBSD supports more platforms than any single Linux distribution. The kernel and userland for these platforms are all built from a central unified source-code tree managed by CVS.

This is the source indicated by '[1]'
Kroah-Hartman, Greg (2006-07-23). Myths, Lies, and Truths about the Linux kernel. Retrieved on 2007-06-11.

NetBSD supports more

Anonymous (not verified)
on
July 28, 2007 - 5:16pm

NetBSD supports more platforms than any single Linux distribution.

You sure? A quick count show that Snapgear Linux top the 54+ hardware platforms with a big margin. That's kernel and userland right there, from one source tree too.

Ahh, those were the days

Kris2k (not verified)
on
July 27, 2007 - 9:08am

Indeed,

Those were the days.... although I think I started around 1995 with kernel 1.1/1.2 after picking-up the slack distro cd's from a computer bookstore. I still remember emailing Linus for help on getting my nat working.

To my surprise; he answered! Too bad I don't have the email anymore; I think I would have framed-it ;)

In any case; it's funny how such a small project at the time is now such a mainstream choice in computing environments.

Great work!

Kris

ports & mainstream

krazy (not verified)
on
July 27, 2007 - 1:13pm

Come on, until it's accepted in homes and has software to go along with it without home users having to pay someone to install a codec or browser plug-in it is not mainstream and hence who cares how many ports you have.

your name suits you.

not krazy (not verified)
on
July 27, 2007 - 3:31pm

your name suits you.

ports & mainstream

someone197 (not verified)
on
July 28, 2007 - 11:24am

well it maybe not in homes yet, but it sure is in servers .. and from a small learning project, it has turned into a multi-million dollars projects ..
btw: in most modern distros, you don't have to pay anybody to install codec or browser plug-in .. all you need to do is _read_ something you have to do no matter what os you are using ..

Does Torvolds have a neck?

Anonymous (not verified)
on
July 27, 2007 - 9:17am

Does Torvolds have a neck?

No, just a gigantic adam's

Anonymous (not verified)
on
July 27, 2007 - 10:50am

No, just a gigantic adam's apple.

That's not an adams apple...

Anonymous (not verified)
on
July 27, 2007 - 11:09am

That's not an adam's apple... it's the beginning of a cancerous ego.

Look how much it's swelled over the past decade.

Ya, well, if you created

Anonymous (not verified)
on
July 27, 2007 - 12:13pm

Ya, well, if you created something that drives a market worth billions and billions of dollars today, I would say you were entitled to thinking you had done something important. Please come back and make your statement after you have done something equally important!

ttyl

He was not alone

Anonymous (not verified)
on
July 28, 2007 - 10:57am

He couldn't have done it without the thousands of code contributors around the world. To say that he created it is not accurate.

The first kernel was made by

rafastv (not verified)
on
October 14, 2007 - 12:50pm

The first kernel was made by himself, only because you can't do it, don't assume others can't. He did created since it was his project, and he was the first developer who by the way is still active today...you may think of him as the director from the movie Linux if you wish.

That's not an adams apple...

neminem (not verified)
on
August 3, 2007 - 12:43pm

it's a space station!

Sorry, couldn't resist.

After considerate time spent

Anonymous (not verified)
on
July 27, 2007 - 10:55am

After considerate time spent on research, i am finally able to answer

a) Linus has a neck
b) You lack a brain

He has a neck and you lack a

Anonymous (not verified)
on
July 27, 2007 - 10:56am

He has a neck and you lack a brain!

And you got a point!

Anonymous (not verified)
on
July 28, 2007 - 8:39am

And you got a point!

You have a point.

Anonymous (not verified)
on
July 27, 2007 - 9:14pm

No, it appears he doesn't.

I think he's developed a

Anonymous (not verified)
on
July 29, 2007 - 6:29am

I think he's developed a suitable torso position to sustain long hours of sitting on a chair staring at computer screen and typing code.

so he was lying even then

Anonymous (not verified)
on
July 27, 2007 - 10:41am

funny

Interesting that the comments have been preserved

Joshua Davies (not verified)
on
July 27, 2007 - 10:45am

I'm assuming from the article (although it doesn't say so explicitly) that the attached "linux-0.01.tar.gz" is actually the same gzip that Linus distributed with the original usenet post. I always assumed that the comments (for example, all the editorials in boot.s) were modified over time, but the comments in the 0.01 source tree are pretty much all present in the 2.6.21 source tree (plus a few others). It's interesting to see how many of these comments came from Linus himself.

Thanks for the article

RHart (not verified)
on
July 28, 2007 - 11:28am

I appreciate this article. I'm not a kernel hacker, but really enjoyed learning the history.

Thanks

teia (not verified)
on
September 30, 2007 - 6:33pm

Thanks for posting that. A great piece of history...

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.