<p>I am developing a GPL-licensed application in Python and need to know if the GPL allows my program to use proprietary plug-ins. This is <a href="http://www.gnu.org/licenses/gpl-faq.html" rel="noreferrer">what the FSF has to say</a> on the issue:</p>
<blockquote>
<p><strong>If a program released under the GPL uses plug-ins, what are the requirements for the licenses of a plug-in?</strong></p>
<p>It depends on how the program invokes its plug-ins. 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.</p>
<p>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 the plug-ins must be released under the GPL or a GPL-compatible free software license, and that the terms of the GPL must be followed when those plug-ins are distributed.</p>
<p>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>
</blockquote>
<p>The distinction between fork/exec and dynamic linking, besides being kind of artificial, doesn't carry over to interpreted languages: what about a Python/Perl/Ruby plugin, which gets loaded via <code>import</code> or <code>execfile</code>?</p>
<p>(edit: I understand why the distinction between fork/exec and dynamic linking, but it seems like someone who wanted to comply with the GPL but go against the &quot;spirit&quot; --I don't-- could just use fork/exec and interprocess communication to do pretty much anything).</p>
<p>The best solution would be to add an exception to my license to explicitly allow the use of proprietary plugins, but I am unable to do so since I'm using <a href="http://trolltech.com/products/qt" rel="noreferrer">Qt</a>/<a href="http://www.riverbankcomputing.co.uk/software/pyqt/intro" rel="noreferrer">PyQt</a> which is GPL.</p>

[{'answer_id': 31420, 'author': 'dmckee --- ex-moderator kitten', 'author_id': 2509, 'author_profile': 'https://Stackoverflow.com/users/2509', 'pm_score': 1, 'selected': False, 'text': "<p>@Daniel <blockquote>The distinction between fork/exec and dynamic linking, besides being kind of artificial, doesn't carry over to interpreted languages: what about a Python/Perl/Ruby plugin, which gets loaded via import or execfile?</blockquote></p>\n\n<p>I'm not sure that the distinction <strong>is</strong> artificial. After a dynamic load the plugin code shares an execution context with the GPLed code. After a fork/exec it does not.</p>\n\n<p>In anycase I would guess that <code>import</code>ing causes the new code to run in the same execution context as the GPLed bit, and you should treat it like the dynamic link case. No?</p>\n"}, {'answer_id': 31421, 'author': 'jsight', 'author_id': 1432, 'author_profile': 'https://Stackoverflow.com/users/1432', 'pm_score': 4, 'selected': True, 'text': '<blockquote>\n  <p>he distinction between fork/exec and dynamic linking, besides being kind of artificial,</p>\n</blockquote>\n\n<p>I don\'t think its artificial at all.  Basically they are just making the division based upon the level of integration.  If the program has "plugins" which are essentially fire and forget with no API level integration, then the resulting work is unlikely to be considered a derived work.  Generally speaking a plugin which is merely forked/exec\'ed would fit this criteria, though there may be cases where it does not.  This case especially applies if the "plugin" code would work independently of your code as well.</p>\n\n<p>If, on the other hand, the code is deeply dependent upon the GPL\'ed work, such as extensively calling APIs, or tight data structure integration, then things are more likely to be considered a derived work.  Ie, the "plugin" cannot exist on its own without the GPL product, and a product with this plugin installed is essentially a derived work of the GPLed product.</p>\n\n<p>So to make it a little more clear, the same principles could apply to your interpreted code.  If the interpreted code relies heavily upon your APIs (or vice-versa) then it would be considered a derived work.  If it is just a script that executes on its own with extremely little integration, then it may not.</p>\n\n<p>Does that make more sense?</p>\n'}, {'answer_id': 31423, 'author': 'Alasdair', 'author_id': 2654, 'author_profile': 'https://Stackoverflow.com/users/2654', 'pm_score': 0, 'selected': False, 'text': "<p>How much info are you sharing between the Plugins and the main program? If you are doing anything more than just executing them and waiting for the results (sharing no data between the program and the plugin in the process) then you could most likely get away with them being proprietary, otherwise they would probably need to be GPL'd.</p>\n"}]
['https://Stackoverflow.com/questions/31412', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/3002/']