随着 Oracle 宣布打算对 JVM 的专业版(或任何你称之为的版本)收费,以及 IBM 宣布打算支持 OpenJDK 的当前发展,对于大量 Java 开发人员来说,事情变得相当复杂。我们在 Java 方面有大量工作,到目前为止,我们在选择许可条款方面没有任何问题。看来我们将不得不切换到 IBM 将提供支持的 OpenJDK。但是 OpenJDK 是 GPL V2,据我所知,任何链接到 GPL V2 的代码都必须是 GPL V2。我们还有一些 JNI 代码,它们会变得更大。鉴于这些事实,是否意味着如果我们使用 OpenJDK 来运行我们的软件,我们就必须切换到 GPL 来获得许可?不用说,这将摧毁我们的整个许可和商业模式设置。
3 回答
OpenJDK 的许可证不是“GPL v2”,而是“GPL v2 with the Classpath Exception”。引用:
作为一个特殊的例外,该库的版权所有者允许您将此库与独立模块链接以生成可执行文件,而不管这些独立模块的许可条款如何,并根据您选择的条款复制和分发生成的可执行文件,前提是对于每个链接的独立模块,您还满足该模块许可的条款和条件。独立模块是不是从该库派生或基于该库的模块。
如果我使用 OpenJDK 作为 JVM,是否需要打开我的源代码?
绝对不。
有许多使用基于 OpenJDK 的 JVM 的商业闭源 Java 应用程序。@Chris Lercher 特别提到的“类路径异常”使这合法化。
顺便说一句,“类路径异常”是由 FSF 的律师专门发明的,目的是允许使用 GNU 类路径库(Java SE 库的无尘室重新实现)来运行专有/闭源应用程序。由此得名 ...
您需要担心的唯一情况是:
- 在实现中使用 OpenJDK 代码库的闭源 JVM。
- 包含 OpenJDK 类的修改副本但不包含修改源代码的闭源应用程序。
- 链接到未标记为具有 Classpath 异常的某些 OpenJDK GPLv2 类的闭源应用程序。
在 OpenJDK 11 中,最后一个类别似乎包含大量未包含在 OpenJDK 发行版中的“测试”类,以及您不应该(并且可能不能)在应用程序中链接到的内部类。这些类很容易识别。在 OpenJDK 源代码树中搜索包含单词“GNU”而不是单词“Classpath”的 Java 源文件
值得注意的是,OpenJDK Java 代码库中有很大一部分是具有许可开源许可证的第三方代码。允许链接到这些类。
将 OpenJDK 与封闭源代码捆绑在一起不是问题。GPL 允许您分发 GPL 软件的二进制文件和闭源软件的二进制文件。
请阅读类路径异常开头的行。类路径异常似乎不适用于整个库。
Sun Microsystems, Inc. 分发的某些源文件受 GPL 的以下说明和特殊例外的约束,但仅当 Sun 明确在特定源文件的标题中包含“Sun 指定此特定文件受制于”类路径时“ Sun 在随附此代码的 LICENSE 文件中提供的异常。”