能否基于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

相关文章

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.应用程序文件夹打开应用程序文件夹

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT