LGPL允许我这样做吗?


16

我打算使用LGPL软件开发商业软件。

在我使用的LGPL软件中,某个类中的某些功能没有完全实现。我想修改LGPL代码,以便通过添加类的dllexport infront以及通过添加函数的虚拟关键字infront来使类和未实现的函数在dll外部可见。

然后,我计划在我的专有软件中实现这些功能。我准备分发修改后的LGPL代码,但不分发按我想要的方式实现功能的专有软件。

这是否违反LGPL条款和条件?



6
您所提出的问题是,您不是在试图照本来就使用许可证。我们可能可以回答有关许可证的预期含义的问题,但我们根本无法可靠地了解法律细节。为此,我们只能推荐一名律师。此外,您在做什么取决于法律问题(LGPLed软件的衍生作品是什么?),判例法尚未在美国解决,我在真正的律师之间看到了不同的意见。(我不是律师,但我一直在随意关注这些问题。)
David Thornley

很难说。阅读:javalobby.org/java/forums/t15903.html-他们在谈论Java,但似乎适用于任何OO语言。
Mike Baranczak 2012年

Answers:


26

这是一个复杂的问题,但我认为您的建议是不允许的。

您建议将钩子添加到库中,以使子类库(至少是子类)更容易分类。绕过LGPL 的精神

问题是,如果您在自己的代码中将受LGPL许可约束的类子类化,则您的工作将成为基于库工作,而不是使用库工作,这意味着您的代码派生的第2节(LGPL v2.1)涵盖的工作,而不是第6节(LGPL v2.1)涵盖的工作。即它成为LGPL的约束

我认为Stephen Colebourne提供了有关Javalobby 的很好的总结

我不是很讨厌与您的律师建议进行直言不讳的对话,但是在这种情况下,如果您打算进行此操作,我认为这样做是非常值得的,否则您可能会从Free Software收到一封讨厌的信基金会法律团队。

或者,您可以直接询问FSF。从他们的联系页面

有关自由软件许可和版权的问题

请检查我们的许可常见问题解答许可列表常规copyleft信息以及相关页面。如果仍有问题,请发送电子邮件至<licensing@gnu.org>。

顺便说一句,在反射和LGPL相关问题中,gbjbaanb 从LGPL 3.0角度进行回答。


4
我喜欢“询问FSF”的建议
ZJR 2012年

我的阅读是,他们希望在LGPL库中公开更多功能。只要生成的库仍然是LGPL,并且OP软件的用户可以自由地将其库替换为其内置库-我会很高兴
Martin Beckett

3
@MartinBeckett-并非如此,发问者正试图通过修改库来绕开LGPL,以使他更容易在自己的封闭源代码中秘密修改库。如果他将自己的新库功能直接添加到LGPL,然后在自己的代码中使用它,那将没有问题。事实上,他试图保持自己的新功能封闭源,但仍属于库的一部分,这就是问题所在。
Mark Booth

6
LGPL 3.0指出:“定义库定义的类的子类被视为使用库提供的接口的一种模式。” 因此,至少在LGPL 3.0下,应允许这样做。
David

3
@David-我相信,通过修改LGPL库以允许您覆盖通常无法覆盖的功能,您会默认承认您的代码已充分紧密地耦合在一起,因此具有“基于”的含义,而不是与图书馆的“使用”关系,因此弱的copyleft被激活。
Mark Booth 2012年

13

标准我不是律师免责声明。

LGPL要求对库源代码进行修改,以将其分发给使用您的代码的任何人。它要求你的代码,它使用的图书馆,是开源的,在相同的许可下发布。

Wikipedia提供了关于LGPL的更详细但非律师的描述,包括有关类继承的部分。


+1。总结一下:我们认为它没有违反LGPL(而是IANAL)
MarkJ 2012年

@MarkJ-正如我在回答中解释的那样,我不确定这个问题仅是类继承的问题。
Mark Booth 2012年

9
我认为人们喜欢输入IANAL,因为它包含“ ANAL”。
g33kz0r 2013年

5

“我想修改LGPL代码...”这足以说明您必须释放任何修改后的代码。然后,是否扩展该修改后的代码是否是派生作品,尚有争议,如果是,则应遵循LGPL。

您似乎想做的是规避LGPL,在这种情况下,使用这些技术您将无法做到。

如果是衍生作品,则程序的条款必须允许“供客户自己使用的修改,以及用于调试此类修改的逆向工程”。使用LGPL程序的作品是否为衍生作品是一个法律问题。

但是,如果您要绕过LGPL,我会按照Mark Booth的建议与FSF联系。


1
问题是,LGPL允许某些形式的派生作品,而不允许其他形式。我已经更新了答案,以区分基于库工作类别(必须是LGPL)和使用库的工作(不是)之间的派生作品。
Mark Booth

@MarkBooth我同意您和其他人的意见,在这种情况下,这是work based on因为他们正在对LGPL进行更改以公开以前的私有代码。

1

我的猜测:(但IANAL)您应该将经过修改的库作为LGPL代码作为开源发布然后将其放入商业程序中。那行得通。实际上,您最终将拥有一个开源的库分支,然后您将为其出售前端。

但是,正如许多其他人正确说的那样,请问FSF:这是一个有趣的病态场景;他们是否会和您一样想知道它是否适用。(或至少对此足够打扰,以便发布有关该主题的FAQ条目)


1

https://www.gnu.org/licenses/lgpl-java.html

如果您分发导入LGPL库的Java应用程序,则很容易遵守LGPL。您的应用程序许可证需要允许用户修改库,并对代码进行反向工程以调试这些修改。这并不意味着您需要提供源代码或有关应用程序内部的任何详细信息。当然,用户可能对库进行的某些更改可能会破坏界面,从而使库无法与您的应用程序一起使用。您无需担心,修改库的人有责任使其正常工作。

简而言之,只要您不更改库代码本身,继承就不会有问题,但是即使您更改了库代码,也只需要释放库修改的代码,而不发布应用程序代码。


1
您的答案与其他几个答案相矛盾,但是并不能为您的主张提供太多支持。其他答案则更详细,并且可以更好地解释它们的主张。请修改您的答案以提供许可证或FSF的相关报价,以支持您的主张。

实际上,我的回答没有多大证据支持我的主张?我放置了指向GNU官方页面的链接,该页面消除了有关LGPL和类继承的困惑。它甚至已更新为涵盖LGPL v3。
Nik.B 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.