Transvirtual 采用 Microsoft Java 扩展

作者:Craig Knudsen

Kaffe 于 1996 年首次发布,是最初的开源 Java 实现。最初是作为另一个项目的一部分开发的,但它变得非常受欢迎,以至于开发人员 Tim Wilkinson 和 Peter Mehlitz 创立了 Transvirtual Technologies, Inc.,并将 Kaffe 作为公司的旗舰产品。1998 年 7 月,Transvirtual 在 GNU 许可下发布了 Kaffe OpenVM。

Kaffe 的多平台支持和小巧的体积吸引了许多用户。在线杂志 JavaWorld 将其 1998 年最佳虚拟机编辑选择奖授予 Kaffe,并表示:“Java 长期以来一直在等待 Kaffe。一个合适的开源、跨平台的 JVM,不受限制性许可的约束,对于 Java 的完全接受是必不可少的。” Kaffe 最初在“开源”一词被创造出来很久之前就以源代码形式发布。它是许多操作系统的第一个 Java 虚拟机 (JVM),也是最早为许多架构提供即时 (JIT) 编译器之一,从而提高了 Java 的运行时性能。

微软的 Java 扩展引起了很大的争议。Sun 声称微软违反了其 Java 许可协议的条款,并提起了一起备受瞩目的诉讼。微软版本的 Java 并没有像 Sun 希望的那样实现“一次编写,到处运行”。在许多 Java 社区看来,微软似乎试图通过 J/Direct 和新的 Java 关键字(“delegate”和“multicast”)等扩展来分裂 Java,这些扩展为 Java 开发人员提供了 Java 中原本不可用的新功能。使用这些扩展的应用程序需要使用微软的 JVM。

乍一看,一家以其开源、洁净室 Java 实现而闻名的公司会为该语言添加对 Microsoft 扩展的支持,这似乎令人惊讶。然而,通过在 Kaffe 中添加对这些扩展的支持,Transvirtual 允许在 Windows 下(使用 Microsoft Visual J++)开发的 Java 程序,利用这些扩展在非 Windows 平台(如 Linux、FreeBSD 和 Solaris)上运行。此外,Transvirtual 还为 Windows 平台上的 Java 提供了一个新的来源。

Kaffe 支持的第一个扩展是委托(delegates)。委托关键字本质上提供了一个函数指针。这允许应用程序开发人员将事件绑定到特定的用户界面元素(例如按钮)。微软在 Java 语言中添加了新的“delegate”关键字来支持这一点。(在引入委托时,Java 处于 1.0.2 级别,尚未引入提供类似功能的新 1.1 事件模型。)如果您使用 delegate 关键字,则需要 Microsoft Visual J++ 才能编译 Java 代码。到目前为止,您还需要使用 Microsoft 的 JVM 才能运行编译后的 Java 应用程序。Kaffe 对此扩展的支持允许非 Windows 用户运行使用 delegate 扩展的 Java 代码。目前,您仍然需要使用 Visual J++ 编译您的应用程序。但是,您可以将编译后的 Java 代码部署在 Linux 或任何其他 Kaffe 支持的平台上。

委托只是 Kaffe 将支持的第一个扩展。微软的 J/Direct 提供了类似于 Sun 的 JNI 的功能,使开发人员可以访问特定于应用程序的功能。为什么有人会选择 J/Direct 而不是 JNI 呢?Transvirtual 创始人兼首席执行官 Tim Wilkinson 表示:“我主要不希望 UNIX 用户接受这些扩展并运行它们,但由于 Windows 用户正在使用它们,我不想让他们余生都被困在 Windows-NT 上。特别是 J/Direct 支持,使得将使用特定于应用程序的本地库的 Java 代码迁移到 UNIX 变得更加简单。” Wilkinson 接着说,J/Direct“提供了与 JNI 类似的功能,就我而言,它以更简洁的方式实现。”

尽管微软提供了资金来将这些扩展添加到 Kaffe 中,但这种关系是由 Transvirtual 发起的。Transvirtual 希望让用户即使使用微软工具开发代码,也能自由选择非微软平台。微软在其网站上提供了文档(请参阅资源),但没有贡献任何代码或其他知识产权。Transvirtual 支持这些扩展的条件之一是结果将以开源形式在 GNU GPL 下发布。

为什么微软会对他们的 Java 扩展的开源实现感兴趣?Sun 对微软的诉讼使微软 Java 实现的未来处于危险之中。添加到 Kaffe 的扩展是诉讼的核心。许多公司开始寻找 Java 的第二来源。带有 AWT 1.1 和本地线程支持的 Windows 版 Kaffe 计划于 7 月下旬发布。

通过支持委托(以及最终的 J/Direct 和 Java/COM),Transvirtual 使使用 J++ 开发的代码能够交付到 Linux。Linux 的伟大优势之一是其与其他操作系统的互操作性。通过向 Linux 社区提供这项技术,Transvirtual 增强了这种优势。

资源

Kaffe OpenVM 支持的平台

Craig Knudsen (cknudsen@radix.net) 居住在弗吉尼亚州费尔法克斯,并在新泽西州红岸的 ePresence, Inc. 全职远程担任网络工程师。Craig 使用 Linux 工作和娱乐已有三年。当他不工作时,他和他的妻子 Kim 会和他们的两只约克夏犬 Buster 和 Baloo 一起放松身心。

加载 Disqus 评论