The GNU Operating System and the Free Software Movement
by Richard Stallman
(continued)
An operating
system does not mean just a
kernel, barely enough to run other programs. In the 1970s, every
operating system worthy of the name included command processors,
assemblers, compilers, interpreters, debuggers, text editors, mailers,
and much more. ITS had them, Multics had them, VMS had them, and Unix
had them. The GNU operating system would include them too. Later I
heard these words, attributed to Hillel:[2]
If I
am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?
The decision to start the GNU project was based
on the same spirit.
Free as in Freedom
The term "free software" is sometimes
misunderstood--it has nothing to do with price. It is about freedom.
Here, therefore, is the definition of free software. A program is free
software, for you, a particular user, if:
* You have the freedom to run the program, for any purpose.
*
You have the freedom to modify the program to suit your needs. (To make
this freedom effective in practice, you must have access to the source
code, since making changes in a program without having the source code
is exceedingly difficult.)
* You have the freedom to
redistribute copies, either gratis or for a fee.
* You have
the freedom to distribute modified versions of the program, so that the
community can benefit from your improvements.
Since "free" refers to freedom, not to price,
there is no contradiction between selling copies and free software. In
fact, the freedom to sell copies is crucial: collections of free
software sold on CD-ROMs are important for the community, and selling
them is an important way to raise funds for free software development.
Therefore, a program that people are not free to include on these
collections is not free software.
Because
of the ambiguity of "free," people have long looked for alternatives,
but no one has found a suitable alternative. The English language has
more words and nuances than any other, but it lacks a simple,
unambiguous word that means "free," as in freedom--"unfettered" being
the word that comes closest in meaning. Such alternatives as
"liberated," "freedom," and "open" have either the wrong meaning or
some other disadvantage.
GNU Software and the GNU System
Developing a whole system is a very large
project. To bring it into reach, I decided to adapt and use existing
pieces of free software wherever that was possible. For example, I
decided at the very beginning to use TeX as the principal text
formatter; a few years later, I decided to use the X Window System
rather than writing another window system for GNU.
Because of this decision, the GNU system is not
the same as the collection of all GNU software. The GNU system includes
programs that are not GNU software, programs that were developed by
other people and projects for their own purposes, but which we can use
because they are free software.
Commencing the Project
In January 1984 I quit my job at MIT and
began writing GNU software. Leaving MIT was necessary so that MIT would
not be able to interfere with distributing GNU as free software. If I
had remained on the staff, MIT could have claimed to own the work, and
could have imposed their own distribution terms, or even turned the
work into a proprietary software package. I had no intention of doing a
large amount of work only to see it become useless for its intended
purpose: creating a new software-sharing community.
However, Professor Winston, then the head of
the MIT AI Lab, kindly invited me to keep using the Lab's facilities.
The First Steps
Shortly before beginning the GNU project,
I heard about the Free University Compiler Kit, also known as VUCK.
(The Dutch word for "free" is written with a V.) This was a compiler
designed to handle multiple languages, including C and Pascal, and to
support multiple target machines. I wrote to its author asking if GNU
could use it.
He responded
derisively,
stating that the university was free but the compiler was not. I
therefore decided that my first program for the GNU project would be a
multi-language, multi-platform compiler.
Hoping
to avoid the need to write the whole compiler myself, I obtained the
source code for the Pastel compiler, which was a multi-platform
compiler developed at Lawrence Livermore Lab. It supported, and was
written in, an extended version of Pascal, designed to be a
system-programming language. I added a C frontend, and began porting it
to the Motorola 68000 computer. But I had to give that up when I
discovered that the compiler needed many megabytes of stack space, and
the available 68000 Unix system would only allow 64K.
I
then determined that the Pastel compiler was
designed to parse the entire input file into a syntax tree, convert the
whole syntax tree into a chain of "instructions," and then generate the
whole output file, without ever freeing any storage. At this point, I
concluded I would have to write a new compiler from scratch. That new
compiler is now known as GCC; none of the Pastel compiler is used in
it, but I managed to adapt and use the C frontend that I had written.
But that was some years later; first, I worked on GNU Emacs.
GNU Emacs
I began work on GNU
Emacs in September 1984, and in early 1985 it was beginning to be
usable. This enabled me to begin using Unix systems to do editing;
having no interest in learning to use vi or ed, I had done my editing
on other kinds of machines until then.
At
this point, people began wanting to use GNU Emacs, which raised the
question of how to distribute it. Of course, I put it on the anonymous
ftp server on the MIT computer that I used. (This computer,
prep.ai.mit.edu, thus became the principal GNU ftp distribution site;
when it was decommissioned a few years later, we transferred the name
to our new ftp server.) But at that time, many of the interested people
were not on the Internet and could not get a copy by ftp. So the
question was, what would I say to them?
I
could have said, "Find a friend who is on the Net and who will make a
copy for you." Or I could have done what I did with the original PDP-10
Emacs: tell them, "Mail me a tape and a SASE, and I will mail it back
with Emacs on it." But I had no job, and I was looking for ways to make
money from free software. So I announced that I would mail a tape to
whoever wanted one, for a fee of $150. In this way, I started a free
software distribution business, the precursor of the companies that
today distribute entire Linux-based GNU systems.
Is
a Program
Free for Every User?
If a
program is free software when it leaves the hands of its author, this
does not necessarily mean it will be free software for everyone who has
a copy of it. For example, public domain software (software that is not
copyrighted) is free software; but anyone can make a proprietary
modified version of it. Likewise, many align="left" free programs are
copyrighted
but distributed under simple permissive licenses that allow proprietary
modified versions.
The
paradigmatic example of this problem is the X Window System. Developed
at MIT, and released as free software with a permissive license, it was
soon adopted by various computer companies. They added X to their
proprietary Unix systems, in binary form only, and covered by the same
nondisclosure agreement. These copies of X were no more free software
than Unix was.
The developers
of the X Window System did not consider this a problem--they expected
and intended this to happen. Their goal was not freedom, just
"success," defined as "having many users." They did not care whether
these users had freedom, only that they should be numerous.
This
lead to a paradoxical situation where two
different ways of counting the amount of freedom gave different answers
to the question, "Is this program free?" If you judged based on the
freedom provided by the distribution terms of the MIT release, you
would say that X was free software. But if you measured the freedom of
the average user of X, you would have to say it was proprietary
software. Most X users were running the proprietary versions that came
with Unix systems, not the free version.
Copyleft and the GNU GPL
The
goal of GNU was to give users freedom, not just to be
popular. So we needed to use distribution terms that would prevent GNU
software from being turned into proprietary software. The method we use
is called "copyleft."[3] Copyleft uses copyright law, but flips it over
to serve the opposite of its usual purpose: instead of a means of
privatizing software, it becomes a means of keeping software free.