[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Heart of the debate



Marc van Leeuwen wrote:

> On Tue, 15 Feb 2000 06:52:00 -0500 Andreas Pour <pour@mieterra.com> wrote:
>
> > Marc van Leeuwen wrote:
> > > However, the main point seems to be that you want to apply the requirement
> > > of GPL 3a that "the complete source code must be distributed under the
> > > terms of GPL 1 and 2" without having, in the scope of that distribution of
> > > source code, the "Program" signifying "the complete source code". I can
> > > understand the feeling that this local change of meaning can be confusing,
> > > but suppose one does keep the meaning of "Program" unchanged. GPL 1 reads
> > > "You may copy... verbatim copies of the Program's source... " while GPL 2
> > > reads "You may modify your copy... of the Program or any portion of
> > > it...". Now if "Program" is not allowed to (in this context) designate
> > > "the complete source", then where is anything being required about the
> > > complete source?
> >
> > In Section 3(a), which requires you to distribute the complete source code,
> > and in Section 2(b), which (at least in the case of static linking) requires
> > permitting redistribution of the code at no charge to third parties.
> > Moreover, without that provision, one could make binary-only distributions;
> > at a minimum it creates the obligation to include the GPL-part of the binary
> > in source form. So, in fact, there is a lot of meat to Section 3(a) without
> > perverting the definitions provided in the GPL.
>
> As to 3a, yes obviously it requires (plain unqualified) distribution of the
> complete source, so you are right, there is a requirement there. I was
> thinking however about the addition "which must be distributed under the terms
> of Sections 1 and 2 above". Since "which" designates "the complete sources",
> this ought to establish some relation between "the complete sources" and
> "Sections 1 and 2" (which is why I cited only those sections). If you insist
> that in this re-invocation of the GPL (which it really is, otherwise why turn
> back to reconsider 1 and 2 which we presumably have already satisfied when we
> consider 3)

I think this is where you went off-track.  Section 2 only refers to source code
distributions (as it requires the modifications to be distributed under Section 1
and Section 1 deals only with source code).  Section 3 refers to compiled
distributions.  Section 3(a) tells me that if I make a binary distribution, I
have also to distribute (or make available) the complete source code.

When I read "under the terms of Sections 1 and 2", I interpret that as "in
compliance with".  "Under the terms of" is often used in legal documents to mean
"in compliance with" (e.g., if a bank says you have to make "interest payments
under the terms of this Loan Agreement", it is obvious that what is meant is "in
compliance with the Loan Agreement", rather than meaning "a whole separate Loan
Agreement applies to the interest payment" or that somehow the "entire" Loan
Agreement applies to the interest payment).  So you have to distribute the
complete source code in compliance with Sections 1 and 2.  Those sections place
some additional requirements on the "Program" and on any "work based on the
Program", but not on other works which are not based on the Program.

> the term "Program" does not mean "the complete sources", then I
> fail to see how one is obeying "which must be distributed under... ". And in
> that reading, your other example, 2b, requires permitting redistribution of
> (modified versions of) the Program, but that already was a condition for
> distributing it.

Section 3 deals with binary distributions; Section 2 does not (except indirectly
through Section 3).  Although a compilation is a "modification" for purposes of
the GPL, Section 3 still specifically states that the binary must be distributed
under Sections 1 and 2, whatever that means, as Section 1 only refers to source
code; if Section 2 referred to binary distributions on its own, its curious why
Section 3 specifically requires Section 2 to be applied to binaries.

No matter how you look at it, the GPL doesn't make much sense.  That's why I keep
saying it's terribly written.  I'm trying to make the best sense possible out of
a mess, and no matter how you interpret it, there will be warts.

> Without "Program" referring to anything more than the code to
> which this License was originally attached, I don't see how 2b is requiring
> permission to redistribute any added parts.

It's much clearer when you consider a statically-linked binary.  In that case,
the entire binary is a "work based on the Program", and so you must distribute
the entire thing "at no charge to all third parties".  In the DLL case, it may
not be covered at all, that certainly is a reasonable interpretation (insofar as
Section 2 applies to the binary itself, via the first sentence of Section 3).

> In fact I think I'm now getting
> into knots trying to see what you would mean: I'm trying to apply section 1
> and 2 strictly to the Program itself, but already section 2 is talking about
> "works based on the Program".

Here's the structure:

    Section 1:  unmodified redistributions
    Section 2:  modified distributions
    Section 3:  binary distributions

> So maybe the very fact that one is distributing
> "the complete sources", which as a whole would be a work based on the Program,
> gets one subjected to section 2, which requires (2b) that one "cause [that]
> work [i.e., the complete sources]... to be licensed as a whole at no charge to
> all third parties under the terms of this License".

The "complete sources" is broader than a "work based on the Program".  In the
case of a GPL binary with a non-GPL library, at least when distributed statically
linked, the complete source code includes the library source code, whereas in
that case the library is not a "work based on the Program".

> Is that why you say 2b is
> requiring something about the complete sources even though "Program" does not
> refer to them?

I'm not at all sure that 2(b) applies to the library source code (assuming the
library itself contains no GPL'd code).  I have assumed it for the sake of this
debate.  But it really is an open question, and frankly I think the more "true"
reading is that it does not.

However, in a statically-linked library case, it is required to distribute the
binary under Section 2, and in that case the requirement of Section 2(b) would be
to permit the redistribution of the binary (which is derived from the Program) at
no charge to all third parties.  (This seems to be the only part of Section 2
which makes sense when applied to a binary).

> The would seem quite reasonable, but I have two difficulties:
> (1) the activation of section 2 is independent of the "which must be
> distributed under... " clause in 3a, but simply caused by the fact that those
> complete sources are considered to be a derived work of the Program under
> copyright law (whence a work based on the Program),

I don't agree with this statement.  When I combine a short story by two authors
in an anthology, neither story is a "derived work" of the other.  Of course the
combined anthology is a derived work of both.

> and (2) this would seem to
> be exactly what you try to be avoiding, namely that the complete sources have
> to be licensed under the GPL.

I'm not trying to avoid anything, I am just trying to make sense out of a poorly
drafted legal document.

The problem with this debate has been all along that most people are
ends-oriented:  they want the GPL to mean something, so they go through all sorts
of contortions to have it mean what they want.  I don't believe I am stricken
with that attitude.

> If I recall your position correctly you'd rather
> not consider the complete sources as a derived work of the Program under
> copyright law, but rather as a compilation which happens to contain (parts of)
> the Program. But then (in your reading) 2b fails to require giving permission
> to redistribute any parts of the complete source,

Right, 2(b) would apply only to the Program and derived works of the Program,
including the binary.

> except those that are also
> part of the (original) Program, contrary (I think) to what you claimed.

Not sure what this is contrary to.  As I noted above, I did at some points assume
for the sake of argument that Section 2(b) does apply to Qt source code, but I am
not wed to that assumption.

The reason I did this is that your argument (that somehow Section 3 modifies
Section 2 to include the complete source code) is reasonable, although far from a
clear winner.  There are other ways to interpret the interaction of Sections 2
and 3.  I focused on the the stronger point, namely, assuming that Section 2
applies to the complete source code (rather than just the derived work of the
Program), it still does not require all of that source code to be licensed under
the GPL.  However, if you want to claim KDE violates the License, you have to
show both points -- first, that Section 2(b) applies to the entire source code,
and second, that Section 2(b) requires that entire source code to be licensed
under the GPL.

> (BTW,
> I think I pointed out once before that "at no charge to third parties" refers
> to the act of licensing, not to that of distributing).

Agreed.

> So I can reformulate
> your reading of section 3a as follows (the part in brackets being explanation
> of what is implied by the rest):
>
>     a) Accompany it with the complete corresponding machine-readable source
>     code [each part under whatever conditions it happens to be available for
>     distribution, maybe some very restrictive EULA, or if copyrighted by the
>     distributor himself, without any permission to redistribute at all].

