The GNU Operating System and the Free Software Movement
by Richard Stallman
(continued)
The C library does a generic
job; every proprietary system or compiler comes with a C library.
Therefore, to make our C library available only to free software would
not have given free software any advantage--it would only have
discouraged use of our library.
One system is an
exception to this: on the GNU system (and this includes GNU/Linux), the
GNU C library is the only C library. So the distribution terms of the
GNU C library determine whether it is possible to compile a proprietary
program for the GNU system. There is no ethical reason to allow
proprietary applications on the GNU system, but strategically it seems
that disallowing them would do more to discourage use of the GNU system
than to encourage development of free applications.
That is why using the Library GPL is a good
strategy for the C library. For other libraries, the strategic decision
needs to be considered on a case-by-case basis. When a library does a
special job that can help write certain kinds of programs, then
releasing it under the GPL, limiting it to free programs only, is a way
of helping other free software developers, giving them an advantage
against proprietary software.
Consider
GNU Readline, a library that was developed to provide command-line
editing for BASH. Readline is released under the ordinary GNU GPL, not
the Library GPL. This probably does reduce the amount Readline is used,
but that is no loss for us. Meanwhile, at least one useful application
has been made free software specifically so it could use Readline, and
that is a real gain for the community.
Proprietary
software developers have the advantages money provides; free software
developers need to make advantages for each other. I hope some day we
will have a large collection of GPL-covered libraries that have no
parallel available to proprietary software, providing useful modules to
serve as building blocks in new free software, and adding up to a major
advantage for further free software development.
Scratching
an Itch?
Eric Raymond says that
"Every good work of software starts by scratching a developer's
personal itch." Maybe that happens sometimes, but many essential pieces
of GNU software were developed in order to have a complete free
operating system. They come from a vision and a plan, not from impulse.
For example, we developed the GNU C
library because a Unix-like system needs a C library, the Bourne-Again
Shell (BASH) because a Unix-like system needs a shell, and the GNU tar
because a Unix-like system needs a tar program. The same is true for my
programs, the GNU C compiler, GNU Emacs, GDB, and GNU Make.
Some GNU programs were developed to cope with
specific threats to our freedom. Thus, we developed gzip to replace the
Compress program, which had been lost to the community because of the
LZW patents. We found people to develop LessTif, and more recently
started GNOME and Harmony, to address the problems caused by certain
proprietary libraries (see below). We are developing the GNU Privacy
Guard to replace popular non-free encryption software, because users
should not have to choose between privacy and freedom.
Of course, the people writing these programs
became interested in the work, and many features were added to them by
various people for the sake of their own needs or interests. But that
is not why the programs exist.
Unexpected
Developments
At
the beginning of the GNU project, I imagined that we would develop the
whole GNU system, then release it as a whole. That is not how it
happened.
Since each component
of the GNU system was implemented on a Unix system, each component
could run on Unix systems, long before a complete GNU system existed.
Some of these programs became popular, and users began extending them
and porting them--to the various incompatible versions of Unix, and
sometimes to other systems as well.
The
process made these programs much more powerful, and attracted both
funds and contributors to the GNU project. But it probably also delayed
completion of a minimal working system by several years, as GNU
developers' time was put into maintaining these ports and adding
features to the existing components, rather than moving on to write one
missing component after another.
The GNU HURD
By 1990, the GNU system was almost
complete; the only major missing component was the kernel. We had
decided to implement our kernel as a collection of server processes
running on top of Mach. Mach is a microkernel developed at Carnegie
Mellon University and then at the University of Utah; the GNU HURD is a
collection of servers (or "herd of gnus") that run on top of Mach, and
do the various jobs of the Unix kernel. The start of development was
delayed as we waited for Mach to be released as free software, as had
been promised.
One reason for
choosing this
design was to avoid what seemed to be the hardest part of the job:
debugging a kernel program without a source-level debugger to do it
with. This part of the job had been done already, in Mach, and we
expected to debug the HURD servers as user programs, with the GNU
debugger (GDB). But it took a long time to make that possible, and the
multi-threaded servers that send messages to each other have turned out
to be very hard to debug. Making the HURD work solidly has stretched on
for many years.
Alix
The
GNU kernel was not originally supposed to be called the HURD. Its
original name was Alix--named after the woman who was my sweetheart at
the time. She, a Unix system administrator, had pointed out how her
name would fit a common naming pattern for Unix system versions; as a
joke, she told her friends, "Someone should name a kernel after me." I
said nothing, but decided to surprise her with a kernel named Alix.
It did not stay that way. Michael Bushnell
(now Thomas), the main developer of the kernel, preferred the name
HURD, and redefined Alix to refer to a certain part of the kernel--the
part that would trap system calls and handle them by sending messages
to HURD servers.
Ultimately,
Alix and I broke up, and she changed her name; independently, the HURD
design was changed so that the C library would send messages directly
to servers, and this made the Alix component disappear from the design.
But before these things happened, a friend
of hers came across the name Alix in the HURD source code, and
mentioned the name to her. So the name did its job.
Linux and
GNU/Linux
The GNU HURD is not
ready for production use. Fortunately, another kernel is available. In
1991, Linus Torvalds developed a Unix-compatible kernel and called it
Linux. Around 1992, combining Linux with the not-quite-complete GNU
system resulted in a complete free operating system. (Combining them
was a substantial job in itself, of course.) It is due to Linux that we
can actually run a version of the GNU system today.
We
call this system version GNU/Linux, to
express its composition as a combination of the GNU system with Linux
as the kernel.
Challenges in Our Future
We have proved our ability to develop a broad
spectrum of free software. This does not mean we are invincible and
unstoppable. Several challenges make the future of free software
uncertain; meeting them will require steadfast effort and endurance,
sometimes lasting for years. It will require the kind of determination
that people display when they value their freedom and will not let
anyone take it away.
The
following four sections discuss these challenges.
Secret Hardware
Hardware manufactures increasingly tend to
keep hardware specifications secret. This makes it difficult to write
free drivers so that Linux and XFree86 can support new hardware. We
have complete free systems today, but we will not have them tomorrow if
we cannot support tomorrow's computers.
There
are two ways to cope with this problem. Programmers can do reverse
engineering to figure out how to support the hardware. The rest of us
can choose the hardware that is supported by free software; as our
numbers increase, secrecy of specifications will become a
self-defeating policy.
Reverse
engineering is a big job; will we have programmers with sufficient
determination to undertake it? Yes--if we have built up a strong
feeling that free software is a matter of principle, and non-free
drivers are intolerable. And will large numbers of us spend extra
money, or even a little extra time, so we can use free drivers? Yes, if
the determination to have freedom is widespread.
Non-Free Libraries
A non-free library that runs on free
operating systems acts as a trap for free software developers. The
library's attractive features are the bait; if you use the library, you
fall into the trap, because your program cannot usefully be part of a
free operating system. (Strictly speaking, we could include your
program, but it won't *run* with the library missing.) Even worse, if a
program that uses the proprietary library becomes popular, it can lure
other unsuspecting programmers into the trap.