附录A OpenJDK
在Java语言产生之后的很长一段时间内,Java语言的规范制定以及类库和运行环境的开发工作,都是由Sun公司独自完成的,都是Sun公司的私有实现。在Java发展的初期,这种方式避免了繁琐的流程,降低了对外的沟通成本,是有利于Java语言的快速发展的。但是随着Java语言的日益流行,这种Sun公司的私有实现模式已经不能适应发展的要求了。首先是广大Java开发者对Java的需求越来越多,单凭Sun公司一己之力难以快速应对。另外对那些采用了Java平台的企业来说,一个很现实的担忧是Java平台的供应商锁定(vendor lock-in)问题。如果自己公司的核心业务系统都基于Java平台来构建,而这个平台本身却是另外一家公司的私有技术,有这样的顾虑是合情合理的。Sun公司也意识到了这一点,于是开始了Java平台的开放化进程。
首先开放的是Java平台的规范。Sun公司公开了Java语言规范和Java虚拟机规范。Java语言规范详细描述了Java语言的语法和重要特性。Java虚拟机规范则规定了Java字节代码格式和执行Java字节代码的虚拟机的相关细节。前面介绍了Java程序社区JCP, Sun公司正是依托这个社区的流程来规范对Java平台所做的各种修改,同时依靠社区的力量来完善Java平台本身。社区对Java平台更新的贡献的一个典型例子是J2SE 5.0中引入的同步实用类库java.util.concurrent包。在这之前,使用Java进行多线程编程只能使用最基本的几个原语,不但复杂而且容易出错。Doug Lea领导开发了方便多线程开发的实用工具包。这个工具包最初是独立分发的,后来正式成为Java平台的一部分。
另外一部分需要开放的是Sun自己的Java虚拟机实现、Java类库实现和编译器等实用工具。Sun公司于2006年宣布Java将成为开放源代码的软件。为了实践这个开放策略,Sun开发的HotSpot虚拟机和编译器最先成为使用GPL协议的自由软件。接着Java类库中的绝大部分都按照GPL协议开放了源代码。而对于剩下的小部分由于版权原因无法开放源代码的类库,也在社区的努力下找到了替代的开源实现。至此,Java语言终于有了一个自由的开放源代码的实现,即OpenJDK。
OpenJDK的出现正在对Java语言产生着积极而深远的影响。依托于社区的开放源代码模式,使Java平台可以依靠社区的力量快速发展。而这种模式也避免了供应商锁定的问题。值得一提的是,OpenJDK的出现并不阻碍其他私有的JDK的发展。其他公司仍然可以针对不同的应用环境开发出更加适合的JDK,这些私有的JDK也可以自由地使用OpenJDK作为其实现的基础。
目前的OpenJDK主要有JDK 7和JDK 6两个版本。OpenJDK 7是目前主要开发的版本,也是Java SE 7的参考实现。OpenJDK 6则是Java SE 6的一个开放源代码的实现,主要被用在Fedora等Linux分发平台上。
在Oracle公司收购了Sun公司之后,Oracle公司并没有改变在Java平台上的开放策略,而是继续支持OpenJDK的发展。随后,Oracle同IBM和苹果公司都建立了合作关系,共同推进OpenJDK的发展。
由于OpenJDK是Java SE 7的参考实现,所以本书中的所有示例代码都是基于OpenJDK 7进行开发和调试的。