GPL和LGPL开源许可证限制

119

我对开源软件的使用许可有些困惑。我在某处读到GPL或LGPL规定,使用GPL软件的软件也必须开源。我想创建一个应用程序,使用一些开源图像识别库。我能否销售这个应用程序,还是它必须是开源的?

谢谢!

6个回答

90

LGPL允许您在应用程序中使用和分发开源软件,而无需发布应用程序的源代码。

如果您选择在应用程序中使用和分发GPL许可的开源软件,则需要发布应用程序的源代码。换句话说,您的应用程序也必须在GPL许可下进行许可。


14
请注意,LGPL规定所使用的库必须是可替换的。因此静态链接是不可能的。 - Dykam
1
一个"动态链接库"(Dynamic Link Library)是合法的,对吗? - Robert Harvey
只有在您提供该DLL的源代码以及所需的头文件或文档以便与应用程序的其余部分进行接口时,如果有人想要大量修改或从头重新编写该DLL,才应该这样做。 - thomasrutter

58
  • GPL

    其他开发人员可以借用和修改代码,并将其作为自己项目的一部分重新分发,但前提是他们的整个项目也必须在GPL下许可。这可以防止代码被用于专有软件。

  • LGPL

    其他开发人员可以借用和修改代码,并将其作为自己项目的一部分重新分发,只要使用LGPL授权的部分,包括任何修改,都在LGPL下再次许可。该项目的其他部分允许使用其他许可证。

    这允许代码在专有软件中使用。

需要注意的是,LGPL比GPL本身更长,更复杂,因为它包含了GPL的全部内容,并增加了其他条款。

LGPL中的许多附加条款规定了必须满足的条件,以便能够在具有其他许可证的项目中分发您的代码。例如,用户不仅必须获得LGPL许可的部分的源代码,还必须能够修改、重新编译或替换软件的LGPL许可的部分,并使用相同的软件与此修改后的代码一起使用。如果您发布包含一些LGPL代码的专有软件,则满足此要求的一种方法是将LGPL代码放入单独的动态链接库中,并随软件一起分发必要的头文件和文档,以便以这样的方式重新编译LGPL部分,使其仍然可以与提供的软件链接和使用。不允许采取防止修改LGPL代码的措施,例如混淆代码本身或API或头文件。

请注意,LGPL与GPL兼容:您可以选择将代码“升级”到GPL,并在完全GPL许可的项目中合并它,如我第一个要点所述。但是,您无法反过来重新将GPL许可的代码许可为LGPL。


如果您删除了所有原始源代码,除了一个printf调用之外,并从绝对零开始重新编写所有内容,那么它仍然受许可证保护吗? - B''H Bi'ezras -- Boruch Hashem
这是一个普遍的版权问题,而且还是一个假设性的思想实验 - 没有人会因为一行代码而起诉。从技术上讲,它仍然受版权保护,因此仍然受许可证的约束。但出于实际原因,这不太可能成为问题。 - thomasrutter
有趣的是,重点只是尝试理解版权的范畴、程度,"复制"代码意味着什么?如果一个人查看原始源代码,并手动重新输入类似但不完全相同的代码,会怎样?如果有人使用程序复制原始代码,但更改变量名称和顺序等,那么在什么时候版权被移除? - B''H Bi'ezras -- Boruch Hashem
@bluejayke,我不是律师,但这是我的看法。如果您删除了除一个printf调用之外的所有原始源代码,则应在文件横幅中具有许可证。该许可证横幅在许可证下是不可移除的。无论您用什么替换该代码,即使您删除了包括printf在内的所有代码内容,它也将受到相同的许可证约束。 - Deon McClung
@bluejayke 重新输入相同的代码是一种复制形式,是许多复制方式之一,即使您没有进行电子复制,您也已经有系统地通过其他方式创建了副本。如果您查看代码以获取灵感,然后实现某些使用相同思想或概念的代码,但其中没有任何部分是副本,那就不是副本。您可能最终会得到一些基本相同的行,而这些行的法律情况是棘手的,这就是为什么不想被指控复制某些东西的人在重新实现他们看到的东西时可能会小心翼翼的原因。 - thomasrutter
如果你复制了别人的代码并且混淆它(改变所有变量名等),那么这就是一个派生作品,其中涉及到了复制,因此版权会限制它。事实上,我相信混淆在GPL(因此也包括LGPL)中是明确不允许的。 - thomasrutter

