LGPL/GPL许可

8 licensing gpl lgpl

我有一个商业网络应用程序,使用LGPL下的组件.由于该组件具有插件架构,我现在已经为该组件创建了一个使用库(LGPL)的插件.该库使用GPL数据源.

这是否意味着我必须为我的网络应用程序释放源代码?或者只是需要释放插件的来源?

感谢您的任何意见和建议,并原谅我的英语不好.

Eug*_*ota 11

要100%确定,您应该阅读常见问题解答,然后联系熟悉软件许可的律师.不要和律师交谈,因为他们会告诉你不要使用任何免费/开源的东西只是为了安全起见,任何人都可以这样说.

无论如何,"数据源是GPL"是什么意思?GPL源代码是否链接到您的应用程序?

有关插件和GPL的常见问题解答中有几个问题.

我是否可以发布旨在加载GPL覆盖插件的非免费程序?

这取决于程序如何调用其插件.例如,如果程序仅使用简单的fork和exec来调用插件并与插件通信,则插件是单独的程序,因此插件的许可证不对主程序有任何要求.

如果程序动态链接插件,并且它们相互进行函数调用并共享数据结构,我们认为它们构成了一个程序,必须将其视为主程序和插件的扩展.为了使用GPL包含的插件,主程序必须在GPL或兼容GPL的自由软件许可下发布,并且当主程序分发用于这些时必须遵循GPL的条款插件.

如果程序动态链接插件,但它们之间的通信仅限于使用某些选项调用插件的"main"函数并等待它返回,这是一个临界情况.

使用共享内存与复杂数据结构进行通信几乎等同于动态链接.

正如其他人所指出的那样,未分发的网络应用似乎被视为普通GPL下的私人使用(不是在Affero GPL中?).

一家公司正在网站上运行GPL程序的修改版本.GPL是否说他们必须发布修改后的来源?

GPL允许任何人制作修改版本并使用它而无需将其分发给其他人.该公司正在做的是一个特例.因此,该公司不必发布修改后的来源.

人们必须有自由进行修改并私下使用它们,而不必发布这些修改.但是,将程序放在服务器上以供公众交谈几乎不是"私人"使用,因此在这种特殊情况下要求释放源代码是合法的.希望解决此问题的开发人员可能希望将GNU Affero GPL用于为网络服务器使用而设计的程序.


tho*_*ter 7

这是否意味着我必须为我的网络应用程序释放源代码?

没有*

或者只是需要释放插件的来源?

如果您分发应用程序,那么是的,您还必须分发它的LGPL部分的源代码.

您还需要确保收到您的申请的任何人都有机会修改它.这对于已编译的应用程序很重要 - 您需要包含必要的目标文件,以便可以使用修改后的LGPL代码版本重新链接您的应用程序.或者,使用动态链接.我们的想法是,人们需要能够修改代码中的部分LGPL并将其与您的应用重新组合.

以下是LGPL的一些要求(我不是律师):

  • LGPL代码和其他代码之间必须有某种明确的分离.特别是,接收者必须能够修改LGPL代码,甚至完全用其他代码替换它,例如修改版本或更高版本的库.因此,如果它是一个已编译的程序,那么LGPL代码必须是动态链接的(比如,一个单独的DLL或共享文件),以便它可以很容易地替换类似的库并且仍然可以互操作; 或者,如果它是静态链接的,则必须提供所需的最小源文件和/或目标文件,以允许使用备用库重新编译.除了非常简单的头文件之外,非LGPL部分可能不包含LGPL代码的任何部分.
  • 必须清楚地指出代码的哪一部分是LGPL涵盖的,包括其原始版权声明和LGPL的文本(包括它所基于的GPL).
  • 如果合并后的软件在运行过程中显示版权声明,则此处还必须出现LGPL承保部分的版权声明,以及指向LGPL和GPL的链接.
  • 在某些情况下,您需要提供安装信息,详细说明如何在组合应用程序中使用修改版本的LGPLd代码.

这些仅仅是一些限制,但LGPL也为您提供了许多自由,而GPL等其他许可证则没有.如果您要分发合并作品,其中包括其他人的LGPL许可代码:

  • 您不需要为应用程序的其余部分(即非LGPL部分)发布源代码.唯一的例外是如上所述 - 如果它全部静态链接,那么你需要提供足够的代码(和/或目标文件),以便能够将其与LGPL代码的替代或修改版本重新链接.如果您通过普通API动态链接和交互,则无需担心.
  • 您无需在GPL下发布其余的应用程序.您可以使用您想要的任何许可证,包括限制性更强的专有许可证,前提是您在分发时遵循规则.
  • 与GPL版本3不同,GPL版本3禁止在实施复制保护或DRM软件时使用代码,您可以在包含复制保护或DRM的应用程序中使用LGPL版本3许可代码.

我最近写了一份关于LGPL许可分析 - 你可以阅读这个以获取更多信息.

另外,请阅读LGPL实际文本.这不是太长.

*您提到您正在使用的库具有GPL数据源.据推测,这意味着您实际上不会使用它来分发此GPL数据,只是使用它的LGPL库.