能否基于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如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块