Java开源还是闭源

今天在《Java核心技术·卷I》看到常见误解

Java is proprietary, and it should therefore be avoided.(英文版P14)


表示很好奇为什么会产生这种误解于是去查了一下java的开源历程。
先罗列一下查到的资料:

2006年11月13日,Sun Microsystems正式宣布Java开源,并希望此举能够让社区帮助进行安全分析、bug报告、增强性能、了解偏僻个案等。
不过,十年过去之后,对于Java开源的争议依旧存在。批评者认为,Java并没有像官方说的那样完全开源,其实只开放了SDK,而Java SE和Java EE TCKs仍然是闭源的。
对于Java的开源身世,最初IBM呼吁将Java捐给Apache 软件基金会,使用Apache许可证分发,但Sun最终决定在GPL许可证下开源Java。GPL许可证要求衍生版本需要公开分发。Gosling称这能让Java更好的适应开源社区。Sun在2010年被甲骨文收购,Java也落到了甲骨文手中,由甲骨文主导Java的演化。
引用自https://www.oschina.net/news/79031/is-java-opensource

从这份资料里面我得到了以下两点:

  1. Sun公司确实宣布开源了,但没有完全开源。
  2. Sun公司在GPL许可证下开源java。

于是我好奇又去查了一下GPL许可协议:

GPL许可协议(GNU General Public License):只要软件中包含有其他GPL协议的产品或代码,那么该软件就必须也采用GPL许可协议且开源及免费。具有以下特点:


复制自由:允许将软件复制到任何人的电脑中,并且不限制复制的数量。
传播自由:允许以各种形式进行传播。


收费传播:允许在各种媒介上出售该软件,但必需提前让买家知道这个软件是可以免费获得的,并解释收费的理由(一般来讲都是能够为用户提供某种服务,以技术服务的形式来收费)。


修改自由:允许开发人员增加或删除软件的功能,但必须依然基于GPL许可协议授权。一句话,修改后必须以GPL授权开源发布。

看上去很正规的许可协议,只有更改了java这门语言本身的代码的时候需要开放源代码。于是对不开源的说法表示不理解,
于是接着针对没有完全开源的说法找了一下Sun公司开源状况的描述:

在2006年11月13日的JavaOne大会上,Sun公司宣布最终会将Java开源,并在随后的一年多时间内,陆续将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码大多是Sun本身也无权限进行开源处理的)外,OpenJDK几乎包括了Sun JDK的全部代码,OpenJDK的质量主管曾经表示,在JDK 1.7中,Sun JDK和OpenJDK除了代码文件头的版权注释之外,代码基本上完全一样,所以OpenJDK 7与Sun JDK 1.7本质上就是同一套代码库开发的产品。


作者:奥特曼超人Dujinyang
来源:CSDN
原文:https://blog.csdn.net/DJY1992/article/details/56666725
版权声明:本文为博主原创文章,转载请附上博文链接!

喔,在如上对java发展历史的介绍中,我发现java在发行过程中分为了openjdk和sun/oracle JDK两种。

通过膜拜大佬了解到这两种JDK是独立授权的,区别还有一点大。

引自 https://fgh2011.iteye.com/blog/1771649


关于JDK和OpenJDK的区别,可以归纳为以下几点:


授权协议的不同:
openjdk采用GPL V2协议放出,而JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。
OpenJDK不包含Deployment(部署)功能:
部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在Openjdk中是找不到的。


OpenJDK源代码不完整:
这个很容易想到,在采用GPL协议的Openjdk中,sun jdk的一部分源代码因为产权的问题无法开放openjdk使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使OpenJDK更加完整。


部分源代码用开源代码替换:
由于产权的问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。


openjdk只包含最精简的JDK:
OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。


不能使用Java商标:
这个很容易理解,在安装openjdk的机器上,输入“java -version”显示的是openjdk,但是如果是使用Icedtea补丁的openjdk,显示的是java。(未验证)


总之,在Java体系中,还是有很多不自由的成分,源代码的开发不够彻底,希望Oracle能够让JCP更自由开放一些,这也是所有Java社区所希望的。

到这里,基本上明白了java为什么会有开源还是闭源的争执,也知道了出现误解的原因。我个人感觉java还是属于开源的,只是开源的程度没有达到百分百。

最后用一个大佬很精简的总结作为本次深入了解java开源的结束。

OpenJDK原是SunMicrosystems公司为Java平台构建的Java开发环境(JDK)的开源版本,完全自由,开放源码。Sun Microsystems公司在2006年的JavaOne大会上称将对Java开放源代码,于2009年4月15日正式发布OpenJDK。甲骨文在 2010 年收购SunMicrosystem之后接管了这个项目。


Oracle/Sun JDK里面包含的JVM是HotSpotVM,HotSpot VM只有非常非常少量的功能没有在OpenJDK里,那部分在Oracle内部的代码库里。这些私有部分都不涉及JVM的核心功能。所以说,Oracle/Sun JDK与OpenJDK其实使用的是同一个代码库。


从一个Oracle内部员工的角度来看,当他要构建OracleJDK时,他同样需要先从http://hg.openjdk.java.net签出OpenJDK,然后从Oracle内部的代码库签出私有的部分,放在OpenJDK代码下的一个特定目录里,然后构建。


值得注意的是,Oracle JDK只发布二进制安装包,而OpenJDK只发布源码


[引用自] (https://blog.csdn.net/lsx2017/article/details/81273548)

对于java8收费的事情。。。有点关注,怎么说呢,还是希望Oracle能够让Java变得更好吧。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值