2011-8-8 20:06:20

 

 


2011-8-8 20:06:20

Sun 发布 JDK 5.0 源代码的决定,除了提供对公共类的访问之外,还提供了对非公共类的访问,这给了开发人员更深入了解最新发行版幕后内容的机会 —— 前提是您不介意遵守许可条款。我不会卷入所谓“Sun 是不是应该把 Java 平台开源”的争论,而是向您展示如何得到源代码并讨论两个许可选项:Sun 社团源代码许可(SCSL)和 Java 研究许可(JRL)。我还会简要地讨论 6.0 Mustang 二进制和源码的早期访问快照版本。

标准源代码下载

Java 平台公共 API 的源代码和 Javadoc 中提及的所有类都属于标准 JDK 交付的一部分,您可以访问它们。为访问这些源文件,您需要将它们与 JDK 下载安装在一起。如果给出大小(18 MB),那么 JDK 下载是可选的,所以您必须确保在下载的时候选择了该下载。安装之后,只需把文件解压到子目录中即可,如清单 1 中演示的那样。

现在,如果您在开发代码的时候遇到问题,得到意外的堆栈转储,您就可以查看系统类的源代码,看看是为什么。例如,用 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 的立场是它可以防止平台标准分叉。无论如何,这个许可确实让您可以访问整个平台,这比起不能访问来说当然有优势。

那么您到底可以访问到什么呢?对于入门者来说,您可以访问系统资源,例如线程调度器和内存模型。如果您不喜欢现有的模型,那么您可以创建自己的。您可以测试您的假设,看看您的模型是否更好。当然,这可能就进入了 Java 研究许可(JRL)的领域。如果您想修补的 bug 已经等候了很久,但是在 Sun 的优先级列表中没有排在前面,那么您可以自己修补它,然后把补丁发回 Sun。您想自己留着补丁?当然可以,但是重新发布的修复了这个 bug 的平台会有一些限制。这时就需要许可费和兼容性测试套件了。想要创建一个干净版本的虚拟机或者库?那么背道而驰,不要赞成这个许可(即 JRL)。
Java 研究许可(Java Research License,JRL)是 Java 源代码版本许可方案的新成员。在研究社团对 SCSI 中原来的研究部分提出诸多抱怨之后,专门针对大学和研究社团创建了 JRL。如果您是大学或者研究机构的老师或研究人员,那么下载具有 JRL 的源代码是比较合适的。许可中的研究使用权力部分规定,您可以用这项技术与其他也获得许可的人进行研究,修改代码,并发表您的研究。

但是,有一些灰色区域。许可说,您可以与其他人获得许可的人共享源代码;许可还说,如果不是主要的部分,您还可以分发对象代码以及发布源代码的摘录。现在,如果您计划教授您的研究,而您的学生要为课程付费(也就是说成为了商业行为,而不仅仅是研究目的),那么您就违反了许可。如果您想要根据通过 JRL 访问搜索到的材料来教学,那么建议您最好先咨询一下法律顾问。

 

你可能感兴趣的:(java,jdk,虚拟机,sun,javadoc,平台)