本刊特约记者:叶亮
《程序员》杂志,2006年11月14日快讯。昨天,也就是太平洋标准时间2006年11月13日,Sun正式宣布使用GPLV2许可证开放Java SE和Java ME源代码。
公告宣称,此次开源内容包括Sun的Java SE和Java ME实现;但不包括Java语言、Java规范和TCKs。随公告还发布了Sun计划的Java开源时间表。按照该时间表,Sun会在13日宣布Java开源适用的许可证,并且发布第一个Java SE代码发布版和可构建的Java ME代码发布版,同时宣布对应开源社区的成立;紧接着在12月,Java SE 6 GA版发布;在明年4月,发布可构建的JDK。
之前被反复猜测的许可证问题,终于定在了GPLV2,而不是用在OpenSolaris上的CDDL。经典GPLV2许可证的特殊在于,首先,假如你创建的程序中使用了任何采用GPL许可证的代码,那么你的程序必须也遵循GPL协议;第二,不能向使用GPL程序的用户收费。毫无疑问,Java采用GPL打击了相当一部分厂商,但同时会获得F/OSS(免费与自由软件社区)相当的好感。最显著的一点改变就是,现在在任何Linux发布版中都可以包含Java代码了,而在此之前,只有采用GPL的perl/python才可以。
Sun还强调了一个例外,即Classpath。我们知道开源社区中有很多Java SE的实现,如GNU/Classpath,和Kaffe VM;现在Sun的Java SE全部采用GPL,除了这个例外:你可以发布使用开源JRE的Java程序,却不用GPL你的代码——这和LGPL十分类似——可以说Sun的开源方式已经和FSF十分接近。
我们再来看看开源的具体内容。先看Java SE方面。Sun宣布在第一次的代码发布中,开源的组件包括:javac编译器、虚拟机、字节码编译器、垃圾回收、线程和安全部分。第一个代码发布版来自于JDK7的最初构建。它基本上就是JDK6的最终发布版代码。2007年春天将发布的包括,JDK6和JDK7的所有非保留模块的源代码和完整的构建脚本,保留不开源的模块将会以二进制包的形式发行。所以,真正的革新发生在JDK7。有小部分的源代码将保留不开源,它们基本上都在Java 2D部分,包括ICC色彩管理库以及字体、图形rasterizer。
Java ME方面的开源也很彻底。11月,开源基于CLDC的主要手机实现和ME基础框架;十二月底,高级操作系统手机实现,包括基于CDC/FP/PBP的设备、手持设备、机顶盒和Blu-ray设备。明年二月,Java设备测试框架开源。部分牵涉到合作厂商的部分,Sun承诺会和J2SE一样,尽量沟通协调,促进尽快开源。
然而,Sun对Java的所有基础这样开源,并非表示Sun要完全放任Java。Sun在公报中强调,JCP的角色没有变,流程也没有变。Sun的目标是给社区提供更多的选择。选择Sun提供的商业发行版Java SE和Java ME,用户将以较少定制化的代价换取高效、稳定、安全、完整的支持和更新;用户也可以选择开源的代码DIY,那样你能最大的程度定制化Java,但必须为此花费人工,并且要自己克服低质量和低效率。
Sun表示,开源版本的Java SE和ME将分别在Java.net上以OpenJDK和MobileAndEmbedded社区形式存在。Sun计划利用新的技术(如将会用Mercurial代码管理工具作为新社区的基础)加上完备贡献管理协定,构建出一套全新的、完备的Java开源社区。并且将在适当时候,GlashFish和Java EE的许可证也将改为GPL。另外需要说明的是,仍然只有Sun才有权使用Java相关的商标,但Sun给通过TCK的Java程序提供专门的Logo。
注:本文部分内容来自即将发行的《程序员》2006年12期杂志。