Linux is only a kernel, and if users want to use it, then they need a complete distribution. That being said, how were the first versions of Linux used when there were no Linux distributions?
In the early beginnings of Linux, Linus released the Linux kernel source in an "unusable" state, reportedly for signalling to others some work was being done into developing a new Unix-like kernel. By that time, as @RalfFriedi correctly points out, the Linux kernel was being cross-compiled in Minix.
As for "usable" code, firstly Linus slapped a couple of utilities together with the Linux kernel in the very beginnings for others to test it out, namely
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Summary: small poll for my new operating system Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI> Date: 25 Aug 91 20:57:08 GMT Organization: University of Helsinki
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 :-)
So Linus was "distributing" the kernel plus some core utility programs in a diskette image format for some more advanced users to try it out and possibly contribute.
Afterwards, there were H J Lu's Boot-root floppy disk images. Which, if it could be called a "distribution", would gain the fame of being the first one capable of being installed on disk, at least by power users.
These were two 5¼" diskette images containing the Linux kernel and the minimum tools required to get started. So minimal were these tools that to be able to boot from a hard drive required editing its master boot record with a hex editor.
Eventually the number of utilities available started outgrowing by a long way the diskette boot/root diskette setup.
MCC Interim Linux was then the first Linux distribution ever released able to be used by (slightly) less technical inclined people, introducing automated installation and new utils such as
MCC Interim Linux was a Linux distribution first released in February 1992 by Owen Le Blanc of the Manchester Computing Centre (MCC), part of the University of Manchester.
The first release of MCC Interim Linux was based on Linux 0.12 and made use of Theodore Ts'o's ramdisk code to copy a small root image to memory, freeing the floppy drive for additional utilities diskettes.
He also stated his distributions were "unofficial experiments", describing the goals of his releases as being:
- To provide a simple installation procedure.
- To provide a more complete installation procedure.
- To provide a backup/recovery service.
- To back up his (then) current system.
- To compile, link, and test every binary file under the current versions of the kernel, gcc, and libraries.
- To provide a stable base system, which can be installed in a short time, and to which other software can be added with relatively little effort.
Then there came other major distributors more as we know them today, notably Slackware (July 1993 - based on SLS) and Debian (from December 1993 until the first "official" v1.1 release - December 1995).
PS added links for boot-root, MCC 1.0, SLS 1.05, Yggdrasil and Debian 1.1 historical archives.
In my case (c.1994) Linux came built as images suitable for 3.5" floppies (1.44MB), probably the follow-on to the 5 1/4" images mentioned above, and each has a specific set of drivers compiled in (network, VGA, etc.). So you had to know what you needed and sort of hope that you had suitable hardware.
After you booted, and could either connect to LAN or dialup via modem, then you went and found the software you needed (FTP, gopher, etc. -- this was right at the start of the "web" and search engines didn't really exist yet, so you had to know where to go or who to ask) and built it yourself.
I was ecstatic when I was able to boot my 486DX and dial into my university network (56k!) and mount an AFS share on machine at home...those were the days. ;)
The short version
At the time that Linus started his kernel, the Gnu project had a working Operating system, except for a working kernel. So when people looked around, they found all of the tools that they needed: gcc (and friend: binutils), bash (and friends gnu-utils), emacs, …
They would then build their own system, from the parts.
It is where this joke comes from “If MS-Windows was an aeroplane, it would climb to 10 thousand feet, and then explode killing everyone in side, but at least you don't have to build your own aircraft before you depart.”
In his book "Just For Fun" Linus Torvalds mentioned that the Linux kernel was initially a simple terminal emulator for connecting to remote Unix machine through a modem:
So ultimately I was able to change the two threads, the AAAAAAAA and BBBBBBB, so that one read from the modem and wrote to the screen, and the other read from the keyboard and wrote to the modem. I had my own terminal emulation program.
When I wanted to read news, I would put in my floppy and reboot the machine, and I would read news from the university computer using my program. If I wanted to make changes to improve the terminal emulation package, I would boot into Minix and use it for programming...
And because I wanted to save files to my Minix file system — and because the Minix file system was well-documented anyway — I made my file system compatible with the Minix file system...
By the time I did this it was clear the project was on its way to becoming an operating system. So I shifted my thinking of it as a terminal emulator to thinking of it as an operating system.
Edited: Removed embarrassing lack of understand of how kernels work and left the important part.
The GNU userland existed before the Linux kernel did.
Peter MacDonald is largely recognized as having created the first 'usable' GNU/Linux distribution.
From memory of some discussions I had with him: Peter was working as a Unix systems administrator for the government and going to the University of Victoria for a Masters Degree. Peter wanted a way to work from home, but the Unix desktop license costs were prohibitive. He was already familiar with the GNU userland tools so when he saw Linus Torvalds' message on the University network he took full advantage and wired GNU tools to the new kernel. So really, the initial problem was the reverse of your question: The userland already existed and all that was needed was a kernel.
Some other historical tidbits:
- Peter did not distribute SLS Linux and did not charge a fee for the software. SLS was distributed by his wife Colleen and the fee was for the expensive and time consuming process of burning CDs to mail out.
- Peter made a number of huge contributions to the kernel that have never been acknowledged including dynamic module loading and improved memory management.
- The software was 'buggy' because he was working, going to school, raising two children and trying to keep Linux users happy. We all know how easy it is to keep Linux users happy...
- Peter has no recollection of the 'argument'/'disagreement' over installer scripts that others have claimed caused a rift that started Slackware and Debian.
Linux was first started as an enhanced replacement for Minix and to understand protected mode programming on a i386. Minix came with source, and at the time there were the GNU userland utilities and the BSD userland utilities. Both were available with source. Linux tried to be POSIX compatible, so porting was not that difficult. One of the first steps was to run bash on Linux. You can consider the early days of Linux as cross compilation, the kernel had to be compiled on another system.
First let’s clarify something what is really important. If we talk about any OS (Linux and DOS) they where primary created to allow file manipulation on storage media (hard disk and floppy).
So if you asked: "Linux is only a kernel, and if users want to use it they need a complete distribution.", the answer would be that, with kernel you can do file manipulation and disk / computer management and if you want additional functions you need some utilities.
Today we have these modern OSes that are more interfaces to hardware and hardware features, and we forget the primary function of operating systems.