Hi Fernando,<div><br></div><div>Thanks for the references and for clarifying the issue with <a class="zem_slink" href="http://en.wikipedia.org/wiki/Library_%28computing%29" title="Library (computing)" rel="wikipedia">dynamic linking</a>. I personally don&#39;t think that dynamic linking should be considered derivative work, but that debate is likely to rage on for years. </div>
<div><br></div><div>Reading up on the wikipedia article you pointed, I think I found a safe way for Ipython to include support for pydbgr. Check out this quote from the  FSF site:</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><br></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">
<b><a name="GPLPluginsInNF">Can I apply the GPL when writing a plug-in for a non-free program?</a></b></dt></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">If the program uses fork and exec to invoke plug-ins, then the plug-ins are separate programs, so the license for the main program makes no requirements for them. So you can use the GPL for a plug-in, and there are no special requirements.</p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">If the program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single program, which must be treated as an extension of both the main program and the plug-ins. This means that combination of the GPL-covered plug-in with the non-free main program would violate the GPL. However, you can resolve that legal problem by adding an exception to your plug-in&#39;s license, giving permission to link it with the non-free main program.</p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">See also the question <a href="#FSWithNFLibs">I am writing free software that uses a non-free library.</a></p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">
<b><a name="NFUseGPLPlugins">Can I release a non-free program that&#39;s designed to load a GPL-covered plug-in?</a></b></dt></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">It depends on how the program invokes its plug-ins. For instance, if the program uses <em style="font-style: italic; font-weight: inherit; ">only</em> simple fork and exec to invoke and communicate with plug-ins, then the plug-ins are separate programs, so the license of the plug-in makes no requirements about the main program.</p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">If the program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single program, which must be treated as an extension of both the main program and the plug-ins. In order to use the GPL-covered plug-ins, the main program must be released under the GPL or a GPL-compatible free software license, and that the terms of the GPL must be followed when the main program is distributed for use with these plug-ins.</p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">If the program dynamically links plug-ins, but the communication between them is limited to invoking the ‘main’ function of the plug-in with some options and waiting for it to return, that is a borderline case.</p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking.</p>
</dd></span></div><div><span class="Apple-style-span" style="color: rgb(53, 56, 42); font-family: sans-serif; font-size: 16px; line-height: 20px; "><dd style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 1em; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 1em; padding-left: 0px; line-height: 1.3em; ">See also the question <a href="#FSWithNFLibs">I am writing free software that uses a non-free library.</a></p>
</dd></span></div></blockquote><font class="Apple-style-span" color="#35382A" face="sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px; line-height: 20px;"><br></span></font><div><br><div class="gmail_quote">
>From the above text it would be perfectly fine to invoke the debugger as long as it was ran on a separate process, as is frequently the case with debuggers. On the (pydbgr) project page, The ability to debug a program from a separate process is presented as a design feature! </div>
<div class="gmail_quote">Please note that with this suggestion, I am not trying to diminish the threat posed by the GPL to the Ipython code. But only to point out that there are ways to achieve compatibility, if necessary.</div>
<div class="gmail_quote"><br></div><div class="gmail_quote">best,</div><div class="gmail_quote">Flávio</div><div class="gmail_quote"><br></div><div class="gmail_quote">On Tue, Jan 26, 2010 at 7:38 AM, Fernando Perez <span dir="ltr">&lt;<a href="http://fperez.net">fperez.net</a>@<a href="http://gmail.com">gmail.com</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 Mon, Jan 25, 2010 at 10:44 PM, Flavio Coelho &lt;<a href="mailto:fccoelho@gmail.com">fccoelho@gmail.com</a>&gt; wrote:<br>

</div><div class="im">&gt; another link:<br>
&gt;<br>
&gt; <a href="http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html" target="_blank">http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html</a><br>
&gt;<br>
&gt; I hope this links, although not sufficient to educate a decision on how to<br>
&gt; mix licenses, may help to steer this discussion in the right direction.<br>
&gt;<br>
<br>
</div>This goes in the other direction, which isn&#39;t relevant for this<br>
discussion.  The key point is well summarized by this wikipedia<br>
section:<br>
<br>
<a href="http://en.wikipedia.org/wiki/GNU_General_Public_License#Linking_and_derived_works" target="_blank">http://en.wikipedia.org/wiki/GNU_General_Public_License#Linking_and_derived_works</a><br>
<br>
It all amounts to whether dynamic linking (of which python runtime<br>
import is an extreme form) triggers the &#39;<a class="zem_slink" href="http://en.wikipedia.org/wiki/Derivative_work" title="Derivative work" rel="wikipedia">derived work</a>&#39; provisions of<br>
the <a class="zem_slink" href="http://en.wikipedia.org/wiki/GNU_General_Public_License" title="GNU General Public License" rel="wikipedia">GPL</a> and hence its <a class="zem_slink" href="http://en.wikipedia.org/wiki/Copyleft" title="Copyleft" rel="wikipedia">copyleft</a> effects.   As you can see, this is a<br>

highly contentious point, and one on which lawyers have weighed but<br>
without a definitive resolution in court.<br>
<br>
The last thing we want to do is to drag ipython into such a quagmire;<br>
fundamentally I think the best approach is to contact code authors of<br>
GPL code we may want to use in IPython.  If they feel that using<br>
<br>
import foo<br>
<br>
from their code truly demands that the code doing so becomes GPL, then<br>
we are not going to go over their position on their own code<br>
(regardless of how much case law may or may not exist on the matter).<br>
But if they ultimately only want to ensure that their code isn&#39;t<br>
modified without changes being contributed back, they may be willing<br>
to consider an <a class="zem_slink" href="http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License" title="GNU Lesser General Public License" rel="wikipedia">LGPL</a> or <a class="zem_slink" href="http://en.wikipedia.org/wiki/BSD_licenses" title="BSD licenses" rel="wikipedia">BSD license</a>, both of which make it trivial then<br>

to use their tool in ipython (since the *L*GPL has no copyleft<br>
provisions).<br>
<br>
Cheers,<br>
<font color="#888888"><br>
f<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Flávio Codeço Coelho<br><br>
</div>

<div class="zemanta-pixie" style="color:#CCCCCC;font-style:italic;text-align:right;"><a target="_blank" href="http://www.zemanta.com">Zemanta</a> helped me add links &amp; pictures to this email. <a target="_blank" href="http://www.zemanta.com/">It can do it for you too.</a></div>