能否基于openjdk开发闭源软件

2024-05-10 21:18

本文主要是介绍能否基于openjdk开发闭源软件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenJDK的开源协议,闭源没问题

关于Open JDK的开源协议问题,在知乎上也遇到过好多次了,解释了不下三次,原本以为是有一定技术基础的人类,居然也搞不太明白这个协议,那就专门开一个专栏文章解释一下吧

JDK 11之前的Oracle JDK也就是我们日常去下载的那个JDK,以及Open JDK,用的都是GPL with Classpath Exception协议,而Oracle JDK在11之后,更改了使用协议,如果继续无脑用的话,会带来一定程度上的法律风险,很多用户因此开始考虑Open JDK,但是一看Open JDK的开源协议,哇,是臭名昭著的GPL(笑)就心有余悸,那是不是意味着我们写的所有代码都必需强制开源啊?很多用户就有这个担忧

且慢

Open JDK的开源协议真的是GPL吗?

不完全是

严格说来是GPL with Classpath Exception

这个协议分为两个部分,一个是GPL,但不是完全的GPL,还有一个with Classpath Exception,这个exception很重要,对于日常用户来说

我们知道,GPL是传染性协议,任何用了GPL开源协议的软件,都会被传染为强制开源,比如你用了某一个GPL开源协议的类库,那么用了该类库的所有代码,都必须开源,而且是用GPL开源协议开源,那就会带来很多安全领域的考虑

所以纯粹的GPL协议的软件,用起来有被强制开源的考虑

但是,OpenJDK妙就妙在它多了一个尾巴,with Classpath Exception,又称为with linking exception,什么意思?通俗点说,就是你用它的模块,比如Java代码里面,常见的import语句,是吧,比如import java.*, javax.*, javafx.* etc.等等,这些都属于exception里面的,也就是说,你只是import这些类库,并且使用它们的话,不受GPL协议影响,你大可以在此基础之上,制作自己的软件,并且闭源发布

那Open JDK为什么又要求GPL呢?什么情况下会被强制开源呢?很简单,你魔改了Open JDK的实现的话,比如你更改了java.base.jmod模块的源代码的话,那你的代码就会被GPL传染上,要求必需开源,否则就违背了Open JDK的开源协议,当初SUN这样做的目的很简单,就是为了防止出现不同版本的Java,否则IBM整一个Java,SUN整一个Java,互相之间代码还不兼容,那就麻烦大了,违背了Java最初的承诺,就是编译一次,四处运行,你用SUN JDK/hotspot编译并打出来的jar,有可能会不能在IBM JDK/j9上运行,那这个结果显然是大多数人所不愿意看到的,破坏了Java的兼容性。而且就算是魔改了实现,也有标准,就不是随便可以claim自己魔改后的版本是Java的,最好改个名字,比如Scala, Kotlin, Clojure etc.

那再给不放心的人吃个定心丸,有没有基于Open JDK闭源发布的软件啊?有啊,当然有啊,WebLogic, WebSphere都是这种软件,还有日本人,德国人做的一些软件,J2EE/Jakarta EE里面闭源的软件占了半壁江山

另外,使用该协议的,不仅仅是Open JDK,还包括Open JDK生态下的其他开源项目,比如Open JavaFX(OpenJFX),Graal等,用的也都是该协议,所以用这些工具也都没问题

基础软件,尤其是JVM这种,被强制GPL是有好处的,所有人的实现都是强制开源,一些别有用心的人如果在里面做了手脚,也容易被曝光,但是使用这些软件的软件,一般就是应用软件了,那就是差异化,不同软件在不同领域有不同的考虑,强制开源就不太合情理了,比如你写了一个电子政务的系统,被强制开源了,那还完蛋了

如果还有人不放心,那就这么说,我们已经全部迁移到Open JDK上去了,而且我们也制作闭源软件,确切滴说,是一个游戏,不仅做了,而且还告知了Open JFX的制作者们,制作者们都知道我们在干这事,他们在twitter上的反应是:哇,这玩意还能用来做游戏,太棒了

工程师们真是nice,感谢有这些开源软件和项目,让世界变得更加美好

所以Open JDK的协议没问题,放心用

bye

这篇关于能否基于openjdk开发闭源软件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977576

相关文章

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