32

我不是律师,但概念相当简单。

首先,您和您的律师必须阅读 GPLLGPL 许可证。其次,您应该阅读 GPL FAQ。据我了解,您可以这样考虑在项目中使用 GPL/LGPL 库:

  • 如果您动态或静态链接到 GPL 或 LGPL 库,则创建了一个派生作品。
  • 如果您使用的库是 GPL,并且与该库链接,那么您的软件 必须发布 具有 兼容许可证
  • 如果您使用的库是 LGPL,并且您动态链接到该库,则您的软件不必使用兼容许可证发布,但您仍必须遵守 LGPL。
  • 如果您使用的库是 LGPL,并且您静态链接到该库,则您的软件必须使用兼容许可证发布。
  • GPL/LGPL 许可证意味着“自由”,就像 "言论自由" 而非 "免费啤酒"。您可以创建派生作品并以大量资金出售,但您必须遵守 GPL/LGPL。

37
首先,您和律师必须阅读GPL和LGPL许可证。 - d512
14
如此直白,以至于你需要聘请律师来确定能否使用一段代码。这就是为什么开发者不应该使用 GPL 许可证的原因。 - Womble
关于静态链接和动态链接的问题,我认为真正的区别在于动态链接满足了让用户重新编译源代码的需求。如果在静态链接时提供了这样的方法,你仍然可以这样做。例如,通过提供项目中其余部分的足够源代码。但是,如果你用于非LGPL部分的许可证是闭源的,你不太可能想这样做,这就是为什么人们认为必须使用动态链接的原因。 - thomasrutter

10
如果您将GPL代码剪切、粘贴或链接到您的应用程序中,则您的应用程序必须在GPL下获得许可,并且您随后需要发布代码。
但是,您仍然可以销售您的应用程序,据我所知,唯一的义务是向您的客户发布源代码。
如果您链接的库是Lesser Gnu Public License(LGPL),则无需发布您自己的应用程序代码,但如果您修改了LGPL的代码,则仍然需要发布所有修改。

发布源代码给你的客户 - 真的吗?只有他们可以看到吗?我认为源代码必须公开可用? - relascope
我不是以英语为母语的人,也不是律师。https://www.gnu.org/licenses/gpl-faq.html#WhatDoesWrittenOfferValid 指出,必须向任何有权访问二进制文件的人提供源代码。它并没有说任何人都可以要求源代码,而是指那些直接从您或您的直接客户处获得二进制文件的人。 - rasjani
但是,如果您以某种方式向公众发布修改后的版本,则GPL要求您根据GPL向程序用户提供修改后的源代码。请直接向客户说明。 - relascope
“唯一的义务是向您的客户发布源代码。” - 不,虽然这是GPL的主要要求之一,但还有许多其他要求。 - thomasrutter
我以为源代码必须公开可用? 不,你只需要在有人从你那里获取软件时应要求提供源代码。但是,由于源代码是开放许可的,因此该客户可以合法地将源代码公开发布。因此,在您的客户自由发布或共享它,将其放在Github或其他任何地方的意义上,它始终是有效的公共的。试图阻止源代码进入公众手中没有什么意义。 - thomasrutter

7

GPL不禁止您出售软件。但是您必须提供软件的源代码。

使用问题有点复杂。GNU / Linux是在GPL下发布的。无论您的软件许可证如何,都没有任何禁止您编写在Linux下运行的软件。但是,您不能将Linux与您的软件一起分发。这通常是库的问题,因为库需要成为程序的一部分。这就是LGPL许可证的用途。您可以使用gcc编译您编写的C程序(因此使用来自gcc的LGPL许可运行时例程库),并仍然可以发布您的软件而不受GPL的限制。

我认为这就是大致意思。但是,这不是任何形式的法律建议。对于法律建议,您必须聘请一位经过认证的律师,他可以为您提供适合您特定情况的法律建议。

希望这有所帮助。


4

GPL和LGPL的区别决定了您是否需要向任何拥有二进制副本的人发布应用程序源代码。无论哪种方式,您仍然可以销售该应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接