Linux is a product of the Internet, and a new way of collaborating on projects.
More on the Free Software Foundation's GNU General Public License
Since UNIX was proprietary, and the availability of source code for future versions was not a certainty, some programmers in academia began a project to create an alternative to UNIX that would always have source code available. In the early 1990's the project, called GNU, was almost complete. The compiler, libraries, linker, and editor were ready. Many standard UNIX programs had been re-implemented in GNU. There was only one major piece lacking, and that was the heart of the system: the kernel.
The GNU project was (and still is) working on a kernel called "hurd", and it's a sophisticated and advanced piece of work - but it wasn't ready in 1991. GNU was a car without a motor. A computer science student from Finland, Linus Torvalds, built a rudimentary kernel to work with cheap PC hardware and the rest of the GNU system. Linus called his kernel Linux; as they say, the rest is history. It's worth noticing that Linux is only one possible motor for the GNU car - there are other kernels for the GNU system, and other operating systems that make use of GNU software.
The distinction between the kernel and the operating system is not commonly maintained by non-technical people, but the distinction is fundamental. The kernel running by itself just sits there, passing packets and syncing its disks. There's no way for a user to interact with it, submit tasks, or run other programs.
To extend the car analogy, a kernel by itself is like a engine on an engine stand - it can't go anywhere, and to even start it you need a cooling system, exhaust system, fuel system, etc. connected to it. To really use the engine you've got to put it in a car - and that requires even more essential systems like axles, a transmission, and brakes. Returning to the computer world, the rest of the essential components are provided by the operating system.
GNU provides the ancillary systems for the Linux kernel. Linux is the engine, but GNU is the rest of the running gear. Together they make the GNU/Linux operating system.
Even that operating system by itself is fairly unexciting except to programmers. It's like a completely basic car. To add email (signals), web browsing (a heater), audio players (a radio), pretty displays (windshield) and the rest of the accessories is left to other groups of developers. Once the whole thing is assembled, the higher-level collection is generally called a "Linux Distribution". Buried deep in each distribution is a kernel, but it is surrounded by many hundreds of other programs.
In this context, "free" is a term of art that refers to freedom rather than zero cost. What makes it free?
The license that releases it. The maintainer of the Linux kernel source tree requires that every submitted file be released under the GNU General Public License ("GPL"), though an author can also release the file under additional licenses if she wishes.
The GPL makes Linux source "free" because it grants everyone the freedom to copy it, and the freedom to modify it. (plus more)
The majority of source code files in the Linux kernel tree carry both Copyright notices and references to the GPL. There's more on the GPL and free software below.
Linus made all the changes to the source code at first, but he solicited help from other computer scientists to refine the kernel. The submission process was open to anyone at first, though Linus exercised a quality control power. As the project has gotten bigger, Linus has delegated certain subsections to trusted colleagues, each of whom accepts patches & contributions for that area.
Since the original release of the kernel tree in 1991, interest has grown both commercially and non-commercially. Linux has a reputation for stability, good performance, and modest hardware requirements. Its creators have a reputation for rapid fixes and a willingness to pursue "the best" over "the commercially viable". Without shareholders to please or contractual commitments to fulfill, the creators are able to pursue technical perfection with far less interference from business concerns than are most if not all commercial software writers.
There are more than 10,000 individual source code files that make up the Linux kernel tree; each file is copyrighted by one or more individuals. When assembled by Linus, the kernel source tree is one of the largest collaborative works of software extant. Linus owns the copyright both in the collective work and in many of the original files, and so has some interest in the later revisions to those files.
The GPL uses the notion of a "program" to refer to both the source code and object code built from the source code. The terms of the GPL include:
Anyone who receives a copy of GPL'd code has the right to run the program, and has the right to copy and adapt the program for private use.
Anyone who receives a copy of GPL'd code has the right to copy and redistribute it under the same license, and may charge a fee for making it available.
If someone adapts the program (usually by changing the
source code) and then redistributes the modified program in
object code form, the GPL requires that:
1. The modified source
code be made available to anyone for no more than the cost of
reproduction, and
2. The modified program be released under the
GPL.
Again, anyone who receives a copy of GPL'd code has the right to modify it for their own use without being required to release it in either form; only redistribution of a modified program triggers the above restrictions. Software companies occasionally misconstrue either the terms of the license or the word "free" to mean that there are no restrictions on derivative works, and seek to include GPL'd software in their closed-source, object-code-only proprietary programs. Copyright owners of GPL'd programs have had to take action to assert their rights in such cases.
A necessary condition for a program to be free software is that the source code be available via non-burdensome methods.
Before software can be used to operate a computer, it must be compiled from source code form into object code form. Changing the source code will change the result of compilation - it will create a different object code version. It's quite difficult, however, to directly modify the object code version of a program, and almost as hard to "decompile" an object code version into the corresponding source code.
Without access to the source code, then, an end user is at the mercy of the provider of the software - if the company goes out of business or decides to "stop supporting" some program, the user is stuck with the choice of:
Changing to a new program (often this process goes by the name of "upgrading" when the new program comes from the same supplier as the old, unsupported program), or
Hiring a computer genius to reverse-engineer the program and build a modified version that continues to work, or
Being stuck in the past, maybe even running very old hardware that operates correctly with the desupported program.
With the source code, the end user has the additional
option of:
4. Hiring a competent
programmer (sub-genius level) to modify the program's source code and
produce a new object code version that works.
Most Linux distributions include many
programs released under the GPL, as well as programs released under
other free licenses. Some distributions include software programs
that are not free, and some hardware manufacturers make only object
code versions of driver programs available. The generic term for a
the inclusion of non-free programs in a distribution, or the loading
of a non-free driver module in the kernel, is that a "tainted"
distribution or kernel results. The term is intended to convey the
risks inherent in using an object-code only version of a
program.
Because of the GPL's stipulation that source code be
available, most distributions include the source code files for GPL'd
programs, though sometimes on separate media.