今年4月16日,Oracle发布了新的JDK 8的更新,版本号为8u211和8u212。与以往不同的是,新版本的许可协议从BCL换成了OTN,这就意味着,你不能在生产环境使用这个版本了。如果你想继续使用8u211/8u212,或者之后发布的新版本,就需要给Oracle交钱了。
当然,并不是你用了新版本的JDK就要交钱,这个时候要区分私用和商用:
私用,是我总结的一个词,它包括”Personal Use”和”Development Use”,前者表示一些个人用途,比方说在自己的电脑上写一些小工具,做一些数据分析等等;后者表示开发用途,比如日常开发、做测试、做演示等等。商用不太好界定。我的理解就是拿来赚钱就是商用,比方说把网站部署到生产环境,在公司内部系统使用等。
我用的JDK使用什么协议?
BCL协议,即Oracle Binary Code License Agreement,协议规定你可以使用JDK,但是不能进行修改。私用和商用都可以,但是JDK中的某些商业特性,是需要付费才可以使用的。OTN协议,即Oracle Technology Network License Agreement,目前新发布的JDK用的都是这个协议,可以私用,商用需要付费。从下图可以看出各个版本对应的协议:
我不想掏钱怎么办?
商用的话使用上面BCL协议的版本,私用怎么着都行。很多时候,开发者会对什么版本用了什么协议比较迷惑,懒得搞清楚,那么可以直接使用OpenJDK。
OpenJDK是一个基于GPLv2+CE协议的开源JDK实现,他由OpenJDK社区来运作,作为OpenJDK社区的主导者,Oracle也在尽量减少OpenJDK和Oracle JDK的差别(source),将一些商业特性移植到了OpenJDK上,比如Java Flight Recorder,Java Mission Control和ZGC等等。对于普通开发者,两者差异可忽略不计。OpenJDK同样会每6个月发布一个新版本,不过每次新的版本发布后,旧的就不维护了,比如OpenJDK 12发布之后,11版本便停止更新,停留在11.0.2版本,没有LTS一说了。
除了Oracle的OpenJDK,还有很多免费OpenJDK实现可以用,比如 Zulu,AdoptOpenJDK,Amazon的Corretto和阿里巴巴的dragonwell等等。具体他们有什么区别,我们以后再说。
我们大厂愿意掏钱怎么办?
可以通过订阅Java SE Subscription来付费,桌面用途每人每月2.5刀,服务器用途每个处理器每月25刀,量多还有优惠。Oracle以前还提供Java SE Advanced, Java SE Advanced Desktop和 Java SE Suite等一次性授权,不过现在都建议新老付费用户换成订阅制了。
Oracle为什么这么做
当然是赚钱,OTN协议的Oracle JDK现在允许私用也只是想让开发者养成习惯,将来开发者搞公司项目的时候,非常有可能会习惯性去Oracle官网下载JDK,这样就导导致了商用项目未经许可违规使用。Oracle法务部的刀肯定老早就磨好了。
参考资料:
- BCL许可协议内容
- OTN许可协议内容
- GPLv2+CE协议内容
- Oracle官方关于许可协议的FAQ
- Oracle官方关于Java SE Subscription的FAQ
- Java SE Subscription价格表
- Oracle的Java SE技术支持路线图
- Java is Still Free 2.0.3-社区大佬们对于Java免费与否的解释