In 1965 computer scientists from Bell Labs & GE (General Electric) joined an effort underway at MIT on the Multics (Multiplexed Information and Computing Service) project. The aim was to produce a general purpose system, that would be economically viable, i.e it could be sold. However Bell Labs withdrew from the project in 1969.
Although MULTICS did work for some of its Bell Labs users (including, Dennis Ritchie and Ken Thompson), during 1969 they decided to look for an alternative. What they were aiming for was a system that wasn't just a good programming environment but also a system where a community could grow around it.
So Unix originated around spring of 1969. At AT&T Bell Labs. By Dennis Ritchie,
Ken Thompson, Rudd Canaday and others.
Originally it was called Unics, it was a pun on the name Multics.
Unix was first written on a PDP-7 that Thompson ran his "Space Travel" game on.
The file system was the first part to be implemented. To begin with the various bits of the OS had to be written under GECOS (An operating system from General Electric, the name GECOS still lives on in Unix, as in the GECOS field in the password file) and transferred to the PDP-7 by paper tape! However once they had written an assembler for the PDP-7, the OS became self supporting.
By 1970 the PDP-7 was rapidly becoming obsolete. So they decided to get their management to buy them an PDP-11 ($65,000). They finally managed to get the go ahead for the new system, buy promising to write typesetting software for the patent department at Bell Labs.
The new system arrived end of summer 1970, but had no disk, so porting to the
new system didn't begin until December.
The first version of UNIX was written in assembler, though it was always intended that it be written in a high-level language.
In 1971 Thompson first tried re-writing UNIX in Fortran but gave up after the first day!. He then wrote a simple language called B. B had some issues (interpreted language, based on word-oriented BCPL, the PDP-11 was byte-oriented), he made some changes and called it NB (New B). From New B with added types and a compiler for it, we get to C.
Thompson started the rewrite of UNIX in C in the summer of 1972 (note: UNIX was already being used by the Bell Labs patent department). However he ran into a couple of problems. 1) How to run co-routines (context switching) 2) The first version of C didn't have structures.
Ritchie added structures to C and improved the compiler. So over the next
summer is when the big re-write finally took place.
In 1976-77 Thompson took a six-month sabbatical to teach as a visiting professor at the Computer Science Department at the University of California-Berkeley (UCB). He was of course teaching UNIX.
When Thompson returned to Bell Labs, students and professors at Berkeley continued to enhance UNIX. This led to Berkeley Software Distribution (BSD) V4.2
This also probably gives us the first fork of UNIX, AT&T vs BSD
BSDs notable contribution is of course TCP/IP networking, which was somewhat funded by DARPA (Defence Advanced Research Projects Agency).
TCP/IP would be instrumental in the creation of the Internet.
And of of course the Internet was and still is, run on UNIX.
In 1984 AT&T was split up into the baby bells. And it created a new independent subsidiary, AT&T Computer Systems. This enabled them to enter the computer business.
Also around this time you saw, Sun Microsystems, SGI, HP, NCR and IBM all selling UNIX box's each with their own hardware and their own flavour of UNIX.
It's also interesting to note that in the early 80's Microsoft was actually one
of the biggest UNIX distributors with Xenix.
In 1993 Novell bought USL (UNIX System laboratories, a subsidiary of AT&T) and UNIX.
In 1995 Novell sold its UNIX business to the Santa Cruz Operation (SCO).
Along the way UNIX has been somewhat standardised in the various POSIX (Portable Operating System Interface) / XPG / Single Unix Specifications.
The specs are available to everyone. Thus anyone can create a free UNIX like
OS. If you want to be ale to call your OS UNIX you need to have it certified,
which of course is not cheap. A few years ago, it was discussed if Linux
should/could be certified... but nothing really came of it. These days the
importance of UNIX certification for Linux is pretty much a non issue. Instead of
saying Linux is a lot like UNIX, we can now say, UNIX is a lot like Linux.
Today the main commercial Unixes are:
IBM -- AIX/PPCi
SGI -- IRIX/MIPS
HP -- HP-UX/PA-RISC & Itanium
DEC/Compaq -- True64/Alpha
Sun -- Solaris/SPARC/UltraSPARC
SCO -- whatever they call it these days/x86
BSDi -- BSDi/x86 ???? Bought by Wind River???
OK, so lets travel back in time a little, to the dawn of Linux.
Well, in fact we should go a little further back.. to around 1983/84. MIT's AI lab and a guy called Richard Stallman (I'm sure most of you will have heard of him).
When Stallman joined the lab in 1971, the sharing of code was standard and common
place. However things started to change in the 80's. Computer systems were
becoming a lot more closed and the software they ran weren't free (as in speech)
i.e you couldn't see the source without signing all sorts of NDA's.
While there, he had been having problems with a printer, it kept jamming, but gave
no feedback on the fact. Stallman wanted to modify the printer driver to provide
printer status feedback. So Stallman went to see the author of the driver one
day, and asked if he could have the source to the printer driver in order to make
his modifications. Well he was basically told NO. Stallman feeling quite shocked
and angry at this response, turned around and walked out of this guys office.
All these things led Stallman to send out an announcement about the GNU
(GNU of course being a recursive acronym for GNU's Not Unix) project on
the 27th September 1983.
In the announcement Stallman proclaimed that GNU would be a free Unix, and would
begin with a kernel and the needed utilities to write and run C programs.
Ironically the GNU kernel (Hurd) was/is the last part to be implemented.
Anyway, so starts GNU, and all those cool tools and software that we use each and
OK, fast forward to 1991.
Linus Torvalds (a Swedish speaking Fin, 21'ish, Studying Computer Science at Helsinki University) had programmed his Grandfathers Vic-20, after he got bored with that, he looked for a new challenge, which came in the form of a Sinclair-QL, the main lure of this to Linus was its ability to do multitasking.
With the introduction of the 80386 and the fact that Linus knew he could get a free Unix for the PC in the form of Minix (Minix was written by Andrew Tannenbaum mainly as a teaching aid for computer OS design). That's when he broke down and bought a PC, not something he'd previously wanted to do as the pre 386 wasn't an interesting enough proposition.
So on the 5th of January 1991, Linus became the proud owner of 386DX 33Mhz, 4MB RAM, no co-processor and a 40MB hard drive.
Doesn't sound like much these days, but back then, it was a pretty OK machine.
While he waited for his Minix disks, he got acquainted with his new system and
played the game "Prince of Persia" (who remembers that?) though he did get
around to writing some systems tools under MS-DOS, including an assembler.
During this time while he was exploring the 386's task switching ability, he
wrote the infamous program, that consisted of two co-routines, one of which
would print out an 'A' the other would print out a 'B'. He had a timer that would
switch between the two tasks. And get AAAABBBBAAAA printed out.
Then by the end of March 1991, Linux had Minix up and running and had begun to explore it. Linus then decided to turn his simple task switching program into a terminal emulator so that he could read Usenet news off of the University computers over dial up from his home computer. After a while of playing around with Minix and using his terminal program to read Usenet. He decided to extend it a bit further. He wanted the ability to download stuff and save it to his hard disk. This required him to write a disk driver to interface the terminal program with the hard disk. Once he had this, he needed a file system. He used the Minix file system as a basis for this. He added some other stuff and began coding in C. This is when he got his ideas about creating "a better Minix than Minix".
Linus used Minix as a kind of scaffolding for extending his "newsreader", but it was quite an inefficient setup as he had to reboot from Minix into his "newsreader" to read Usenet. This also meant he lost the capabilities of Minix. So he decided he would try and make more of Minix available within his "newsreader". Gradually his "newsreader" was becoming more and more feature full and more and more negating the use of Minix.
Once the University holidays began, Linus really ramped up his coding effort.
On July 3rd 1991, Linux posted to Usenet asking for pointers to POSIX docs in a machine readable format, to help him with this project he was working on. However in a reply, someone said that you had to buy the POSIX documentation. He couldn't afford this. But he thought no problem, They have SunOS (Sun's BSD based Unix which later transmogrified into Solaris) at Uni. So he used the SunOS man pages to find out about all the Unix programming interfaces.
The same person whom said that the POSIX docs weren't freely available, was also at Helsinki University and had an ftp area on what was nic.funet.fi, he was interested in kernels and OS design. He created a directory /pub/os/Linux on the server for Linus's project. Linux was Linus's working name for his project. He didn't really want to name it Linux as he thought it would give the impression that he was an egomaniac. He had wanted to call it Freax but the guy who setup the ftp server didn't like that name. So Linux stuck.
On Sunday 25th August 1991, Linus made his famous post to Usenet. Proclaiming
that he was working on a free operating system ("just a hobby, wont be big and
professional like GNU"). Response to his posting was immediate.
In September 1991, Linux uploaded version 0.01 (which was a massive 72K
compressed). This was just source code with quite extensive release notes.
It wasn't really useful for anything. The kernel couldn't use more than 8MB,
as Linus said "I ain't got it - why should you ;-)" Of course this was just the
kernel. To be of any use you needed tools and utilities like compilers and
shells. This is of course where the GNU project comes in, they already had most
of the needed stuff, including GCC.
Version 0.02 was released on October 5th 1991.
This release did actually work. It was pretty bare, no floppy driver, no VM and
not much else.
Version 0.03 was released a few weeks later.
The next version was 0.10, Linus was getting heady with success....
Version 0.11 was released in early December 1991.
As Linus wrote in his post to Usenet.
It's still not as comprehensive as 386-Minix, but better in some respects.
No SCSI support
No init/login, you go straight into bash as root.
There was a very basic VM, but it wasn't ready for proper use yet. You could boot up in 2MB, but needed 4MB to run things like GCC.
It was though, able to run standalone without the need for Minix. It had:
- demand loading
- code/data sharing between unrelated processes
- much better floppy drivers (they actually mostly worked)
- support for Hercules/MDA/CGA/EGA/VGA
- the console also beeps (WoW! Wonder-kernel :-)
- US/German/French/Finnish keyboards
- settable line-speeds for com1/2
But notably still lacking:
- rename system call
- named pipes
- symbolic links
He did release a version 0.11 + VM just before Christmas for the people who
were trying to compile in 2MB.
It's interesting to note that up to this point Linux was distributed not under
the GPL, but a more restrictive licence.
This changed with version 0.12 which was released on January 5th 1992.
This version was aimed at a more wider audience and more people were starting
to contribute code to Linux.
Notable additions were:
- Job control
- the beginnings of 387-emulation
- Symbolic links
- improved VM
The next release came on March 7th 1992. The version number was bumped up to 0.95. Linus felt that the first real version of Linux was near. It was in fact to be about 2 years away.
Notable features of this release:
- improved VM
Linux was already becoming a usable Unix.
During this time, Linus had the famous flame war with Andrew Tannenbaum about
Monolithic kernels (Linux) vs Micro-kernels.
Version 0.95a was released on March 17th 1992. This release was mainly just about reorganising stuff.
A few releases later and 0.96a is released around the 25th May 1992. The one notable thing about this release is that the kernel had support for X. The interesting thing is that it was more a matter of porting Linux to X, than the other way around.
The compressed kernel source is 174K.
Now was the time of Linus's summer holidays and he is in full hacker mode.
0.96b appears at the end of June 1992, followed two days later by 0.96b.1 and 0.96b.2 again two days later.
July and August both see three releases. September sees five, culminating in 0.98.
The compressed kernel source is now 320K.
On September 21st 1992 in a post to Usenet, Linus informed of three important features being added. Support for the sound blaster card, support for accessing cdroms and TCP/IP networking (which of course is needed for remote X), which would be in the next release in about a weeks time.
Version 0.98 was released on September 29th 1992. On the 18th October 1992
version 0.98.2 was released, this included some TCP/IP patches, but this feature
was still marked experimental. Of course Linux's TCP/IP networking has a history
all to its own....
Version 0.99 came out on December 13th 1992. One of the main holdups to 1.0 was
in getting the networking code fully debugged which was then being worked on
by Alan Cox.
In January 1993 there was three releases. February, March & April each saw two. One in May, none in June. Only one release was managed during July/August. However in September things cranked up.
Version 0.99.13 was released on 20th September. Eleven releases then happened in just over a month, culminating in 0.99.13k on October 25th.
Compressed kernel source is now 800K.
In December 1993 there was ten releases, in January 1994 there was fourteen releases. February saw eleven releases. Then finally on the 23rd March 1994 version 1.0 was let upon the world as 1MB of compressed code..
A month later Linus opened up 1.1 and thus began the stable & development branches of Linux development.
kernel releases now consist of three numbers. major.minor.patchlevel.
Kernels with a even minor are stable releases and kernels with an odd minor
are development kernels.
The first release of Linux was only for reading the source. But for sub sequential releases, Linus made boot and root floppies. The boot disk contained the kernel, the root disk contained a small root file system with the basic needed tools to get you a basic independent UNIX system.
The code for these floppies was freely available and other sites started mirroring them. One site, Manchester Computing Centre, after simply mirroring the disks. Started to release their own disks with extra utilities. And thus was born the first proper distribution of Linux called MCC Linux. The first one of these appeared in February 1992 and was based on the 0.12 kernel.
Soon after, other distributions came about, most notably SLS (Softlanding Linux System). The next main distributions (and which are still going strong today) were Debian, founded my Ian Murdock in the second half 1993 and Slackware which basically took over from SLS. Slackware also paved the way for the selling of Linux distributions on CDROM.
SuSE was formed in 1992, its first release came in 1993 and was based on SLS, they then switched to Slackware as a base and localised it for Germany. They then later adopted the Red Hat Package Manager instead of the simple tar.gz packages of Slackware.
Red Hat was setup in 1993 by Marc Ewing primarily to develop a development tool. But soon realised a better Linux distribution was needed instead.
Caldera was formed in October 1994. But I think that's all we'll say about that!. Although they did provide Alan Cox with a dual processor Pentium box for the development of SMP.
One notable hardware company to mention is VA Research. They where started in February 1995 by Larry Augustin. They have since changed names to VA Linux and are now out of the workstation/server business, concentrating on selling Sourceforge as VA Software.
Also noteworthy is the founding of Linux International in around March 1994
OK so back to the kernel... 1.0 and 1.1 have just been released. At this point the kernel is very much tied to the x86 platform, it uses quite a bit of assembler and x86'isms. Linus had never though about Linux running on anything other than the x86.
But this was soon to change. There is some debate as to what the first port was. The Motorola 68000 (m68k) or the DEC Alpha.
Well the m68k was probably the first non x86 platform to run Linux, but this development had happened completely outside and separate of Linus's tree.
The Alpha was the first port done in tree. It is also important as it got
Linux to 64 bits. Before many of the commercial UNIX vendors.
Linus gave a talk on Linux at DECUS [Digital Equipment Corporations User Society] in the spring of 1994. There he met Jon "Maddog" Hall a senior UNIX guy at DEC, who had been persuaded to fund Linus's trip to DECUS, by a colleague. Hall would later become a very prominent figure in the Linux & Open Source Community. However he had been a bit sceptical about this Linux thing.
But after he met Linus and had tried Linux for less than 10 minutes, he was converted.
Afterword, Hall persuaded DEC to lend Linux an Alpha. Naturally Linus jumped at the chance to port Linux to something that was completely different to the x86 and quite exotic.
One of the main things to come out of this port was that it laid the ground work
for other in tree ports, one kernel tree, many architectures.
Linus spent about a year 1994-1995 doing pretty much just the Alpha port. Meanwhile development continued on.
1.2 aka Linux'95 ;) was released in March 1995.
There was another notable Linux port happening, Dave Miller had actually
started the port to Sun Microsystems SPARC processor in 1993 while at
University. This was also quite an important event, as the SPARC
processor was very capable and in wide spread use.
2.0 was released on 9th June 1996. This release deserved a bump in the major version number.
The 2.0 kernel had multi-architecture support, x86 and Alpha. It also had support for SMP.
Version 2.0 is now almost 5MB of compressed code.
Version 2.2 was released on Jan 26th 1999
Numerous ports were added:
The kernel source is doubled in size.
This release also included a number of features to make it a more standard UNIX, most visible to the user is UNIX98 ptys.
It also included some finer grained locking for improved SMP. (The complete
removal of the BKL is still ongoing today...)
Version 2.4 was released on Jan 4th 2001
Again this included support for more architectures:
Itanium (before actual hardware had even landed, IIRC Linux was the first OS to
run on actual silicon)
newer 64-bit MIPS hardware.
The networking stack had undergone a complete rewrite. Amongst other things this meant that Linux was (and perhaps it still is) the first/only OS to have a completely RFC compliant IPv4 stack. Linux's IP stack is still regarded as one of the best around.
Again, more work had undergone in the removal of the BKL.
The compressed kernel source is now nearly 20MB.
Linux now runs (at least in some form) on the following.
Compaq Alpha AXP, Sun SPARC and UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM,
Hitachi SuperH, IBM S/390, MIPS and MIPS64, HP PA-RISC, Intel IA-64, DEC VAX,
AMD x86-64 and CRIS architectures.
http://li.org/linuxhistory.php archived at the WayBack machine
rebel code, Glyn Moody, The Penguin Press, ISBN: 0-713-99520-3
OpenSources: Voices from the Open Source Revolution, O'Reilly, ISBN: 1-56592-582-3