2011-12-20 133 views
17

在LGPL许可证中记载了可以在不改变LGPL产品的许可证的情况下,在商业封闭产品中使用未经修改的链接代码。商业产品中的LGPL许可证上的Python模块(* .py)怎么样?它被视为链接代码?在商业产品的LGPL许可证上使用Python模块

+4

我投票关闭这一问题作为题外话,因为它是关于许可或法律问题,而不是编程或软件开发。 [见这里](http://meta.stackoverflow.com/questions/274963/questions-about-licensing/274964#274964)和[here](http://meta.stackexchange.com/questions/139804/can-许可问题永远在主题上)以获取详细信息,以及[帮助]了解更多信息。 – JasonMArcher 2015-06-14 00:44:49

回答

11

我不认为这个问题(为了GPL的合法目的,导入Python模块是否被视为“链接”)已经得到解决。我认为在法院案件打开之前(甚至可能还没有),这个问题不会得到解决。 GPL(可惜)基本上是用C语言及其相关工具编写的,所以如果软件使用的语言和工具具有与C相关的语言和工具类似的特性,那么只有很明显。

但是,导入Python模块肯定在至少作为宽容的情况下动态链接到共享库;当您键入import foo时链接到的受版权保护的文档(源文件)只有在程序实际运行后才能确定,并且可以进行简单更改您的版权文档由最终用户在其系统上移动.py文件生成,甚至只是改变PYTHONPATH。

就个人而言,我觉得上述论点明确导致,添加import foo到自己的源文件中的结论并不“从复制或改编的[foo.py]全部或部分以一种方式需要版权许可” 在全部为,因此如果您从不修改foo.py,则GPL并不适用。 (引自the GNU GPL version 3,在“0定义”)

(从技术上讲,我认为这种说法也适用于动态链接到一个共享的C库为好,只是这样做你通常不得不#include <foo.h>,这意味着你编译的程序是基于foo.h的工作,即使你认为它不是基于共享库的工作。虽然你的代码将完全不受GPL的影响,但有趣的是,如果你想推出一点,你可以分发你的源代码与专有的许可证和最终用户编译自己的说明,但我离题了。)

不是常识性论据必然与法院的决定相匹配。如果您将import foo.py视为“动态链接”与foo.py(L)GPL的目的,我不会看到你会怎么做错 - 没有人会因为遵守许可条件而起诉你技术上没有的。

+1

虽然合乎逻辑,除非你喜欢官司,为什么要这么做呢。通用的理解是避免在商业产品中运送任何LGPL代码,除非它可以*编译成共享库二进制文件。不幸的是,Python无法将模块编译为共享库二进制文件。故事结局。 – swdev 2015-03-03 01:01:16

+0

作为库的作者,如果我另外在Python的上下文中指定“链接”的定义,它有帮助吗? – 2017-02-10 19:14:56

+0

@Franklin这样做改变了许可证。因此,它不会帮你使用现有的(L)GPL Python库。如果你想使用你的(L)GPL变体来发布python库,那么尽管你冒着许可证不一定被认为与GPL兼容的风险。 – Ben 2017-02-10 22:43:56

6

简单测试 - 用户可以将LGPL部件换成他们自己的版本吗?

0

由程序导入的python库肯定不是静态链接的,它的编译形式(或者源代码形式)不包含在你创建的.py(co)文件中。所以你至少要导入L/GPLed模块,因为Linux的nvidia设备驱动程序正在与内核动态链接。请记住,您不应该将免费软件与非免费软件捆绑在一起,因此,如果您使用同一个tarball/zip文件或CD为L/GPL库提供库,则可能会遇到问题。如果您将一个类从模块中分类出来,这也适用,因为您不直接包含其他模块。 (用户可以将L/GPLed模块替换为功能相同的模块,并且您的代码不会注意或关心)。唯一的灰色区域是如果您在运行时修改模块的内容,然后分发修改后的模块,此时您需要分发生成修改模块的源。 (请记住,一个.pyc,即使它包含一个submodule.a = 5行或类似的东西,也没有改变子模块,你需要腌制或者保存子模块的执行状态,然后分发保存状态以便计算为更改子模块)。
这是我认为唯一的方法来看待它,否则OpenOffice电子表格程序结合OO宏需要LGPL兼容,因为OpenOffice本身就是LGPL。导入模块的Python模块是,使用该模块,而不是从中创建派生工作。

3

如果我正确理解您的问题,您是问您是否可以在封闭源商业产品中使用LGPL'ed库。虽然我找不到解决这一特定情况的任何事情,但一切都表明应该没有问题。首先,有一篇关于使用LGPL in Java的文章。这是文章的相关报价:

FSF的位置始终保持不变:LGPL的工作原理与所有已知的编程语言一样,包括Java。链接到LGPL库的应用程序不需要在LGPL下发布。应用程序只需遵循LGPL第6节中的要求:允许库的新版本与应用程序链接;并允许逆向工程来调试。从文章可能相关

一种其他额外的报价:

当你与你的应用程序分发库(或自己),你需要包括库的源代码。但是,如果您的应用程序需要用户自行获取库,则不需要提供库的源代码。

而最后一个报价:

的LGPL包含继承无特殊规定,因为需要没有。继承以与传统链接相同的方式创建派生作品,并且LGPL允许以类似于允许普通函数调用的相同方式进行此类派生工作。

确实,这个特殊案件还没有在法庭上审理过(至少我知道),我不会在夜里熬夜担心。即使LGPL在这个问题上并不完全清楚,FSF已经发布了指导意见,LGPL如预期地为所有编程语言工作。一般来说,如果一份合同不明确,那么它就被解决了,而被告的利益(这是一个过于简单化,但你可以找到更多的细节here)。如果你真的很紧张,我会考虑联系Free Software Foundation

总之,如果您将LGPL'ed库的源代码与您的应用程序(以及您的修改)一起分发,或者让最终用户单独安装此库,则您可以在Python中使用LGPL软件。