ASSUMPTION

Parrot will only link to the GMP library, right?  Either static or
shared, doesn't matter.


IN BRIEF

If so, then there's no problem.  GMP is licensed under the LGPL, the
same license as libc6.  Parrot links to libc6 without any problem,
right?  (Though thankfully it doesn't use much of it...)

The only hassle comes if the Parrot project intends to distribute
>statically-linked binaries< that include GMP object code.  Even this is
easy to do if you add a few extra downloadable packages to your web site
(see section 6).

And, worst case, see section 14.  :)


IN DETAIL

I'm working off the text shown here:
http://www.gnu.org/copyleft/lesser.html

Here's my section-by-section crib...  Feel free to skip to the
conclusion.  :)

-1: Ignore the preamble.  All the important stuff is reiterated in
detail below.

0: Describes who "you" refers to: the person using Parrot+GMP, *not* the
Parrot developers or distributors.  "Library" refers to GMP.  Because
this is the LGPL, just linking against GMP does not make Parrot a
derivative work.  If Parrot were to actually incorporate GMP source
code, of course, it would be a derivative work.  In particular, "The act
of running a program using the Library is not restricted, and output
from such a program is covered only if its contents constitute a work
based on the Library" (they don't).

1: This section does not apply since the Parrot distribution presumably
won't contain any actual GMP source code.

2: We're not talking about redistributing a modified copy of the GMP
library, so this section does not apply.

3: Nobody is proposing that Parrot be relicensed solely under the GPL so
this section does not apply.

4: The Parrot project will be distributing source code, not object code,
so this section does not apply.

5: The first paragraph is key: "A program that contains no derivative of
any portion of the Library, but is designed to work with the Library by
being compiled or linked with it, is called a "work that uses the
Library". Such a work, in isolation, is not a derivative work of the
Library, and therefore falls outside the scope of this License."

Parrot, since it contains no GMP code, is defined as a "work that uses
the library."  This is even more clear since Parrot bignum support can
be enabled or disabled at compile time: "...[that Parrot is not a
derivative work] is especially significant if the work can be linked
without the Library."  Which, as far as I can tell, Parrot can.

6: Since the Parrot project will not be distributing binaries that are
statically linked against GMP, this section doesn't apply.  However,
let's talk further about this section...

It specifically says that it's fine to distribute a binary that
dynamically links against GMP.  However, statically linking merely
requires accompanying the work with an offer for GMP source code for at
least 3 years (why comply with clause (a) when you can comply with
clause (c)?).  As I read it, simply including a URL in the README that
points to a downloadable GMP package on the parrotcode web site totally
satisfies clause C.

The last two paragraphs of section 6 are REALLY unclear.  I can't even
tell what the FSF is trying to say.  It looks like it only applies if
you're distributing GMP with your executable, either statically or
dynamically linked.  I assume they're talking about tools required to
build GMP into Parrot.  Since Parrot is entirely open source, all these
tools are made available anyway, so I think that Parrot is automatically
in full compliance.  Frankly, though, these paragraphs are so unclear
that I'd want to contact the FSF for clarification...

7: Doesn't apply since Parrot is not re-distributing GMP.

8: Parrot intends to comply with the LGPL, so this section's
requirements are met.

9-13: Worries about patents, local restrictions, future versions of the
LGPL, etc.  None of which is really relevant to the discussion at hand.

14: If I'm wrong, and the LGPL truly is incompatible with Parrot then,
in their words: "If you wish to incorporate parts of the Library into
other free programs whose distribution conditions are incompatible with
these, write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free Software
Foundation; we sometimes make exceptions for this. Our decision will be
guided by the two goals of preserving the free status of all derivatives
of our free software and of promoting the sharing and reuse of software
generally."

I believe that the Parrot project would be very likely to receive such
an exemption if it asked for it.


IN CONCLUSION

GMP source code must be kept out of Parrot's source tree.  No problem.  
To distribute binaries dynamically linked against GMP, well, go right
ahead.  They don't contain any GMP object code, so no problem.

To distribute statically linked binaries, the distributor must also make
the GMP libraries and all tools used to compile them into Parrot
available and notify the end user of this in writing.  It would take a
tiny amount of extra effort to distribute statically-linked binaries.

So, I don't see much of a problem in Parrot's using LGPL'd code.


EXAMPLE

Worst case, let's say that some for-profit company wanted to include
Parrot pre-installed on a Zaurus.

Ideally, they dynamically link Parrot against GMP and comply with each
package's separate terms of redistribution.

If, for whatever reason, they need to staticalliy link GMP to Parrot,
then they would have to make the source to GMP and the tools they used
to build it into Parrot available on their web site, and include a link
to them in a README file.

If they could not even comply with this simple requirement, then their
statically-linked Parrot executable cannot contain bignum support (or
must provide it using an alternative library).


Am I missing anything?

    - Scott



Reply via email to