[racket] Clarification on licensing of Racket code?...

From: Brian Mastenbrook (brian at mastenbrook.net)
Date: Fri Apr 6 15:22:38 EDT 2012

On 04/06/2012 03:06 AM, Eli Barzilay wrote:
> No, that's a roughly description of GPL.  With the LGPL you're free to
> do whatever you want to do -- you're only required to make public any
> patches you did to the code you're using (ie, fixes and extensions to
> racket itself), but your own code is yours.  (And Racket is using the
> LGPL to *encourage* such uses.)

No; the straightforward license you just described is the MPL, not the 
LGPL. This is a very common and frustrating misconception. The LGPL says 
a lot of very complicated things which require a lawyer to interpret 
correctly.

(Disclaimer: I'm not a lawyer, but in a previous life I worked with 
lawyers to set company-wide processes and create training on how to 
comply with open source licenses for a Fortune 100 technology company.)

In the case of a Racket-generated executable, you must follow the 
requirements of section 6 of the LGPL 2.1, which says that the user must 
be able to relink the executable to a modified version of Racket. This 
is because the exception in section 5 only applies if you use "numerical 
parameters, data structure layouts and accessors, and small macros and 
small inline functions (ten lines or less in length)" from the LGPL'ed 
library, and any Racket of nontrivial complexity will probably involve a 
macro whose implementation happens to be longer than 10 lines of source 
code.

Section six says that you need to provide either object files which can 
be linked with a modified library, or use a "suitable shared library 
mechanism" which allows "interface-compatible" versions of the library 
to be linked. The difficulty in my mind comes in interpreting what 
"interface-compatible" means, and how to separate out the portions of 
the object file that are actually portions of the library (since they 
are the result of expanding a Racket macro). Other projects have either 
added a blanket exception for these kinds of cases [*], but adding such 
an exception for Racket would be tantamount to relicensing it.

You're in the clear if you include the source to your proprietary 
program with the binary, and the source can still be licensed under the 
terms of your choice. If you don't want to do so, talk to a lawyer.

[*]: The "LLGPL", a preamble to the LGPL used by a number of CL 
projects, is an example of this: 
http://opensource.franz.com/preamble.html . But instead of adding a 
preamble that contains additional conditions or terms, I'd recommend 
using the MPL instead. MPL v2.0 when used without the "incompatible with 
secondary licenses" option is an extensively reviewed, well-recognized 
and very straightforward license which is also compatible with the LGPL 
and the GPL via an explicit conversion clause.
-- 
Brian Mastenbrook
brian at mastenbrook.net
http://brian.mastenbrook.net/


Posted on the users mailing list.