1.2. Development of Linux
In 1991, Linus Torvalds, at that time a student at the University of Helsinki, started a project to teach himself about low-level Intel 80386 programming. At the time, he was running the Minix operating system, designed by Andrew Tanenbaum, so he initially kept his project compatible with the Minix system calls and on-disk file-system layout to make his work much easier. Although he released the first version of the Linux kernel to the Internet under a fairly restrictive license, he was soon convinced to change his license to the GPL.
The combination of the GPL and the early functionality of the Linux kernel convinced other developers to help develop the kernel. A C library implementation, derived from the then-dormant GNU C library project, was released, allowing developers to build native user applications. Native versions of gcc, Emacs, and bash quickly followed. In early 1992, a moderately skilled developer could install and boot Linux 0.95 on most Intel 80386 machines.
The Linux project was closely associated with the GNU project from the beginning. The GNU project's source base became an extremely important resource for the Linux community from which to build a complete system. Although significant portions of Linux-based systems are derived from sources that include freely available Unix code from the University of California at Berkeley and the X Consortium, many important parts of a functional Linux system come directly from the GNU project.
As Linux matured, some individuals, and later, companies, focused on easing the installation and usability of Linux systems for new users by creating packages, called distributions, of the Linux kernel and a reasonably complete set of utilities that together constituted a full operating system.
In addition to the Linux kernel, a Linux distribution contains development libraries, compilers, interpreters, shells, applications, utilities, graphical operating environments, and configuration tools, along with many other components. When a Linux system is built, distribution developers collect the components from a variety of places to create a complete collection of all the software components that are necessary for a functional Linux system. Most distributions also contain custom components that ease the installation and maintenance of Linux systems.
Many Linux distributions are available. Each has its own advantages and disadvantages; however, they all share the common kernel and development libraries that distinguish Linux systems from other operating systems. This book is intended to help developers build programs for any Linux system. Because all Linux distributions use the same code to provide system services, program binaries and source code are highly compatible across distributions.
One project that has contributed to this compatibility is the Filesystem Hierarchy Standard (FHS), previously called the Linux Filesystem Standard (FSSTND), which specifies where many files should be kept and explains, in general terms, how the rest of the file system should be organized. More recently, a project called Linux Standard Base (LSB) has expanded beyond the file system layout, defining Application Program Interfaces (APIs) and Application Binary Interfaces (ABIs) intended to make it possible to compile an application once and deploy it on any system that complies with the LSB definition for that CPU architecture. These documents are available, with others, at http://freestandards.org/.