Maybe someone should make a tool that strips the newlines out of macro definitions so they all meet the &quot;10 lines or less&quot; requirement. After all, isn&#39;t law mainly about finding loopholes?<br><br><div class="gmail_quote">

On Fri, Apr 6, 2012 at 1:22 PM, Brian Mastenbrook <span dir="ltr">&lt;<a href="mailto:brian@mastenbrook.net">brian@mastenbrook.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">On 04/06/2012 03:06 AM, Eli Barzilay wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
No, that&#39;s a roughly description of GPL.  With the LGPL you&#39;re free to<br>
do whatever you want to do -- you&#39;re only required to make public any<br>
patches you did to the code you&#39;re using (ie, fixes and extensions to<br>
racket itself), but your own code is yours.  (And Racket is using the<br>
LGPL to *encourage* such uses.)<br>
</blockquote>
<br></div>
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.<br>


<br>
(Disclaimer: I&#39;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.)<br>
<br>
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 &quot;numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length)&quot; from the LGPL&#39;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.<br>


<br>
Section six says that you need to provide either object files which can be linked with a modified library, or use a &quot;suitable shared library mechanism&quot; which allows &quot;interface-compatible&quot; versions of the library to be linked. The difficulty in my mind comes in interpreting what &quot;interface-compatible&quot; 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.<br>


<br>
You&#39;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&#39;t want to do so, talk to a lawyer.<br>
<br>
[*]: The &quot;LLGPL&quot;, a preamble to the LGPL used by a number of CL projects, is an example of this: <a href="http://opensource.franz.com/preamble.html" target="_blank">http://opensource.franz.com/<u></u>preamble.html</a> . But instead of adding a preamble that contains additional conditions or terms, I&#39;d recommend using the MPL instead. MPL v2.0 when used without the &quot;incompatible with secondary licenses&quot; 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.<span class="HOEnZb"><font color="#888888"><br>


-- <br>
Brian Mastenbrook<br>
<a href="mailto:brian@mastenbrook.net" target="_blank">brian@mastenbrook.net</a><br>
<a href="http://brian.mastenbrook.net/" target="_blank">http://brian.mastenbrook.net/</a></font></span><div class="HOEnZb"><div class="h5"><br>
<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</div></div></blockquote></div><br>