[L] GPL在Java / C#代码中的应用

时间:2008-12-29 18:32:23

标签: c# java open-source gpl lgpl

如何将[L] GPL许可证应用于Java和C#代码?我知道当Sun JDK成为GPL时,他们对标准库做了特殊例外。

所以,如果我无法打开我的应用程序源并仍想分发它......

  • ...我可以使用GPL的库(通过导入'来修改它的类吗?)
  • ...我可以使用LGPL一个
  • ...我的应用程序可以运行在GPL的Application Server之上(使用其服务和API)

以上所有问题GPL = GPL v.2。

由于

4 个答案:

答案 0 :(得分:4)

首先,如果您在其他人的工作之上构建商业软件,您应聘请律师帮助您确保您始终遵守版权所有者的许可和您的具体用法。

那就是说,这是我的建议:

  1. 除非您想将代码分发为GPL,否则不应链接到GPL应用程序或库。
  2. 就LGPL而言,您可能需要向版权所有者查询,但自由软件基金会已澄清其对JavaPLPL的解释:LGPL and Java by David Turner
  3. 如果您正在扩展GPL框架(例如应用服务器),则需要遵循框架的许可证。
  4. 如果您使用SOAP之类的东西来访问服务,那么在GPLv2下你应该没问题。如果您使用RMI,那么情况可能会有所不同,因为您链接到的存根可能会在GPL下。
  5. 现在,如果您担心Java运行时,我认为您不必担心。如果Sun只使用Java GPL,我会感到惊讶。他们有太多的客户依赖于Java可以扩展并用于构建专有应用程序的事实。软件通常在多个许可下发布,允许用户选择条款(例如,Firefox使用这种方法并获得三重许可:GPL,LGPL和MPL)。

答案 1 :(得分:3)

无论Sun对开放源代码的承诺如何,您都可以使用GPL,LGPL,MIT甚至所谓的“专有”许可证来许可您的Java应用程序。

“......我可以使用GPL的库(通过导入它的类)吗?”否。除非它不是纯粹的GPL(它可能是双许可的,有“类路径异常”或类似的东西或具有外部访问的公共域接口)。但是,这仅适用于您分发应用程序的情况。如果您的应用程序 WAS 仅在内部使用,则您不需要分发源代码。

“......我可以使用LGPL一个”如果你将它保存在一个单独的文件中,你可以引用LGPL代码。对于Java,请将LGPL代码保存在单独的jar中。在C#的情况下,将其保存在单独的DLL中。如果您允许最终用户替换它,您可以在您的应用程序中包含LGPL代码(但这可能比将其保留为独立文件更难)

“......我的应用程序可以运行在GPL的Application Server之上(使用其服务和API)”。不,除非这些服务/ API有其他许可证。

另请参阅:https://stackoverflow.com/questions/137048/how-do-i-tell-if-i-can-re-use-a-free-software-library-in-a-commercial-app

答案 2 :(得分:1)

[咆哮] GPL和LGPL是由非常糟糕的律师撰写的非常糟糕的许可证,他们无法直截了当地获得术语。所以,任何人都猜测它们的真正含义以及它们如何应用于现实世界的情况[/ rant]

正确答案是,如果被版权所有人起诉是您真正关心的问题,那么您应该咨询律师。这些许可证太复杂,无法在此论坛上获得有意义的答案。

现实世界的答案是,将他们的Java库置于LGPL之下的人最有可能打算将它们链接到/重新分发到商业Java应用程序中,因此如果您只是重新分发那些未经修改的内容,那么您将不会遇到任何麻烦。库与您的应用程序。

根据GPL分发其Java库的人或者不打算将它们嵌入到商业应用程序中,或者不打算担心自己的法律后果,因为GPL不是图书馆的适当许可,而只是用于独立应用程序。我建议在商业代码中清除GPL的java库。尽管如此,将GPL应用程序与您的商业应用程序并排放置也是可以的。

关于在GPL的Application Server中运行,只要你坚持使用标准API(servlet,jsps,JMX等),你就绝对没问题。如果你必须使用服务器专有的API,那么问题就更复杂了,所以我肯定会和律师谈谈,尽管App Server代码所有者的意图很可能就是允许这种用法。

答案 3 :(得分:1)

IANAL但我认为重要的是要记住GPL依赖于版权。因此,根据版权法允许的任何内容都是GPL允许的。例如,GPL禁止进行派生工作并将其链接到非GPL模块。例如,这种参数用于防止使用二进制Linux内核模块。但是,不是内核的派生工作的模块不能被认为属于内核的版权,因此不必是GPL。注意:带有模块的结果内核可能被视为派生工作,并证明模块不是派生工作可能是一个问题。但它没有切割和干燥。

此外,GPL包含基本操作系统的例外,它允许将GPL软件链接到平台的非免费库。这允许免费软件在非免费平台上运行。可以说JVM是一个平台,甚至可能像J2EE应用服务器这样的平台。您可能不被允许将GPL Web应用程序和平台重新分发,但是移植到Websphere的GPL Web应用程序(例如)可能仍然符合GPL标准。

鉴于复杂性,与律师讨论这件事是有道理的。