GPL程序的专有插件:解释语言呢?
我正在用Python开发GPL许可的应用程序,并且需要知道GPL是否允许我的程序使用专有插件。 FSF在这个问题上要说的是:
If a program released under the GPL uses plug-ins, what are the requirements for the licenses of a plug-in? 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. 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. 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.
fork / exec和动态链接之间的区别,除了人为的以外,不会延续到解释的语言上:如何通过import或者execfile加载的Python / Perl / Ruby插件呢?
(编辑:我了解为什么fork / exec和动态链接之间的区别,但是似乎有人想要遵守GPL但违反了"精神"-我不能只使用fork / exec和内部进程通信几乎可以做任何事情)。
最好的解决方案是在我的许可证中添加一个例外,以明确允许使用专有插件,但是由于我使用的是GPL Qt / PyQt,所以我无法这样做。
解决方案
回答
@丹尼尔
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?
我不确定这种区分是人为的。动态加载后,插件代码与GPLed代码共享一个执行上下文。在fork / exec之后,它不会。
无论如何,我都会猜到"导入"会导致新代码在与GPLed位相同的执行上下文中运行,因此我们应将其视为动态链接大小写。不?
回答
he distinction between fork/exec and dynamic linking, besides being kind of artificial,
我完全不认为这是人为的。基本上,他们只是根据集成级别进行划分。如果程序具有在没有API级别集成的情况下实际上会被遗忘的"插件",则最终的工作不太可能被视为派生工作。一般而言,仅分叉/执行的插件将符合此条件,尽管在某些情况下可能不符合要求。如果"插件"代码也将独立于代码运行,则这种情况尤其适用。
另一方面,如果代码在很大程度上依赖于GPL的工作(例如,广泛调用的API或者紧密的数据结构集成),则很可能将事物视为派生工作。即,如果没有GPL产品,"插件"就无法独立存在,并且安装了此插件的产品本质上是GPLed产品的衍生产品。
因此,为了更清楚一点,可以将相同的原理应用于解释代码。如果解释后的代码严重依赖于API(反之亦然),则将其视为派生作品。如果它只是一个脚本,只需要很少的集成就能独立执行,那么它就可能不会。
这更有意义吗?
回答
我们在插件和主程序之间共享多少信息?如果我们不仅仅执行它们并等待结果(在程序和插件之间没有共享数据),我们很可能摆脱它们的专有性,否则它们可能需要成为GPL。 d。