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

Re: On interpreting licences (was: KDE not in Debian?)



This is an expanded version of my original response to this 
message.  Andreas indicated that he didn't understand why
what I was saying was significant.

On Mon, Feb 07, 2000 at 07:10:32PM -0500, Andreas Pour wrote:
> > What does it mean for a program to accompany itself?  Why do you raise
> > this point?
> 
> It's not that the program accompanies itself. The paragraph of
> Section 3 in question deals in terms of "components" and "modules",
> not entire executables.

The GPL uses the term "module" exactly once, and "component" and
"components" once each.  Here's the paragraph where this happens:

  The source code for a work means the preferred form of the work for
  making modifications to it.  For an executable work, complete source
  code means all the source code for all modules it contains, plus any
  associated interface definition files, plus the scripts used to
  control compilation and installation of the executable.  However, as a
  special exception, the source code distributed need not include
  anything that is normally distributed (in either source or binary
  form) with the major components (compiler, kernel, and so on) of the
  operating system on which the executable runs, unless that component
  itself accompanies the executable.

Note that this paragraph follows a couple clauses which require the
complete corresponding source code for an executable before you
can distribute the executable:

  Sections 1 and 2 above provided that you also do one of the following:

      a) 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; or,

      b) Accompany it with a written offer, valid for at least three
      years, to give any third party, for a charge no more than your
      cost of physically performing source distribution, a complete
      machine-readable copy of the corresponding source code, to be
      distributed under the terms of Sections 1 and 2 above on a medium
      customarily used for software interchange; or,
...


If you bother to read that, you'll see that

(*) The source code must be complete.
(*) The source code must correspond to the machine code.
(*) Source code must be provided for every piece of the
program.

(*) There's a special exception for a proprietary libc if that libc
accompanies a major "component" of the operating system which is not
distributed with the GPLed program.

The requirement that the source code must be complete conflicts with the
idea that you can distribute a working copy of kghostscript yet fail to
distribute all the source code for a working copy of kghostscript.

I suppose that Andreas imagines that kghostscript being split up
into multiple files somehow makes a difference.

So, when Andreas says:

> So in the hypothetical case we discuss, libc is a "component"
> (although statically linked, the library is a separate binary inside
> the "executable", if I understand the linking process correctly) which
> accompanies the GPL'd component inside the executable.

I must assume that he's misread the GPL, because libc is not a "component"
in the sense that the GPL uses the term.

And (looking at the phrase "GPL'd component") the way the GPL uses the
term, a "component" wouldn't be licensed under the GPL.

In the terms of the GPL, a proprietary libc would be an "anything" that
is normally distributed with a major component of the operating system.

There's really no point discussing the logic of this sentence that
Andreas wrote -- it just plain doesn't relate to the GPL in any
meaningful fashion.  If I rewrote it so that we called libc a "module"
which accompanies the GPLed module inside the executable, then the
sentence would make sense.  But in that case it doesn't make any
interesting points...

Andreas goes on to say:

> In any event, as I look up the definition of "accompany" in Webster's
> New Universal Unabridged Dictionary (2d ed. 1983), I get:
> 
>     (1) to go with or attend as a companion or associate on a journey, a walk,
> etc.; as, a man *accompanies* his friend to church, or on a tour.
>     (2) to be with, as connected; to attend; as, pain *accompanies* disease.
>     Syn: attend

I have no disagreements with this, and am only quoting it so that
Andreas can't claim that I've ignored it.

> And attend means (taking the only relevant definition):
> 
>     (3) to accompany as a circumstance or result; to be consequent to, from
> connection of cause, as fever *attends* a cold; a measure *attended* with ill
> effects.

Likewise I have no problem with this as a definition.

> Looking to the first definition of "accompany", I think it fair to
> say that the libc "goes with" or "attends as a companion" the GPL
> executable as it is distributed.

No problem there.  But why would this be relevant, and to what?

The answer to that question seems to reside in Andreas's confusion
about what a "major component of the OS" is that the GPLed program
must not accompany for that special exception in the GPL to be
applicable.

> If you look at Section 3, it refers to "For an executable work,
> complete source code means all the source code for all *modules*
> it contains", with an exception for "anything that is normally
> distributed . . . with the major *components* . . . of the operating
> system . . . , unless that *component* itself accompanies the
> executable." OK, so you need all source code to all modules except
> for modules normally distributed with the major components of the OS,
> unless that component "accompanies"-- "goes with" -- the executable.
> In our hypothetical, the module is libc. Hence, you need the source
> code to libc, except if libc is normally distributed with the OS and
> it does not "accompany" -- "go with" -- the executable.

This is correct up till that last sentence.  The GPL requires that
the major component (compiler, kernel, ...) does not accompany the
executable.  It does not require that that part of the program not
accompany the executable.  There's nothing in this paragraph (it's the
first quote from the GPL near the top of this message) that indicates
that you can't ship a working executable.

