The GNU Operating System and the Free Software Movement
by Richard Stallman
(continued)
The central idea of copyleft
is that we give everyone permission to run the program, copy the
program, modify the program, and distribute modified versions--but not
permission to add restrictions of their own. Thus, the crucial freedoms
that define "free software" are guaranteed to everyone who has a copy;
they become inalienable rights.
For
an effective copyleft, modified versions must also be free. This
ensures that work based on ours becomes available to our community if
it is published. When programmers who have jobs as programmers
volunteer to improve GNU software, it is copyleft that prevents their
employers from saying, "You can't share those changes, because we are
going to use them to make our proprietary version of the program."
The requirement that changes must be free
is essential if we want to ensure freedom for every user of the
program. The companies that privatized the X Window System usually made
some changes to port it to their systems and hardware. These changes
were small compared with the great extent of X, but they were not
trivial. If making changes was an excuse to deny the users freedom, it
would be easy for anyone to take advantage of the excuse.
A related issue concerns combining a free
program with non-free code. Such a combination would inevitably be
non-free; whichever freedoms are lacking for the non-free part would be
lacking for the whole as well. To permit such combinations would open a
hole big enough to sink a ship. Therefore, a crucial requirement for
copyleft is to plug this hole: anything added to or combined with a
copylefted program must be such that the larger combined version is
also free and copylefted.
The
specific implementation of copyleft that we use for most GNU software
is the GNU General Public License, or GNU GPL for short. We have other
kinds of copyleft that are used in specific circumstances. GNU manuals
are copylefted also, but use a much simpler kind of copyleft, because
the complexity of the GNU GPL is not necessary for manuals.
The Free Software Foundation
As
interest in using Emacs was growing, other people became involved in
the GNU project, and we decided that it was time to seek funding once
again. So in 1985 we created the Free Software Foundation, a tax-exempt
charity for free software development. The FSF also took over the Emacs
tape distribution business; later it extended this by adding other free
software (both GNU and non-GNU) to the tape, and by selling free
manuals as well.
The FSF
accepts donations, but most of its income has always come from
sales--of copies of free software, and of other related services. Today
it sells CD-ROMs of source code, CD-ROMs with binaries, nicely printed
manuals (all with freedom to redistribute and modify), and Deluxe
Distributions (where we build the whole collection of software for your
choice of platform).
Free
Software Foundation employees have written and maintained a number of
GNU software packages. Two notable ones are the C library and the
shell. The GNU C library is what every program running on a GNU/Linux
system uses to communicate with Linux. It was developed by a member of
the Free Software Foundation staff, Roland McGrath. The shell used on
most GNU/Linux systems is BASH, the Bourne Again Shell,[4] which was
developed by FSF employee Brian Fox.
We
funded development of these programs because the GNU project was not
just about tools or a development environment. Our goal was a complete
operating system, and these programs were needed for that goal.
Free Software Support
The free
software philosophy rejects a specific widespread business practice,
but it is not against business. When businesses respect the users'
freedom, we wish them success.
Selling
copies of Emacs demonstrates one kind of free software business. When
the FSF took over that business, I needed another way to make a living.
I found it in selling services relating to the free software I had
developed. This included teaching, for subjects such as how to program
GNU Emacs and how to customize GCC, and software development, mostly
porting GCC to new platforms.
Today
each of these kinds of free software business is practiced by a number
of corporations. Some distribute free software collections on CD-ROM;
others sell support at levels ranging from answering user questions to
fixing bugs to adding major new features. We are even beginning to see
free software companies based on launching new free software products.
Watch out, though--a number of companies
that associate themselves with the term "Open Source" actually base
their business on non-free software that works with free software.
These are not free software companies, they are proprietary software
companies whose products tempt users away from freedom. They call these
"value added," which reflects the values they would like us to adopt:
convenience above freedom. If we value freedom more, we should call
them "freedom subtracted" products.
Technical
Goals
The
principal goal of GNU was to be free software. Even if GNU had no
technical advantage over Unix, it would have a social advantage,
allowing users to cooperate, and an ethical advantage, respecting the
user's freedom.
But it was
natural to apply the known standards of good practice to the work--for
example, dynamically allocating data structures to avoid arbitrary
fixed size limits, and handling all the possible 8-bit codes wherever
that made sense.
In addition,
we rejected the Unix focus on small memory size, by deciding not to
support 16-bit machines (it was clear that 32-bit machines would be the
norm by the time the GNU system was finished), and to make no effort to
reduce memory usage unless it exceeded a megabyte. In programs for
which handling very large files was not crucial, we encouraged
programmers to read an entire input file into core, then scan its
contents without having to worry about I/O.
These decisions enabled many GNU programs to
surpass their Unix counterparts in reliability and speed.
Donated Computers
As the GNU project's reputation grew,
people began offering to donate machines running Unix to the project.
These were very useful, because the easiest way to develop components
of GNU was to do it on a Unix system, and replace the components of
that system one by one. But they raised an ethical issue: whether it
was right for us to have a copy of Unix at all.
Unix was (and is) proprietary software, and the
GNU project's philosophy said that we should not use proprietary
software. But, applying the same reasoning that leads to the conclusion
that violence in self-defense is justified, I concluded that it was
legitimate to use a proprietary package when that was crucial for
developing free replacement that would help others stop using the
proprietary package.
But, even
if this was a justifiable evil, it was still an evil. Today we no
longer have any copies of Unix, because we have replaced them with free
operating systems. If we could not replace a machine's operating system
with a free one, we replaced the machine instead.
The
GNU Task List
As
the GNU project proceeded, and increasing numbers of system components
were found or developed, eventually it became useful to make a list of
the remaining gaps. We used it to recruit developers to write the
missing pieces. This list became known as the GNU task list. In
addition to missing Unix components, we listed various other useful
software and documentation projects that, we thought, a truly complete
system ought to have.
Today,
hardly any Unix components are left in the GNU task list--those jobs
have been done, aside from a few inessential ones. But the list is full
of projects that some might call "applications." Any program that
appeals to more than a narrow class of users would be a useful thing to
add to an operating system.
Even
games are included in the task list--and have been since the beginning.
Unix included games, so naturally GNU should too. But compatibility was
not an issue for games, so we did not follow the list of games that
Unix had. Instead, we listed a spectrum of different kinds of games
that users might like.
The
GNU Library GPL
The GNU C library uses a special kind of
copyleft called the GNU Library General Public License (LPGL), which
gives permission to link proprietary software with the library. Why
make this exception?
It is not
a matter of principle; there is no principle that says proprietary
software products are entitled to include our code. (Why contribute to
a project predicated on refusing to share with us?) Using the LGPL for
the C library, or for any library, is a matter of strategy.