python - GPL 程序的专有插件 : what about interpreted languages?

标签 python plugins open-source licensing interpreted-language

<分区>

我正在用 Python 开发 GPL 许可的应用程序,需要知道 GPL 是否允许我的程序使用专有插件。这是 what the FSF has to say关于这个问题:

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 和动态链接之间的区别,除了有点人为之外,不会延续到解释语言:Python/Perl/Ruby 插件如何,它通过 import 加载或 execfile?

(编辑:我理解为什么 fork/exec 和动态链接之间的区别,但似乎有人想要遵守 GPL 但违背“精神”——我不——可以使用 fork/exec 和进程间通信来做几乎任何事情)。

最好的解决方案是在我的许可中添加一个异常(exception),以明确允许使用专有插件,但我无法这样做,因为我正在使用 Qt/PyQt这是 GPL。

最佳答案

he distinction between fork/exec and dynamic linking, besides being kind of artificial,

我不认为它是人为的。基本上他们只是根据集成水平进行划分。如果程序有“插件”,这些插件本质上是即刻即弃,没有 API 级集成,那么生成的作品不太可能被视为派生作品。一般来说,一个仅仅被 fork /执行的插件会符合这个标准,尽管在某些情况下它可能不符合。如果“插件”代码也可以独立于您的代码工作,这种情况尤其适用。

另一方面,如果代码深深地依赖于 GPL 的作品,例如广泛调用 API 或紧密的数据结构集成,那么事情更有可能被视为派生作品。即,“插件”不能在没有 GPL 产品的情况下独立存在,安装了该插件的产品本质上是 GPL 产品的派生作品。

所以为了让它更清楚一点,相同的原则可以应用于您的解释代码。如果解释的代码严重依赖于您的 API(反之亦然),那么它将被视为衍生作品。如果它只是一个在极少集成的情况下自行执行的脚本,那么它可能不会。

这样更有意义吗?

关于python - GPL 程序的专有插件 : what about interpreted languages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412/

相关文章:

python - 将一组区间简化为最简单的表示

python - 单击按钮后程序停止响应

python - 基于字典分配的列中的无序值

jquery - 无法弄清楚如何在 KreatureMedia Layerslider 中循环播放 css 动画

php - 发布 PHP CMS ......如何?

python - Ipython笔记本水平缩放

java - 如何分析当前在 SonarQube 中分析的其他类的代码?

typescript - 以编程方式调用组织导入并随后保存文件

python-3.x - 为 Twisted 中无人维护的 react 堆做出贡献还是维护单独的实现?

language-agnostic - 音高不变的音频