[I pointed this out in a previous message, and I assumed that Andreas
had bothered to read it (since he replied to that message).  However,
in the interest of not being curt I'm repeating this point here.]

> The problem with your reading of accompany is that a lesser cannot
> accompany a greater.

I ignored this since for it to be relevant it must mean that
libc cannot accompany a compiler.  So this sentence must either
be false or irrelevant.

[I don't see why should I waste time on this preposition when the
previous prepositions were obviously false.  A very careful reading of
Andreas' message might imply that he somehow thinks >>I've<< asserted
this false-or-irrelevant statement.  If that's the case, he's worded his
argument very poorly -- if nothing else, he's not quoted anything from
me that would support his idea that I said any such thing.  Anyways,
since he doesn't come out and say that this is what I said it's probably
not worth wasting time arguing against this implication that he never
actually came out and said.]

> However, this is not the case: "I" can accompany my "family", although
> I am part of my family, a "component" of my family. Similarly,
> when you have a set of components/modules, any one can "accompany"
> the others, even if they are all linked together. This is even
> more the case with GPL, since it is in copyright universe, and
> certainly if you have a book composed of essays you can say each essay
> "accompanies" the book, although each essay forms part of the book it
> is accompanying.

This seems irrelevant to the current discussion (or should I say
"non-sequitor"?).

> Under your reading, even the OS vendor could get away distributing
> GPL'd code with a static proprietary libc or other system library,
> so long as there is no dynamic libc (and perhaps, depending on your
> reading, no program which is non-GPL'd using that libc), since in each
> case the GPL'd program will not be accompanied by

Andreas didn't bother finishing his sentence, and I'm going to
limit myself to responding to what he actually said.

(1) I see nothing in my interpretation that distinguishes between
static and dynamic linkages.

(2) I don't see how my interpretation let's an OS Vendor distribute
the GPLed program -- essentially, the OS vendor must make sure that
they never distribute the GPLed program with the OS.  If they ever
do, they lose all rights to distribute the GPLed program.  So they
have to set up a distinct distribution channel for the GPLed program.
Which is roughly the same thing as saying that the OS Vendor isn't
distributing the GPLed program.

As an example of this, consider the web site: www.sunfreeware.com.
You can find GPLed programs on this site, which are precompiled for
running under Solaris.  Yet, for some reason (guess what it is...)
you can't order any of those programs directly from sun.

> So, I guess a clever distributor, under your reading, could
> create two proprietary libcs, a "libc-for-GPL-progs" and a
> "libc-for-other-progs", and for the sake of argument let's assume
> they are in fact different libraries (let's say one is Company X libc
> and another is Company Y libc). Then the OS vendor could link all the
> GPL'd programs to the former (and not have to include the source code
> to libc b/c the libc does not, under your reading, "accompany" the
> GPL'd code), and all the non-GPL'd programs to the latter (being a
> different library it does not fall under the "unless" clause). And to
> be even cleverer, perhaps both libcs can come from the same Company,
> as long as they are different so that for copyright purposes they are
> not the same "work". Again, your reading is opening a hole in the GPL.

Once again, Andreas misses a most important point of that exception:
libc (whether libc-for-GPL-progs or libc-for-other-progs) must accompany
a major component of the OS: basically, that's either the compiler or
the kernel.  So he's imagining this "loophole" where a company goes
to a lot of extra work to come up with a duplicate libc, but for
what?  His loophole doesn't even relate back to the terms of the GPL.

A reasonable person might have come to expect this flaw in his logic
from my earlier message (where I pointed out that his reading of that
exception clause of the GPL was false).

> Another way to state it is, under your reading, under OSs that lack
> dynamic linking, no library would every "accompany" any executable,
> and hence presumably no library source code need by included
> regardless of how many GPL'd programs the vendor distributes. (I
> hope you do not suggest that a library statically linked in another
> executable satisfies the "accompany" term, b/c that is really a
> stretch.)

As I pointed out earlier, it's the major OS component (kernel,
compiler,..) which can't accompany the GPLed program. This means that
the GPLed program can't be distributed in a way that ever lets the GPLed
program be distributed with the kernel (or compiler). Because otherwise
the OS Vendor would lose all rights to distribute the GPLed program.

Notice that "dynamic linking" doesn't even enter the picture.

> > If "it" doesn't mean the GPLed program, what is it that you say would
> > be statically linked?
> >
> > > > There's nothing in that exception which says that libc can't accompany
> > > > the GPLed executable.
> > >
> > > Of course it can, but then you have to include the source code.
> >
> > Sure -- you not only have to include the source code, but you have to
> > make sure it's distributed under GPL terms... but then we wouldn't be
> > talking about that proprietary libc.
> >
> > > > The requirement is that the GPLed executable
> > > > can't be accompanied by the major component of the operating system
> > > > which includes the cannonical copy of libc.
> > > >
> > > > Stated even more informally, that exception says: you can use a
> > > > proprietary libc if everyone already has it, but then the the OS vendor
> > > > (who stuck everyone with this proprietary libc) can't distribute the
> > > > GPLed program.
> > >
> > > I don't see any reference to OS vendor, whether explicit or implicit,
> > > in the language of Section 3 of the GPL. The only distinction on the
> > > system component exception is whether the system component accompanies
> > > the executable or not: if not, you are excused from including the
> > > source code for that component, if it does, you are not excused
> >
> > It seems to me that you'd call someone distributing major components of
> > a proprietary OS an OS vendor.  I'm sure you could construct examples
> > which are exceptions to that rule.  But I made it very clear that I was
> > talking informally -- I was talking about the usual case, not trying to
> > be so general that I was covering all potential issues.
>
> I still have a problem with your "accompanies" interpretation. I guess
> that is the root of our particular disagreement here.

I don't think that we're disagreeing about what "accompanies" means.

I think we're disagreeing about what it is that can't accompany the
GPLed program.

> And this makes me reiterate my point made many times before: GPL
> is drafted very poorly. You can reasonably disagree on just about
> anything. Time to clean it up!

I must say that it appears to me that your understanding of the english
language is what's at fault.

-- 
Raul


Reply to: