apacheharmony:进入 Harmony 世界 第 1 部分: Apache Harmony 项目介绍

  Apache Harmony 背景

  Apache Harmony 提案在 2005 年 5 月被 Apache 软件Software基金会(ASF)接受并且按照 ASF 惯例成为个孵化器(incubator)项目

  Harmony 为自己定了两个目标首先是开发出个独立并且和现有 JDK 兼容 Java SE 5 实现并且以 Apache 软件Software许可证 2.0 版发行;其次是建立个开放模块化运行时架构包括虚拟机和类库的间及其内部模块化并通过这个平台允许社区在此基础上自由定制自己 Java 实现或者对某个模块单独进行创新

  Apache Harmony 项目成立以及它这两个目标具有很大现实意义首先由于商业JDK流行性它们几乎成为事实上标准所以 Harmony 必须和它们保持高度兼容才能够使应用迁移成本最低也就相对容易被用户所接受;其次Harmony 存在重要意义的就在于这是个属于开源社区 Java 平台在这个平台上社区可以自由移植和创新个开放模块化架构将为移植和创新带来最大便利性;最后Apache 软件Software许可证是个对商业公司和开源社区都比较友好开源许可证因此 Harmony 可以给最大范围开发人员和用户带来便利本文和本系列后续文章将详细介绍 Harmony 在兼容性和模块化方面努力以及这些目标带来价值

  也许正是基于以上些原因Harmony 项目成立仅仅年多时间就得到了广泛支持和关注并且得以飞速发展目前Apache Harmony 已经拥有了个活跃开发社区并且接受了来自公司学校和个人多次捐赠IBM 在 developerWorks 上提供了个 Java 虚拟机环境免费下载以支持 Harmony 项目开发还多次捐赠了核心类库实现和测试代码在 IBM 英国 Hursley 软件Software开发实验室和中国软件Software开发中心各有个开发团队(Team)积极参和 Harmony 项目此外 Harmony 项目还接受了 3个 Java 虚拟机实现捐赠另外还有个开源 Java 虚拟机 SableVM 正在积极和 Harmony 社区合作以实现和 Harmony 类库集成Java SE 实现难度最大是其规模庞大类库而最近类库 API 覆盖率统计表明Harmony J2SE 1.4.2 类库 API 覆盖率已经超过 80%Java SE 5 覆盖率已经达到 79% 以上目前经不完全测试在 Harmony 上已经可以良好运行 Eclipse、JEdit、Ant 等流行 Java 工具并且可以部分运行 Tomcat 和 Geronimo 等企业应用

  技术架构

  如前所述Apache Harmony 非常注重模块化从图可以对 Apache Harmony 总体架构有个初步感觉和所有其他 Java SE 实现类似Harmony 从大体上可以分为 3个层次最下层是操作系统中间是 Java 虚拟机最上层是 Java 类库而 Harmony 特点在于:

  虚拟机和类库内部被高度模块化在 Harmony 中类库在功能和 Java Package 基础上被分成 31 个模块而虚拟机也被分成即时编译器 内存管理 线程管理Java 本地接口等等模块每个模块都有接口定义从而有可能单独被替换成区别实现

  操作系统层次和虚拟机层次的间接口由 Port Layer 定义Port Layer 封装了区别操作系统差异为虚拟机和类库本地代码提供了套统 API 访问底层系统

  虚拟机和类库的间接口除了 Java 规范标准定义 JNIJVMITI 的外加入了层虚拟机接口主要由内核类(Kernel Class)和本地代码 VMI 组成实现了虚拟机接口虚拟机实现都可以使用 Harmony 类库实现并且可以被 Harmony 提供个 Java 启动启动

  图 Apache Harmony 技术架构鸟瞰图

Export-Package: java.nio
java.nio.channels
java.nio.channels.spi
org.apache.harmony.nio

  在编译的后个模块将被打包成个 jar 文件如果该模块有本地代码则该模块本地代码被编译成个单独动态链接库文件如图 2所示hyluni.dll 就是 LUNI(lang util net io)模块本地 2进制代码库而在 <hdkbase>/jdk/jre/lib/boot 目录中对应 LUNI 模块则有个 luni.jar

  Apache Harmony 开发思路方法

  近年来开源软件Software相关知识产权问题越来越受到关注为了保证对知识产权尊重保持 Harmony 代码纯洁性和原创性除了 Apache 软件Software基金会原有通用规则的外Harmony 开发社区花了很大精力来定义 Harmony 接受代码捐赠和接受项目参和者规则

  Harmony 要求每个开发人员在参和代码捐赠的前必须完成个问卷调查问卷主要内容是有关该开发人员以前是否接触过其他 Java SE 实现如果他接触过其他专有代码部分他就不能参和 Harmony 相应模块代码工作(但也有些特殊例外情况)同时任何现有代码捐赠必须提供代码"血统"信息

  知识产权的外个重要问题就是兼容性Harmony 目标产生个 Java SE 5 兼容实现它不仅仅要完全遵循 Java API 参考定义 Java SE 规范标准Java 语言规范标准以及 Java 虚拟机规范标准;同时还必须保证和现有 Java SE 参考实现兼容性为此Harmony 采用了测试驱动开发模式以单元测试用例来保证 Harmony 行为和参考实现最重要Harmony 正在试图申请 Java SE 5 JCK 兼容性测试许可证只有被 JCK 认证过Harmony 才能正式被称为 Java 兼容实现

  除了单元测试的外Harmony 还会通过些已有成熟 Java 来作为黑盒测试应用测试 Harmony 是否已经可以支持这些应用目前 Harmony 可以运行 EclipseTomcatJEdit 等 Java Harmony 提供了个工具鼓励 Java 作者将他们运行在 Harmony 上并且通过这个工具将运行结果反馈给 Harmony 开发社区

  总来说Harmony 采用以下几种方式来衡量开发进度:

  粗粒度层次上可以衡量个模块是否已经开发

  使用工具比较 Harmony 和参考实现兼容性比如使用 JAPI 检测 Harmony API 覆盖率

  使用工具检查测试覆盖率检查 Harmony 各种行为是否得到充分测试

  支持成熟 Java 应用列表

  将来目标是通过 JCK 测试

  本系列后续文章将进步介绍 Harmony 开发中最佳实战

  Apache Harmony 未来发展方向

  Harmony 个重要目标是类库模块化Harmony 将进步采用 OSGi 运行时框架技术根据模块元数据描述自动装载模块并且还将努力实现以下目标:

  允许同时装载同模块区别版本

  通过模块 MANIFEST.MF 元数据文件控制其所包含 Java package 可见性



  Java 类和相应本地代码启动/停止/卸载等生命周期管理

  你能为 Harmony 做些什么

  目前 Harmony 已经建立了个相当活跃开发社区并且非常欢迎更多人参和进来包括参和 Harmony 开发移植 Harmony 到其他平台(目前 Harmony 只有 IA32 Windows 和 Linux 版本)撰写文档在 Harmony 上运行成熟 Java 应用检查其实现覆盖率和兼容性等等除此的外同样重要你还可以参和远未成熟 Harmony 用户社区试用 Harmony参和 Harmony 讨论等等Harmony 是个属于所有人 Java 平台

  整理总结

  Harmony 目标是个完全兼容开源 JSE 实现

  Harmony 投入巨大努力保证知识产权纯洁性

  Harmony 社区目标是创建模块化运行时环境

  Harmony 在过去年中取得了巨大成就

  Harmony 欢迎任何有兴趣开发者



Tags:  harmonyengine sweetharmony harmony apacheharmony

延伸阅读

最新评论

发表评论