Path: gmd.de!xlink.net!sol.ctr.columbia.edu!math.ohio-state.edu!
magnus.acs.ohio-state.edu!cis.ohio-state.edu!gnu.ai.mit.edu!rms
From: r...@gnu.ai.mit.edu (Richard Stallman)
Newsgroups: gnu.misc.discuss
Subject: Questions about the GPL
Date: 13 Jul 1993 00:35:15 -0400
Organization: GNUs Not Usenet
Lines: 180
Sender: dae...@cis.ohio-state.edu
Distribution: gnu
Message-ID: <9307130434.AA01666@mole.gnu.ai.mit.edu>

[This message did not appear sooner because I wanted to think
carefully and get feedback from friends before posting it.]


The purpose of the GPL is to make sure that changes and add-ons to GNU
software are free--by not allowing non-free changes or add-ons.

There are three questions to ask about any particular case of this:

* What requirements are ethically allowable?
* What requirements are advantageous for us to make?
* What requirements are we able to make?

The first question is, in essence, whether people sometimes have
a basic right to write non-free software, so that it would be
wrong to stop them.

For the GNU project, the answer is simple: making software non-free is
wrong in general, whether it incorporates GNU software or not.  So any
requirement that "You can't make a certain program non-free" cannot be
ethically objectionable.

(I know that most of society doesn't share these principles.  But
these are the principles that the GNU project is based on, and always
has been; the project is not going to abandon its principles, nor
adopt the other principles merely because they have many adherents.)

(The GPL doesn't try to say anything about development of non-free
software in general.  It only addresses the question how GNU software
can be distributed and incorporated into new programs.  The reason for
this is partly that we want to cooperate with everyone who wants to
work on the specific practical work of the project--building the GNU
system--including people who don't share the motivation on which the
GNU project was founded.)

The question of what requirements are advantageous is a complex one.
Sometimes we might gain more free software development by permitting a
certain kind of use of GNU software in proprietary software.

Some cases are very clear.  For instance, we would never try to say,
"You can't run any proprietary program on any GPL-covered kernel"
(regardless of whether this were legally possible), because it is
clear that this would discourage the use of all such kernels, and
would yield next to no benefit (benefit meaning more free software).

To facilitate/prepare for running proprietary programs on a GNU
kernel, we put the system call stubs into GNU libc, under the Library
GPL.

Likewise, it would be disadvantageous to try to stop people from using
a GNU utility such as awk or grep from a proprietary shell script.

Sometimes it isn't clear what choice will work out best for
encouraging more free software.  We originally distributed libg++
under the ordinary GPL, but moved it to the Library GPL to see if that
would encourage more development of libg++ and other GNU software.
(So far this particular change does not seem to have had much effect
of any kind; at least, when we asked people to tell us about its
effects, we heard about hardly any instances.  If you know of any such
instances, please send e-mail about them to
lgpl-qu...@prep.ai.mit.edu.)

As to what requirements we can make, copyright lets us restrict
anything that is done by combining GNU code with some other software
to make one larger combined work.  What precisely this means is a
difficult question: when do we have two separate programs, and when
do we have a single program made up of two parts?

It is impossible to be sure what the answer is.  Different courts
might rule differently.  What the FSF can say is when it will try to
claim two parts make one combined program.

I believe that the proper question to ask is, "Is it reasonable to say
that these two parts have been combined into one program, or is it
reasonable to say they are separate and independent programs."  This
depends on what the parts are and how they relate to each other, not
on how they are packaged.

Some people have asked the FSF to state a simple, mechanical
criterion, based on what sort of commands are used in building the
program or programs involved.  It's clear why such a rule would be
convenient in some ways.  But a mechanical rule has to be
superficial--it closes its eyes to what is really important.  The fact
that such rules tend to be easy to sneak around is an indication that
they aren't good rules.

Some people would like to see a line drawn which is clearly correct
and not at all arbitrary.  Unfortunately, that is an unrealistic
demand; it can't be satisfied, not in this question, and not in many
(perhaps most) legal questions.  Gray areas always arise.  They are
much worse in some other instances than it is here; consider the gray
area between drunk and sober, and the arbitrary numerical criterion
that was set up to separate them.  The only way to avoid this gray
area is to cut the guts out of the GPL, and that would not be an
improvement in terms of the GNU project's goals.

While it's impossible to state a general rule, I can address some
cases that I think will take care of almost all practical situations.

* Normally, when two different source files contain calls to each
other, combined by linking, we say they are part of a single program.
So when people make a collection of files intended to be linked
together, and some of these are GNU software, we say this means the
collection is one program and is covered by the GPL.

This is true just as much for libraries, even for libc, as it is for
tools such as the C compiler--whether a given set of object files are
packaged up into an archive is not a significant factor.  The reason
that you can link any program with GNU libc, and even distribute a
linked executable if you wish, is that the copying conditions for GNU
libc explicitly permit this (with certain conditions).

* Use of a shared library is intermediate in its significance between
distributing an executable and letting the user do the link.

* A program written in a language is normally separate from an
interpreter for that language or a compiler for that language.

* A separate program can run a GNU utility and communicate data with
it through the interface we implemented.  (If you make extensions that
are at all reasonable to call clean and general-purpose, the same
would be true for the extended utility.  On the other hand, if you
extend it in an arcane way that makes sense only in terms of the
internals of some specific other program, we might claim that makes
one combined program.)

Normally, people speak of separate programs that interact by fork and
exec, and by exchanging data in a common format.  For example, uucp
consists of many separate programs that interact in this way, but
there's general agreement that these are separate programs.

* An application program running on the GNU kernel we release will be
a separate program from the GNU kernel.  (Likewise, if you make kernel
extensions that are at all reasonable to call clean and
general-purpose.)

* A compatible replacement for a GNU program is separate from the
program it replaces.  (In fact, "separate" is an understatement; these
two programs are less likely to be combined than any two programs
picked at random, because either one makes the other unnecessary.)

The claim that a compatible program infringes the copyright on the
original program is what's generally known as "interface copyright".
The FSF does not do this; we do not legally object to making a
compatible replacement for a GNU program (though we might well think
it's a shame or a mistake).

* If your work is not a combined work including GNU software, but
somebody else goes ahead and combines them, that is not your
responsibility.  For example, if you make a program that expects to be
linked with termcap--any termcap implementation--then there's no way
to claim you have incorporated GNU termcap in particular.  (There are
non-GNU termcap implementations that are clearly serious.)  If someone
else decides to link the program with GNU termcap, that does produce a
combined work, but it isn't your responsibility.

These positions are not new; the FSF has not changed its position on
these questions for several years.  The FSF may change its position to
permit additional modes of use whenever we see an advantage for the
free software community in doing so.  But we will not make a change in
the other direction unless loopholes appear and we change the GPL to
close them.  (If a new version of the GPL has additional requirements,
they will naturally apply only to new software versions released
subsequently; we can't make them retroactive.)

However, there are some areas that are gray, where we won't take a
position until we have to.  If you are actually planning a project and
you are not sure what the GPL says about it, please contact the FSF
via g...@prep.ai.mit.edu and ask.

We can't undertake to answer all hypothetical questions.  Thinking
about these questions is often a lot of work, sometimes too much work
to do just for the sake of curiosity.  Besides, the answer to a
hypothetical question often must be "It depends on other details," or
"We have to ask our lawyer."  (And that costs money, which we might
not decide to spend for hypothetical questions.)

If you simply try to keep free and non-free software at arms length,
not only in terms of how you package them but also in terms of how
they interact, then you will probably not have a problem.