在商业产品中使用LGPL许可证的Python模块
在LGPL许可证中写着,我可以在商业的、封闭的产品中使用未修改的、链接的代码,而不需要把产品的许可证改成LGPL。那么,如果我在商业产品中使用LGPL许可证的Python模块(*.py),这算不算链接的代码呢?
4 个回答
如果我理解你的问题没错,你是在问能不能在一个闭源的商业产品中使用LGPL许可证的库。虽然我没有找到专门针对这种情况的资料,但所有的迹象都表明应该没有问题。首先,有一篇关于在Java中使用LGPL的文章。这篇文章中有一句相关的引用:
自由软件基金会(FSF)的立场一直是这样的:LGPL在所有已知的编程语言中都能正常工作,包括Java。链接到LGPL库的应用程序不需要以LGPL发布。应用程序只需遵循LGPL第6节的要求:允许将新版本的库与应用程序链接;并允许反向工程以进行调试。
还有一句可能相关的引用:
当你将库与应用程序一起分发(或单独分发)时,需要包含库的源代码。但如果你的应用程序要求用户自己获取这个库,那么你就不需要提供库的源代码。
最后还有一句:
LGPL没有特别规定关于继承的内容,因为没有必要。继承以与传统链接相同的方式创建衍生作品,而LGPL允许这种类型的衍生作品,就像它允许普通的函数调用一样。
虽然确实这个特定的案例在法庭上没有被审理过(至少我知道的情况是这样),但我觉得你不必为此失眠。即使LGPL在这个问题上不是特别明确,FSF也发布了指导意见,表示LGPL在所有编程语言中都能如预期工作。一般来说,如果合同模糊不清,通常会有利于被告(这只是个简单的说法,详细信息可以在这里找到)。如果你真的很紧张,可以考虑联系自由软件基金会。
总之,看起来你可以在Python中使用LGPL软件,只要你要么将LGPL库的源代码(以及你的修改)与应用程序一起分发,要么让最终用户单独安装这个库。
简单测试 - 用户能否把LGPL部分换成他们自己的版本?
我觉得关于“导入一个Python模块是否算作与它‘链接’”这个问题(从GPL的法律角度来看)还没有明确的答案。我认为,直到有相关的法院案件出现,这个问题才可能会得到解决(甚至可能到那时也未必能解决)。GPL的写法基本上是围绕C语言及其相关工具的,所以如果你使用的软件语言和工具与C有类似的特性,应用GPL的方式才会比较明显。
不过,导入一个Python模块的情况,至少和动态链接一个共享库一样宽松;当你输入import foo
时,实际上你链接的是哪个有版权的文档(源文件)并不是在程序运行之前就确定的,而是在程序运行时才会决定。而且,用户在他们的系统上移动.py文件,或者仅仅是改变PYTHONPATH后,这个链接关系是可以轻松改变的。
就我个人而言,我认为以上的论点清楚地表明,把import foo
加到自己的源文件中并不会“以需要版权许可的方式复制或改编[foo.py]的全部或部分内容”,所以如果你从未修改过foo.py,GPL实际上并不适用。(这段话摘自GNU GPL第3版的“0. 定义”部分)
(从技术上讲,我认为这个论点同样适用于动态链接一个共享的C库,除了通常你需要#include <foo.h>
,这意味着即使你争辩说你的程序不是基于共享库的,编译后的程序依然是基于foo.h的作品。不过有趣的是,按照这种解释,你的源代码完全不受GPL的限制,所以如果你想坚持这个观点,你可以用专有许可证分发你的源代码,并给最终用户提供编译的说明。但我有点跑题了。)
当然,常识性的论点不一定和法院的裁决一致。如果你把import foo.py
视为与foo.py“动态链接”,我看不出有什么问题——没有人会因为你遵守了技术上不需要的许可证条件而起诉你。