我正在用 Python 开发一个 GPL 许可的应用程序,需要知道 GPL 是否允许我的程序使用专有插件。这是FSF在这个问题上必须说的:
如果在 GPL 下发布的程序使用插件,插件的许可证有什么要求?
这取决于程序如何调用其插件。如果程序使用fork和exec调用插件,那么插件是独立的程序,所以主程序的license对它们没有要求。
如果程序动态链接插件,它们之间进行函数调用并共享数据结构,我们认为它们形成了一个单独的程序,必须将其视为主程序和插件的扩展。这意味着插件必须在 GPL 或与 GPL 兼容的自由软件许可下发布,并且在分发这些插件时必须遵守 GPL 的条款。
如果程序动态链接插件,但它们之间的通信仅限于通过一些选项调用插件的'main'函数并等待它返回,这是一种边缘情况。
fork/exec 和动态链接之间的区别,除了有点人为之外,并没有延续到解释语言:Python/Perl/Ruby 插件怎么样,它通过import
or加载execfile
?
(编辑:我理解为什么 fork/exec 和动态链接之间的区别,但似乎有人想要遵守 GPL 但违背“精神”——我不——可以只使用 fork/exec 和进程间通信几乎可以做任何事情)。
最好的解决方案是在我的许可证中添加一个例外,以明确允许使用专有插件,但我无法这样做,因为我使用的是 GPL 的Qt / PyQt 。