是否可以查询JVM / JRE的许可证?

Rob*_*ing 6 java

Oracle更改了其Java版本的许可证:

  • 8u201 / 8u202及更高版本:Oracle二进制代码许可(OBCL)协议
  • 8u211 / 8u212及更高版本:Oracle技术网(OTN)许可协议

我想Java 7及以下的所有Oracle版本都是OBCL。我不确定该旧许可证下是否有任何Oracle Java 9+版本。

当然,其他Java发行版(OpenJDK等)也具有其他许可证。

正在运行的程序是否可以确定底层JVM / JRE的许可证?动机:当用户在特定许可证的JVM / JRE上使用我的程序时,我想警告他们的程序。

我一直找不到包含这些信息的任何标准系统属性,而且我还查看了构成JRE的JAR清单。

有几个地方提供对Java版本的结构化访问:

前者并没有详细介绍更新号,而后者仅在Java 9+中可用。无论如何,两者仍需要其他资源来将已知的Java版本映射到其各自的许可证。

另外:我知道Oracle最新建议将JRE与一个应用程序捆绑在一起,并且可以通过这种方式避免此问题。

Rob*_*ing 5

$ {java.home} / LICENSE

Oracle Java 7和8包含一个文件${java.home}/LICENSE。对于1.7.0_80和1.8.0_152,内容为:

请参考http://java.com/license

在进行6次HTTP重定向之后,该链接当前指向https://www.oracle.com/downloads/licenses/binary-code-license.html,其中描述了“ Java SE平台产品和JavaFX的Oracle二进制代码许可协议”。

${java.home}/LICENSE 在Oracle Java 1.8.0_221中说:

请参考https://java.com/bc_license

3次HTTP重定向后,当前链接到https://www.oracle.com/downloads/licenses/javase-license1.html,其中描述了“ Oracle Java SE的Oracle技术网络许可协议”。

Oracle和OpenJDK Java版本9+不提供${java.home}/LICENSE

$ {java.home} / release

所有Java版本都有一个文件${java.home}/release,对于Oracle Java 11如下所示:

BUILD_TYPE="commercial"
IMPLEMENTOR="Oracle Corporation"
...
Run Code Online (Sandbox Code Playgroud)

这适用于Ubuntu的openjdk-11-jre-headless软件包(版本11.0.4 + 11-1ubuntu2〜18.04.3):

IMPLEMENTOR="Ubuntu"
...
Run Code Online (Sandbox Code Playgroud)

BUILD_TYPE对于Ubuntu软件包,没有任何价值。

从java.net下载的其他结果:

jre-8u221-linux-i586.tar.gz:

BUILD_TYPE="commercial"
Run Code Online (Sandbox Code Playgroud)

jdk-9 + 181_linux-x64_ri.zip:

IMPLEMENTOR="N/A"
Run Code Online (Sandbox Code Playgroud)

serverjre-9_linux-x64_bin.tar.gz(java -versionbuild 9+181):

BUILD_TYPE="commercial"
IMPLEMENTOR="Oracle Corporation"
Run Code Online (Sandbox Code Playgroud)

openjdk-10 + 44_linux-x64_bin_ri.tar.gz:

IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2018-03-20"
Run Code Online (Sandbox Code Playgroud)

jdk-10_linux-x64_bin_ri.tar.gz(java -versionbuild 10+44):

IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2018-03-20"
Run Code Online (Sandbox Code Playgroud)

openjdk-11 + 28_linux-x64_bin.tar.gz:

IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2018-09-25"
Run Code Online (Sandbox Code Playgroud)

jdk-11.0.4_linux-x64_bin.tar.gz:

BUILD_TYPE="commercial"
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2019-07-16"
Run Code Online (Sandbox Code Playgroud)

openjdk-12.0.2_linux-x64_bin.tar.gz:

IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2019-07-16"
Run Code Online (Sandbox Code Playgroud)

通过oracle-java7-installer和oracle-java8-installer软件包在Ubuntu上安装的Oracle Java 7和8还提供了${java.home}/release,其中包括:

BUILD_TYPE="commercial"
Run Code Online (Sandbox Code Playgroud)

$ {java.home} /legal/java.base/LICENSE

Java 9+发行版包含一个${java.home}/legal目录。检查${java.home}/legal/java.base/LICENSE

  • openjdk-9 + 181_linux-x64_ri.zip:GPLv2 +类路径异常
  • jdk-9 + 181_linux-x64_ri.zip:GPLv2 +类路径异常
  • serverjre-9_linux-x64_bin.tar.gz:“请参考http://java.com/license
  • openjdk-10 + 44_linux-x64_bin_ri.tar.gz:GPLv2 +类路径异常
  • jdk-10_linux-x64_bin_ri.tar.gz:GPLv2 +类路径异常
  • openjdk-11 + 28_linux-x64_bin.tar.gz:GPLv2 +类路径异常(legal/*/LICENSE相同)
  • jdk-11.0.4_linux-x64_bin.tar.gz:“请参考https://java.com/otnlicense ”(legal/*/LICENSE相同)
  • openjdk-12.0.2_linux-x64_bin.tar.gz:GPLv2 +类路径异常

Ubuntu的openjdk-11-jre-headless 11.0.4 + 11-1ubuntu2〜18.04.3提供了no ${java.home}/legal/*/LICENSE

摘要

奇怪的是,它看起来像“ https://java.com/ bc_l icense” ${java.home}/LICENSE很好地表明了OTN许可的JRE。我想对于Oracle在2019年3月16日之后发布的版本,URL LICENSE从“ http://java.com/license ” 更改为“ https://java.com/ bc_l icense” 是一个错误;他们应该将其更改为“ https://java.com/ otn许可证”。他们的补救措施是使https://java.com/bc_license重定向到OTN文档。

一个强烈的暗示是何时${java.home}/legal/java.base/LICENSE包含“请参考https://java.com/otnlicense ”。

一个较弱的提示是:

  • IMPLEMENTOR="Oracle Corporation"
  • BUILD_TYPE="commercial"
  • JAVA_VERSION_DATE="2019-04-16" 或更高版本。

欢迎提供更可靠的答案!