"BACK UP ANY IMPORTANT DATA," began the Linux 0.10 installation instructions. "Linux accesses your hardware directly, and if your hardware differs from mine, you could be in for a nasty surprise. Doublecheck that your hardware is compatible: AT style harddisk, VGA controller." The installation guide explained that there were five major steps in getting Linux installed and running on your computer, including the above first step of backing up the system. The second step was to use Minix and the mkfs command to create a new filesystem on an empty partition of your hard drive. Third you used dd to write the 'boot' and 'root' Linux disk images to floppy disks. The fourth step was actually booting from the floppies, "having a floppy as root-device isn't very fast (especially on a machine with less than 6MB total ram -> small buffer cache), but it works (I hope)." The final step was mounting the empty hard disk partition, copying the files from the floppy disks to the partition, and creating the necessary /dev files with mknod, "you should now have a filesystem you [can] boot from. Play around a bit, try to get acquainted with the new system. Log out when you've had enough." The document noted that while it was possible to install Linux using DOS, the instructions were intended for people using Minix:
"In general, this version is still meant for people with minix: they are more used to the system, and can do some things that DOS-based persons cannot. If you have only DOS, expect some troubles. As the version number suggests, this is still not the final product."
Version 0.10:
Unfortunately, no known copies of the 0.10 release announcement have survived. Numerous websites state that the 0.10 kernel was released on December 3rd, 1991, but various mailing list posts from that time period make it clear that it was actually released in early November.
In a 1992 interview Linus noted the version jump from 0.03 to 0.10:
"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."
In a 1992 email, Linus noted that at the time of the 0.10 release development was still being done under Minix. He further noted:
"After 0.03 I decided that the next version was actually useable (it was, kind of, but boy is X under 0.96 more impressive), and I called the next version 0.10 (November?). It still had a rather serious bug in the buffer-cache handling code, but after patching that, it was pretty ok."
Linux-activists mailing list:
The linux-activists mailing list was created in early October of 1991 and was the first Linux-specific discussion forum. Unfortunately the earliest postings to the linux-activists mailing list have not been preserved (which likely include the missing 0.03 and 0.10 release announcements).
Fortunately for early-Linux history buffs, Theodore T'so discovered Linux in early November of 1991 and subscribed to the linux-activists mailing list, saving an archive of the list from that time. He also saved a slightly-modified version of 0.10, the only known version of the 0.10 source code. In his first posting to linux-activists, Theodore noted that he had established a Linux FTP site in the US, adding:
"I've just recently heard about Linux from the Hurd mailing list, and from looking at the source code it looks very, very exciting. I haven't managed to install it on my hard disk yet (it looks like I'll need to blow away OS/2 in order to reclaim one of the four primary partitions --- shucks), but just from looking at the source code there are a bunch of things which look like interesting projects --- like supporting DOS extended partitions and multiple threads per task. Now, all I need to do is find some time to do some playing.... :-)"
Theodore was actively porting software to Linux and hacking the kernel that weekend. He quickly ported GNU diff, GNU sed, patch and tr, "they pretty much built without needing to make any changes --- the only real problem which I encountered while trying to build them is that the configuration progam which you need to run to build sed itself wants to uses sed to build the Makefile. Oops. :-)" He also patched tools/build.c to make it possible to dynamically specify your root device, "add to that a definition in the makefile for $(ROOTDEV), and customizing kernels for a particular system becomes a snap!". Finally, while attempting to compile GCC 2.0 he ran into some filesystem corruption problems.
Linus tracked down the filesystem corruption problems and issued the first patch against the 0.10 kernel, a change to the buffer.c source file:
"Re: file-system corruption: You were right. I think I've found the bug, and will send out corrected "buffer.c" sometime today. Hopefully that cures the problem. First kernel patch for this version: not too bad."
First Linux FAQ:
With a growing user community, the need for a collection of frequently asked questions became apparent. On November 8th, Linus sent out a request for questions (and possibly even answers), noting that the actual FAQ would be maintained by Robert Blum:
"Linux could definitely do with a FAQ (Frequently Asked Questions for all you who haven't been on the net all your life :-). And as I'm sure anybody who has read my 'help-files' would agree, I'm not the best possible person to write it. Thus a new project: getting a FAQ done with help from the linux-activists."
In the same email, Linus noted that with 0.10 most people were finally able to get Linux working, "it seems most people who had problems have got it working now. To summarize: It works on SX's and with only 2M of memory. It also 'works' with a monochrome card, but you won't be able to see anything. Mtools doesn't understand DOS 5.0 (big partitions at least), but Linux seems to boot ok anyway. Anybody who simply cannot get it to boot out there?"
He also noted that he found inspiration to write a Linux fsck utility (originally only capable of detecting fielsystem problems, not actually fixing them) and actively develop from Linux itself when he accidentally overwrote his minix partition, "I wrote over my minix-partition yesterday (don't even ask why - some things are better forgotten :-), and although I got minix-386 up and running again, it's kind of limping now (no bash, no make). It seems I'll have to write fdisk/mkfs/fsck for linux just so that I wouldn't need minix any more. Something good came out of it." In a 2005 interview Linus offered a full explanation of what happened to his Minix partition:
"Really early on when I was making Linux, one of the things I was really doing was reading Internet news from the university computer. I was dialing up to the university, I usually got a busy signal, so I programed an auto dialer. It would dial and if it got a busy signal, it would wait a minute then redial. I wasn't using Linux full time yet but was still using it. By mistake, I auto dialed my hard disc and basically I overwrote the operating system with the dial strings. So I had to decide if I would reinstall the OS I was using or start using Linux full time. I said OK, that's a sign, I'll start using Linux full time."
In a later thread, Linus offered an explanation of two special processes always running in Linux 0.10:
"Linux has two special processes: The swapper (#0) and init. The swapper is used as a 'null'-process: When no other process wants to run the swapper just sits and idles. It may not sleep.
"Init (#1) is the real father of all processes. It should really do a lot more than it does currently: execute the /etc/rc file and start logins. Currently It just starts 2 processes: /bin/update (#2) and /bin/sh (#3). It then just waits for any of these to exit, and syncs the filesystems (Normally this happens only when /bin/sh exits, as /bin/update shouldn't exit for any reason.)"
MCC Interim:
Also in November of 1991, the Manchester Computing Centre (MCC) at the University of Manchester in the UK started their FTP mirror of the Linux kernel. Within a few months, they would start releasing "MCC Interim" versions of Linux, "our versions are called 'interim' because they are not intended to be final or official. They are small, harmonious, and moderately tested. They do not conform to everyone's taste -- what release does? -- but they should provide a stable base to which other software can be added."
The project README explained:
"When Linux version 0.10 first appeared in the autumn of 1991, it was released by Linus Torvalds as a pair of floppy disks, known as the 'boot' and 'root' disks. Linus himself released several utilities which did not fit on these disks. Eventually quite a number of contributions were available. Software distribution was rather chaotic, and you needed a lot of effort to collect a complete base system."
The MCC Interim releases are cited as the first Linux distribution, "we install this version of Linux on small 386-SX machines for our C and Unix courses, and we need to be able to install it on twelve machines in about one hour. We also distribute this version of Linux to our clients in Manchester."
Linux 0.10 Installation Guide:
Warning: I have personally not done this the hard way, so I don't know
what problems could surface. In general, this version is still meant
for people with minix: they are more used to the system, and can do some
things that DOS-based persons cannot. If you have only DOS, expect some
troubles. As the version number suggests, this is still not the final
product.
This is a "fast hack", meant as a minimal guide to what you must do.
I'll expand this as soon as people tell me what they have problems with
etc etc. If somebody who has successfully installed the system wants to
write something better, I'd be delighted. This guide stinks to high
heaven.
Installing Linux-0.10 on your system
There are 5 major steps in installing linux on your system:
1 - BACK UP ANY IMPORTANT DATA. Linux accesses your hardware directly,
and if your hardware differs from mine, you could be in for a nasty
surprise. Doublecheck that your hardware is compatible: AT style
harddisk, VGA controller. (If somebody has EGA, please tell me if the
screen driver should happen to work)
2 - Make a file-system on your harddisk. This is easy if you have
minix, but if you haven't got minix, you'll have to get the minix
demo-disk from somewhere (plains.nodak.edu is one place), and use that.
There should be a manual accompanying the demo-disk, and you had better
read that carefully. Although this version of linux will boot up
without minix, a knowledge of minix would help. Especially if you have
never done any unix work, you'll be very confused.
Making a filesystem means getting a empty partition (with DOS fdisk or
similar), and using the 'mkfs /dev/hdX nnn' command to write out a empty
file-system.
3 - copy the diskimages to two floppies. Again, under minix (or any
unix), this is easy, as you can just do a simple 'dd' to a floppy, but
from within MS-DOS this might be a bit trickier. 'debug' should be able
to write diskettes directly, or you could get the sources to "raw-write"
from the same place as you got the minix demo disk, and modify them to
write out any disk image (or do they do that already?).
NOTE! The floppies MUST be of the same type: even though the boot-image
will fit nicely on a 360kB floppy, you have to write it to the same type
of floppy as the root-image. That means a 1.2M or 1.44M floppy. The
reason is that the floppy-type is determined at boot-time from the
boot-floppy. Thus the same binary works on both 3.5" and 5.25" drives.
4 - boot up from floppy. This should be obvious. Having a floppy as
root-device isn't very fast (especially on a machine with less than 6MB
total ram -> small buffer cache), but it works (I hope). Test the
programs on the root-floppy (cat mkdir etc).
5 - Mount the harddisk partition (I do it on /user: ie
'mount /dev/hdX /user'), and copy the file system over to the new
partition. The following is a example of how to do this:
$ cd /user
$ mkdir usr
$ for i in bin etc usr/bin usr/root mtools
> do
> mkdir $i
> cp `ls -A /$i` $i
> done
$ mkdir dev
$ cd dev
$ for i in 0 1 2 3 4 5 6 7 8 9
> do
> mknod 'hd'$i b 3 $i
> done
$ mknod tty c 5 0
$ mknod tty0 c 4 0
$ mknod tty1 c 4 1
$ mknod tty2 c 4 2
You should now have a filesystem you could boot from. Play around a bit,
try to get aquainted with the new system. Log out when you've had
enough.
6 - Changing the boot-diskette use your new harddisk partition as root.
The root device to be used for linux is encoded in a word at offset 508
in the boot image. Normally this is 0, meaning that the root is to be
the same type of floppy as was used in the boot process. This can be
changed to whatever you like.
Use a short program like the one at the end to change the word (I assume
everybody has access to some kind of C compiler, be it under dos or
unix). You can then write out the new bootdisk, and boot from it, now
using the harddisk as root (much faster). Once you have successfully
done that you might want to install additional programs (gcc etc) by
reading them from a dos-floppy with 'mcopy'.
Linus [email blocked]
------ example program: use 'a.out < oldboot > newboot' ----
#include
char tmp[512];
void main(void)
{
int i;
if (512 != read(0,tmp,512))
exit(1);
if (0xAA55 != *((unsigned short *)(tmp+510)))
exit(2);
*((unsigned short *)(tmp+508)) = NEW_DEV;
if (512 != write(1,tmp,512))
exit(3);
while ((i=read(0,tmp,512)) > 0)
if (i != write(1,tmp,i))
exit(4);
exit(0);
}
-------
Devices:
Harddisks:
0x301 - /dev/hd1 - first partition on first drive
...
0x304 - /dev/hd2 - fourth partition on first drive
0x306 - /dev/hd1 - first partition on second drive
...
0x309 - /dev/hd2 - fourth partition on second drive
0x300 - /dev/hd0 - the whole first drive. BE CAREFUL
0x305 - /dev/hd5 - the whole second drive. BE CAREFUL
Floppies:
0x208 - 1.2M in A
0x209 - 1.2M in B
0x21C - 1.44M in A
0x21D - 1.44M in B
| Attachment | Size |
|---|---|
| linux-0.10.tar.gz | 120.17 KB |
| linux-0.10.tar.gz.sign | 227 bytes |