This would be true if the code being distributed is not a derived work of the
Program.  An example would be a library that uses no GPL'd code.  It obviously
would not hold true if the changes were made to the GPL'd code; I am talking only
about completely separate code here.

Incidentally, the fact that some of these results occur is one of the reasons I
keep stating that FSF should re-write the GPL.  Just b/c I see this as what the
GPL says does not mean I think that's what it should say.

>     Moreover [in case those complete sources do not already contain the
>     entire Program] you must also distribute the Program [as the presence of
>     this notice indicates, you only have permission to do that under the
>     conditions of this License; its only sections that concern permission to
>     copy the Program itself are 1 and (in case of any modifications) 2].

I don't follow this.

> Apart from the reference to the EULA, and the realisation that the Program
> might not be entirely contained in "the complete sources" (these came up while
> I was trying to formulate), I think this sums up what you've been saying.

I have made some clarifications, but I haven't thought through it fully -- I
actually need to get real work done today :-).

> Admittedly the second sentence is artificial, but I could find no other way to
> invoke, in the context of distributing a binary based on a small part of the
> original Program, the terms of Sections 1 and 2, with "Program" unchanged:
> apparently not just the complete sources for that binary are subject to an
> obligation of being distributed, but so should the entire original Program
> (lest we perform the abomination of restricting "Program" to mean the part
> that was actually used in the binary).

