Inside the First Linux Kernel: 1991’s Technical Overview and Installation Guide
This 1991 article by Linus Torvalds explains what Linux is, its free Unix‑like kernel, licensing terms, required 386‑AT hardware, how to obtain the source via FTP, step‑by‑step installation, missing features, ported utilities, and ways to get technical help.
What Is Linux?
Linux is a free Unix‑like kernel written mainly in C (with some GNU‑style inline assembly and Intel 8086 assembly for the boot loader) that runs on 386‑AT computers. It was created for hackers and computer‑science students to study and enjoy, and the source code is fully available.
License
Although distributed freely, Linus imposed a few restrictions:
You may copy and redistribute the source and binaries, but you must keep the system fully open‑source; you cannot release only a modified binary.
You may not profit from the distribution; even “handling fees” are prohibited.
You must retain proper copyright notices.
If you distribute a part of the system (or only binaries), you must include the new source code.
Any small modifications should be shared with the author if possible.
Required Hardware/Software
Linux was developed on a Minix‑running 386‑AT. To run it you need a compatible system:
386‑AT CPU (PS/2‑type machines do not work).
VGA or EGA display hardware.
Standard AT hard‑disk interface (IDE works).
Real‑mode BIOS (machines that use virtual‑86 mode for boot will not start Linux).
Initially Linux depends on Minix to bootstrap the file system and compile the OS binaries; after that it becomes self‑contained, though Minix is still useful for filesystem checks.
Obtaining Linux
The complete source tree and some binaries are available anonymously via FTP at ftp://nic.funet.fi/pub/OS/Linux. The directory contains: linux-0.03.tar.Z – full source archive (16‑bit tar). Linux.tex – LaTeX source of this document. bash.Z – Bash binary (to be placed as /bin/sh). update.Z – Update binary (to be placed as /bin/update). gccbin.tar.Z – Pre‑compiled GNU C compiler and related tools. include.tar.Z – Header files needed by gcc. unistd.tar.Z – Source of the unistd library (system‑call interface). utilbin.tar.Z – Various GNU utilities (fileutils, make, tar, uemacs, etc.).
README, RELNOTES‑0.01, INSTALLATION – ASCII files with additional information.
The minimal set required to run the system is the OS source, bash.Z, and update.Z, but with only these you cannot do much.
Installation
After obtaining the necessary files, follow these steps:
Back up any existing software.
Create a standard Minix‑style partition to serve as the new Linux root file system.
Create required device nodes (e.g., /dev/tty, /dev/tty[0-2], /dev/hd[0-9]) using Minix’s mknod command.
Copy the necessary files into the new root, placing binaries in /bin, libraries in /usr/lib, headers in /usr/include, etc.
Edit linux/include/linux/config.h to match your hardware (memory size, disk type, root partition number, keyboard type).
Compile the kernel source (adjust makefiles as needed; older gcc versions may require adding LIBS= entries).
Copy the resulting image to a floppy (e.g., cp Image /dev/PS0) and boot from it.
On boot you will see messages about loading the system, filesystem statistics, and finally a bash prompt.
Missing or Incompatible Features
At the time of writing Linux was not yet a complete system. Notable gaps include:
Hardware incompatibilities: some AT features, floppy driver, and serial‑port support (e.g., 2400 bps without hang‑up) were missing.
Standard C library was incomplete; the GNU libc.a was not fully functional.
Several system calls were only partially implemented.
No init process; the system boots directly into a single‑user root console.
387‑floating‑point support was absent; only software emulation was provided.
Key system‑management commands such as mkfs, format, fsck, mknod were not yet available.
Ported Software
Linux was designed to be easily portable and includes a full termios implementation and some POSIX libraries. The following GNU tools have been successfully ported:
gcc (including cc1 and cpp)
as386 (assembler)
binutils (ld, ar, nm, size, strip, ranlib)
compress (16‑bit)
tar
make
bash (Bourne Again Shell)
sed
bison (yacc‑like)
awk
fileutils (ls, cp, rm, mkdir, rmdir, tail, …)
less
uemacs
All of these programs are available from ftp://nic.funet.fi/pub/gnu or the Linux directory.
Technical Help
Linux has a mailing list. To subscribe, email [email protected]. Questions can be sent to [email protected] or directly to [email protected]. Patches and binaries are often distributed via the mailing list or the FTP site.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
ITPUB
Official ITPUB account sharing technical insights, community news, and exciting events.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
