【问题标题】:Is there a way to interrogate a JVM/JRE for its license?有没有办法询问 JVM/JRE 的许可证?
【发布时间】:2019-09-05 05:51:37
【问题描述】:

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 与应用程序捆绑在一起,并且可以通过这种方式避免这个问题。

【问题讨论】:

    标签: java


    【解决方案1】:

    ${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,其中描述了“Oracle 二进制代码许可Java SE 平台产品和 JavaFX 协议。”

    ${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 技术网络许可Oracle Java SE 协议”。

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

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

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

    ${java.home}/release

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

    BUILD_TYPE="commercial"
    IMPLEMENTOR="Oracle Corporation"
    ...
    

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

    IMPLEMENTOR="Ubuntu"
    ...
    

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

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

    jre-8u221-linux-i586.tar.gz 和 jdk-8u251-linux-i586.tar.gz :

    BUILD_TYPE="commercial"
    

    jdk-9+181_linux-x64_ri.zip:

    IMPLEMENTOR="N/A"
    

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

    BUILD_TYPE="commercial"
    IMPLEMENTOR="Oracle Corporation"
    

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

    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2018-03-20"
    

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

    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2018-03-20"
    

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

    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2018-09-25"
    

    jdk-11.0.4_linux-x64_bin.tar.gz:

    BUILD_TYPE="commercial"
    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2019-07-16"
    

    openjdk-12.0.2_linux-x64_bin.tar.gz:

    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2019-07-16"
    

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

    BUILD_TYPE="commercial"
    

    ${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 不提供${java.home}/legal/*/LICENSE

    总结

    奇怪的是,${java.home}/LICENSE 中的“https://java.com/bc_license”很好地表明了 OTN 许可的 JRE。我认为对于 2019 年 3 月 16 日之后的 Oracle 版本,LICENSE 中的 URL 从“http://java.com/license”更改为“https://java.com/bc_license”是一个错误;他们应该将其更改为“https://java.com/otnlicense”。他们的补救措施是让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" 或更高版本。

    欢迎提供更可靠的答案!

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 2015-01-16
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      相关资源
      最近更新 更多