If you modify the Program, you don't have to distribute the entire Program.
Where does it say that?  You only have to distribute the complete source to your
binary, which may or may not include all of the Program (an example may be if I
rip an encryption function out of a Program and use it in a different Program --
I don't have to include the entire encryption Program in my distribution, only
the source code I ripped out).

> > > It would seem awfully silly if GPL 3 would go to some lengths to define
> > > the exact extent of "the complete source", only to apply it in a
> > > requirement in which that extent is immaterial.
> >
> > It is true that a court will try to give meaning to every part of a legal
> > document. But if such meaning can be provided, the fact that you or even the
> > court thinks the document is silly is no grounds to rewrite it. If I were to
> > make sense of Section 3(a), the most logical thing IMHO is to read it to
> > require the distribution of all source code, with the GPL'd part only having
> > to comply with Section 2. This makes sense because there it would be "silly"
> > to apply GPL provisions to non-GPL code.
>
> In my copy of the GPL, the commentary following 2c makes it quite explicit
> that there are cases where originally non-GPL code has to be subject to
> provisions of the GPL, as a condition for allowing a larger whole to be
> distributed. So I don't see why the idea that the GPL intends to require
> something like that should be considered to be silly.

The question is, as before, *which* provisions.  And, moreover, you may be
neglecting that the GPL has quite a few teeth when it comes to modifications to
GPL code (unlike BSD and XFree).  Here I am considering only a completely
separate work that is dynamically linked with GPL code (and I may also point out
that this separate work was not written to avoid the restrictions of the GPL).

> > What would be even more "silly", IMHO, is to introduce the rather ambitious
> > requirement to license all derived works completely under the GPL in such an
> > obscure manner. I would think if the licensor wanted me to do that there
> > would be an explicit paragraph 2(b) saying something like,
> >
> >     You may modify your copy or copies of the Program or any portion of it,
> >     thus forming a work based on the Program, and copy and distribute such
> >     modifications or work under the terms of Section 1 above, provided that
> >     you also meet all of these conditions:
> >
> >      . . .
> >
> >         (b) you must license all of your modifications to third parties
> >     under this License, place appropriate notices on the complete work based
> >     on the Program, and cause this complete work to itself constitute a
> >     "Program" for purposes of this License;
>
> Your formulation seems a bit more straightforward then the one in the GPL, but
> I think there are some valid reasons for the FSF preferring the actual text
> (which is not surprising as they probably spent more time trying to draft it
> than you did).

