针对JDK5.0源代码许可,Sun 最近通过 Sun 社团源代码许可(Community Source License,SCSL)和 Java 研究许可(Java Research License,JRL)发布了 JDK 5.0 的源代码。这个月,Tiger 的专栏作家 John Zukowski 从新发布的细节中抽空出来,概述了许可的条款以及为开发人员提供了哪些源代码访问。他还简要介绍了一下 J2SE 6.0 发行版 Mustang 令人惊奇的早期访问。
Sun 发布 JDK5.0源代码许可的决定,除了提供对公共类的访问之外,还提供了对非公共类的访问,这给了开发人员更深入了解最新发行版幕后内容的机会 —— 前提是您不介意遵守许可条款。我不会卷入所谓“Sun 是不是应该把 Java 平台开源”的争论,而是向您展示如何得到源代码并讨论两个许可选项:Sun 社团源代码许可(SCSL)和 Java 研究许可(JRL)。我还会简要地讨论 6.0 Mustang 二进制和源码的早期访问快照版本。
标准源代码下载
Java 平台公共 API 的源代码和 Javadoc 中提及的所有类都属于标准 JDK 交付的一部分,您可以访问它们。为访问这些源文件,您需要将它们与 JDK 下载安装在一起。如果给出大小(18 MB),那么 JDK 下载是可选的,所以您必须确保在下载的时候选择了该下载。安装之后,只需把文件解压到子目录中即可,如下段代码中演示的那样。
返回 1.4 默认的 Steel 主题
- cd c:\jdk1.5.0
- mkdir src
- cd src
- jar xvf ..\src.zip
现在,如果您在开发代码的时候遇到问题,得到意外的堆栈转储,您就可以查看系统类的源代码,看看是为什么。例如,用 null 参数调用 StringBuffer 构造函数是不对的。为什么呢?查看源代码,就了解到,构造函数试图取得 string 的长度。虽然在 Javadoc 中有文档说明, StringBuffer 构造失败会抛出 NullPointerException 异常,但是查看源代码可以让您知道 为什么 会失败。因为您不能对 null 对象指针调用 length 方法。
注意: 源文件保存为具有 Unix 换行符,如果用记事本(Notepad)这样的编辑器查看源代码,阅读起来会很困难,因为文件中没有回车符。如果您想转换这些文件,那么 JavaWorld 的 Java Tip 64仍然会有用。
JDK 5.0 源代码包
JDK 没有提供平台的全部源代码。提供了 java.* 和 javax.* 包中的公共类,但是没有提供 sun.* 或虚拟机中的公共类。JDK 5.0 源代码包就是弥补这个不足的。如果您能够遵守其中任何一个许可的条款(稍后介绍),那么您就可以访问平台(允许 Sun 公开的平台)的完整源代码。这两个许可许可了一些东西,但是它们也有自己的再发布限制。您可以从 Java 2 Platform Standard Edition 5.0 页面访问源代码(请参阅 参考资料)。只要单击您要遵守的许可的下载链接,阅读并接受许可条款,然后单击第一个下载链接,就会显示组的文件列表。这时,有两个下载链接,一个是 55 MB 的 zip 格式的源代码文件,另一个是安全性文件(例如加密供应者),只有不到 1 MB。下载源文件,解压后就可以研究了。还有另外一个 2 MB 的二进制文件下载,它包括共享库、字体和图片。有它更好,没有也可以。
Sun 社团源代码许可
最新的 J2SE 发行版中引入的 Sun 社团源代码许可(Sun Community Source License,SCSL),针对研究社团做了少量修改。该许可在 5.0 中基本上没有变化。
SCSL 不是一个开源许可,但是允许您自由地访问源代码,前提是您可以接受许可(而且在授权国家居住)。但是,根据您处理许可的方式,您可能要付费。虽然不是每个人都同意该许可,而且我也不想对它发表评论,Sun 的立场是它可以防止平台标准分叉。无论如何,这个许可确实让您可以访问整个平台,这比起不能访问来说当然有优势。
那么您到底可以访问到JDK5.0源代码呢?对于入门者来说,您可以访问系统资源,例如线程调度器和内存模型。如果您不喜欢现有的模型,那么您可以创建自己的。您可以测试您的假设,看看您的模型是否更好。当然,这可能就进入了 Java 研究许可(JRL)的领域。如果您想修补的 bug 已经等候了很久,但是在 Sun 的优先级列表中没有排在前面,那么您可以自己修补它,然后把补丁发回 Sun。您想自己留着补丁?当然可以,但是重新发布的修复了这个 bug 的平台会有一些限制。这时就需要许可费和兼容性测试套件了。想要创建一个干净版本的虚拟机或者库?那么背道而驰,不要赞成这个许可(即 JRL)。
Java 研究许可
Java 研究许可(Java Research License,JRL)是 Java 源代码版本许可方案的新成员。在研究社团对 SCSI 中原来的研究部分提出诸多抱怨之后,专门针对大学和研究社团创建了 JRL。如果您是大学或者研究机构的老师或研究人员,那么下载具有 JRL 的源代码是比较合适的。许可中的研究使用权力部分规定,您可以用这项技术与其他也获得许可的人进行研究,修改代码,并发表您的研究。
但是,有一些灰色区域。许可说,您可以与其他人获得许可的人共享源代码;许可还说,如果不是主要的部分,您还可以分发对象代码以及发布源代码的摘录。现在,如果您计划教授您的研究,而您的学生要为课程付费(也就是说成为了商业行为,而不仅仅是研究目的),那么您就违反了许可。如果您想要根据通过 JRL 访问搜索到的材料来教学,那么建议您最好先咨询一下法律顾问。
Mustang
Sun 最近带给我们的一个惊奇就是对 J2SE 6.0(代号为 Mustang)的早期访问。(为了满足您的好奇心,透露一下 7.0 的代号为 Dolphin。)J2SE 的下一版本预计在 2006 年春发布,在 JRL 许可之下,您既可以访问该版本的源代码,也可以访问它的二进制代码。该下载中缺少 Javadoc,您必须在构建 JDK 之后自行构建它。
值得花时间现在研究 Mustang 吗?这取决于您的意向。从纯研究的角度来说,这次发布的版本当然是份大礼。如果您需要计划公司未来的产品战略,而许可条款与您的意向又不冲突,那么还是值得调查一下的。对于本栏目的普通读者来说,如果您想在事情完全准备好之前了解它,而且不介意运行一些还没有经过完全测试,可能还不是全功能的代码,那么您就下载研究它吧。反正我知道我是准备进行研究的。
结束语
对于JDK5.0源代码许可而言,如果您居住在一个已授权可以接收源代码的国家,那么现在得到 JDK 源代码比平台以前的发行版容易得多了。过去,您必须打印协议,物理地签署协议,并传真回 Sun。之后您才能访问一个具有源代码下载权的私有 Web 站点。现在,只需要用鼠标指向并单击,单击,单击,就能得到源代码。只要许可条款与您的意向不冲突,而且您是属于比较好奇的那类人,那么源代码就是值得研究的好东西,可以学习更多有关 Java 工作原理的内容。对于 Mustang 来说,看看这个平台未来要走向何方会更有趣。
【编辑推荐】