LLGPL Clarification

Marc Santoro ultima@tunes.org
Thu, 30 May 2002 07:38:33 -0000


Greetings all,

I'm not a lawyer, but...

I recently discovered the LLGPL <http://opensource.franz.com/preamble.html> 
It claims that the preamble overrides the LGPL; however, I do not see 
several things discussed in the LLGPL that, if defined by the LGPL, could 
be bad.

I do not feel that the LLGPL adequately protects the Lisp vendor or the 
developers of Lisp applications that include code licensed under the LLGPL, 
in particular because of Section 5, Lisp's complex macro system, and things 
like eval and lexical closures. I believe that in order to be effective, 
the LLGPL really needs to not be based on the LGPL, and include an 
effective statement of what defines a derivative work in terms of Lisp. The 
LLGPL defines this ineffectively by using the term "linking", which is not 
adequate, and not even particularly valid in terms of Lisp and other higher-
order languages.

To clarify, let me first quote part of Section 5 of the LGPL:

"When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)"

(end quote)

First off, Lisp doesn't have header files. But often macros are made 
available in some other way by an application or Library, and Lisp macros 
have a tendancy (in my experience, at least) to often grow to more than 10 
lines in length. In this case, the bytecode or native code generated by the 
Lisp would in fact contain object code that is part of the Library (this 
is -not- linking). This would make the application a derivative of the 
Library, imposing further licensing restrictions. Also, eval and lexical 
closures could be used along the same lines -- in a way that causes the 
inclusion of Library code into the routines using these data/functions 
exported by the Library. 

The LLGPL states that Section 6 is not applicable to the Library. However, 
because the work that uses the macros/closures and thus includes the 
library is considered a derivative, and the LLGPL specifies that 
derivatives are covered by the LGPL, then individual routines within the 
application that use complex macros or closures, or any other way of 
exporting code will be considered derivatives and covered by section 6 of 
the LGPL (not the LLGPL).

Now, refer to Section 2:

"But when you distribute the same sections as part of a whole which is a 
work based on the Library, the distribution of the whole must be on the 
terms of this License, whose permissions for other licensees extend to the
entire whole,"

This to me says that the executable distributed which uses significant 
macros from the Library and thus contains routines which are considered 
derivative works must be distributed as a whole, under the terms of the 
LGPL.

This would mean, for example, that someone could write a macro that 
simulates a toplevel read-eval-print loop, license that macro under the 
LLGPL, make an executable containing this macro that executes the macro at 
startup, and release that executable under the LGPL. A nifty way to pirate 
Lisp...

Anyway, I would appreciate any insight and clarifications to this matter. I 
recently submitted a question to Richard Stallman on an issue similar to 
this, to which he replied he would need to speak with a lawyer (namely, if 
an application vendor releases anything under GNU/Linux linked with LGPL 
libraries, whether Sections 5 and 6 would give users of these applications 
permission to disable copy protection). This comes up because again, 
executables containing substantial portions of the library in the code 
itself (again, nothing to do with linking) -- from header files, or macro 
definition files, are considered derivative works under the LGPL, and thus 
are subject to it's licensing terms.

Thank you,
  Marc Santoro