我有一个使用 LGPL 下的组件的商业网络应用程序。由于该组件具有插件架构,因此我现在为该组件创建了一个使用库 (LGPL) 的插件。该库使用 GPL 数据源。
这是否意味着我必须为我的网络应用程序释放源?还是只需要释放插件的源代码?
感谢您的任何意见和建议,并原谅我的英语不好。
为 100% 确定,您应该阅读常见问题解答,然后联系熟悉软件许可的律师。不要与不这样做的律师交谈,因为他们会告诉你不要使用任何免费/开源的东西,只是为了安全起见,任何人都可以这么说。
无论如何,“数据源是 GPL”是什么意思?GPL 源代码是否链接到您的应用程序中?
FAQ 中有几个关于插件和 GPL 的问题。
我可以发布一个旨在加载 GPL 涵盖的插件的非自由程序吗?
这取决于程序如何调用其插件。例如,如果程序只使用简单的fork和exec来调用插件并与之通信,那么插件就是独立的程序,插件的许可对主程序没有要求。
如果程序动态链接插件,它们之间进行函数调用并共享数据结构,我们认为它们形成了一个单独的程序,必须将其视为主程序和插件的扩展。为了使用 GPL 涵盖的插件,主程序必须在 GPL 或与 GPL 兼容的自由软件许可下发布,并且在分发主程序与这些插件一起使用时必须遵循 GPL 的条款插件。
如果程序动态链接插件,但它们之间的通信仅限于通过一些选项调用插件的'main'函数并等待它返回,这是一种边缘情况。
使用共享内存与复杂的数据结构进行通信几乎等同于动态链接。
正如其他人指出的那样,未分发的网络应用程序似乎被视为在普通 GPL 下私人使用(不是在 Affero GPL 中?)。
一家公司正在网站上运行 GPL 程序的修改版本。GPL 是否规定他们必须发布修改后的源代码?
GPL 允许任何人制作修改版本并使用它,而无需将其分发给其他人。这家公司正在做的是一个特例。因此,该公司不必发布修改后的来源。
人们必须有自由进行修改并私下使用它们,而无需发布这些修改。然而,将程序放在服务器机器上供公众交谈几乎不是“私人”使用,因此在这种特殊情况下要求发布源代码是合法的。希望解决此问题的开发人员可能希望将 GNU Affero GPL 用于为网络服务器设计的程序。
这是否意味着我必须为我的网络应用程序释放源?
不*
还是只需要释放插件的源代码?
如果您分发应用程序,那么是的,您还必须分发其 LGPL 部分的源代码。
您还需要确保收到您的申请的任何人都有机会修改它。这对于已编译的应用程序很重要——您需要包含必要的目标文件,以便您的应用程序可以与修改后的 LGPL 代码版本重新链接。或者,使用动态链接。这个想法是人们需要能够修改您的代码部分 LGPL 并将其与您的应用程序重新组合。
用我的话来说,以下是 LGPL 的一些要求(我不是律师):
这些只是一些限制,但 LGPL 还为您提供了许多自由,而 GPL 等其他许可证则没有。如果您要分发包含其他人的 LGPL 许可代码的组合作品:
我最近写了一篇对 LGPL 许可证的分析——你可以阅读这篇文章以获取更多信息。
另外,请阅读LGPL 的实际文本。时间不会太长。
*您提到您正在使用的库具有 GPL 数据源。大概这意味着您实际上不会使用它来分发此 GPL 数据,而只是使用它的 LGPL 库。
我不是律师,但是.. 只要您不分发该程序(使其可用作网络应用程序不是分发),您就不必发布任何东西的源代码。
如果通过网络应用程序您的意思是您只是在您的服务器上运行该软件并且您不将其分发给您的用户,那么它应该很简单。无需分发,无需放弃源代码。
(可能与 GPL3 不同)