Well, if they had, it wouldn't be so unclear that we can spend years debating its
basic terms.  Why do you presume the license is well-written?  I mean, maybe you
would assume that at first, but after reading it?  Having to resort to
"functional parameters" and this and that, wondering at every turn what is meant,
that is not the sign of a well-written document.

> In particular your formulation is not clear about what to do
> about modifications that are simply additions of code copyrighted by somebody
> else (but with a sufficiently permissive licence to allow this); you cannot
> simply replace its licence by GPL (I know how strongly you feel about this).

Then you couldn't redistribute it.  My clause is truly "viral".  The GPL, as
written, is not.  The clause would require all authors to license under the GPL
(of course they could license under other licenses as well, but the GPL would
have to be one of them).

> By contrast GPL (as I read it) simply requires that the all permissions to
> third parties set forth in the GPL (but not necessarily all associated
> restrictions) apply to all parts of the whole being distributed,

How do you distinguish between permissions and restrictions?  The GPL permissions
are subject to the restrictions.  How do you separate them?

> even if they
> are perhaps derived from a licence other than GPL (logically that licence must
> then be at least as permissive as GPL).

If you read Section 2(b) to require licensing under the GPL, then it has to be
under the GPL, not some other license that has some more or less
permissions/restrictions.  The concept of "GPL-compatible" comes up only if you
buy into the argument that Section 2 does not in fact require the added source
code to be licensed under the GPL, in which case I wonder what you do think it
means.

.> > > It is like you are saying something vaguely in the line of this:

> > >
> > > int GPL(int Program)
> > > { if (Program<=1) then return Program;
> > >   else
> > >   { int t=GPL(Program-1);
> > >           /* But the meaning of `Program' does not change!! */
> > >     return Program+t;
> > >   }
> > > }
> > >
> > > Do you see my point?
> >
> > Your point appears to be that words can change their meaning inside a
> > document. Sure that's the case. However, I note that you include in your
> > example code an express statement that does this redefinition (actually,
> > re-assignment).
>
> I suppose you mean by that the recursive call `GPL(Program-1)'. Yes that's it.
>
> > Where is this provision in the GPL? My example Section 2(a) above might
> > accomplish this; the GPL as written does not.
>
> You mean 2(b), where it says "cause this complete work to itself constitute a
> "Program" for purposes of this License".

Right.

> I suppose that means: for the
> instance of this Licence that is attached to this complete work; there
> obviously "the Program" would mean "this complete work", even if you hadn't
> required so explicitly.

Why would you attach the License to the "complete work" (under the actual GPL)?

> However, GPL 3a does something that even more clearly
> resembles a recursive call: "the complete corresponding machine-readable
> source code must be distributed under the terms of Sections 1 and 2 above".
> Substitution of actual parameters for formal ones is usually implicit in
> invocation; I guess something similar even holds in legal documents.

First, no, legal documents are not computer programs.  If it were, the GPL would
crash instantly when read -- in fact, it wouldn't even compile :-).

More to the point, this might be the case if "Program" in Section 2 were a
function parameter (and you could easily write Section 2 that way -- say by
having it refer to any source code distributed, rather than to the Program or a
work based on the Program, and then invoke Section 2 separately for a modified
Program).  However, the term "Program" happens to be a global variable defined in
Section 0 and Section 2 does not make it a parameter. (BTW, another way to do
this would be to write in Section 3(b):

    Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software
    interchange (and for purposes of applying Sections 1 and 2, such
    complete machine-readable source code shall constitute a "work
    based on the Program").

This would be modifying the global variable temporarily for purposes of executing
Section 2 (to stick with the CS jargon).

Ciao,

Andreas


Reply to: