本文主要是介绍能否基于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开发闭源软件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!