LessTif 和 Hungry Viewkit
运行 Microsoft Windows 的一个优点是,所有应用程序的外观和感觉都相同。您知道窗口顶部会有一个带有下拉菜单的栏,Alt-F4 将退出,Ctrl-X 将剪切,Ctrl-V 将粘贴等等。即使是全新的软件,一切看起来都很熟悉,您不必花时间去适应新的用户界面就可以开始使用该应用程序。
将此与 X 世界进行比较,在 X 世界中,似乎没有两个应用程序看起来相同,您经常需要花几分钟时间熟悉控件,即使是以前使用过的程序也是如此。为什么 X 应用程序的外观差异如此之大?有人可能会说,程序图形用户界面 (GUI) 是其最重要的部分之一。
X 程序员最基本的工具是 Xlib,即 X 程序员库。它有效地将 X 协议的细节隐藏在一个 C 子例程库中,从而对程序员不可见。然而,Xlib 例程是非常底层的。Xlib 的理念是在为程序员提供便利环境的同时,提供 X 窗口系统的充分灵活性。特别是,程序员必须实现他/她自己的用户界面。这有两个重要的后果。首先,程序员有很多工作要做,因为滚动条、按钮等常用组件必须从头开始编写。其次,这意味着不同的应用程序看起来和感觉非常不同,因为程序员根据自己的个人品味实现自己的 GUI。
X 的设计者通过提供 Xt,即 X 窗口工具包,解决了第一个问题。它提供了一组函数,用于处理用户界面和应用程序程序的其他 X 相关部分,例如窗口创建和事件处理。Xt 提供的例程比 Xlib 更高级别,使程序员的生活更轻松。虽然 Xt 是用 C 语言编写的,但它对问题采用了面向对象的方法。Xt 中的函数以称为 widget 的自包含程序单元的形式出现。Widget 按类排列,每个 widget 类执行一种特定类型的任务。一些 widget 类提供屏幕上的 GUI 组件(滚动条、按钮等),而另一些则协助管理 GUI 的整体布局。例如,NCSA Mosaic 的 HTML 解释器被实现为一个(非常复杂的)widget。
Xt 由两层组成:Intrinsics 层,它提供了一个可以创建和管理 widget 的环境;以及 widget 本身,它们通常打包为 widget 库。存在多个 widget 库,最常见的是 Athena widget 库,它作为 X 的一部分提供,作为一个示例 widget 集。Athena widget 库已被广泛使用,尤其是在公共领域软件中,因为它广泛可用且免费。不幸的是,它仅由一些基本的 widget 组成,这些 widget 通常被认为相当丑陋。
开放系统基金会 (Open Systems Foundation) 作为 OSF/Motif 的一部分,提供了一个完善且流行的 widget 集。Motif 提供了数百个 widget,并在许多 X 应用程序软件中使用。最近的跨供应商 COSE 协议描述了一种 GUI 样式,该样式很大程度上基于 Motif。该协议的一个可能结果是,我们可能会开始看到外观和感觉一致的 X 应用程序,即使它们在具有不同操作系统的不同硬件上运行也是如此。这将有助于消除针对 X 窗口系统的一些反感。
所有这一切都可能被 Linux 社区所忽略,这存在一个危险。Motif 通常与商业 Unix/X 系统捆绑在一起,但由于它是一种商业产品,因此不作为 XFree86 的一部分提供。有几个版本的 Motif 可供 Linux 用户使用,零售价在 100 美元到 200 美元之间,但可以公平地说,大多数 Linux 用户很乐意不用 Motif,而不是为它付费。毕竟,我们有一个免费的操作系统、一个免费的 C 编译器、一个免费的 DOS 模拟器、一个免费的窗口系统等等。100 美元的 Motif?不了,谢谢。
然而,Motif 已经是 Unix 世界其他地区的实际标准,并且随着 COSE 协议的签订,对 Motif 的依赖可能会增加。虽然供应商有可能(取决于其许可安排)分发静态编译的使用 Motif 的应用程序二进制文件,但最好每个人都拥有自己的库副本。OSF 极不可能向 Linux 用户免费提供 Motif,但这就是 LessTif 的用武之地。
LessTif 是一个名为 Hungry Programmers 的小组的积极项目。它旨在成为一个免费的 widget 集,其外观和感觉与 Motif 库完全相同。更重要的是,它将与 Motif 在源代码级别兼容,以便相同的源代码可以使用这两个库进行编译,并且工作方式完全相同。在撰写本文时,当前的重点是获得 Motif 1.2 widget 的功能。完成此操作后,计划添加 Motif 2.0 的一些功能,以及可能的其他扩展。代码的开发速度非常惊人。每周都会发布新版本,并且有一个活跃的邮件列表,在此期间会发送补丁和改进。LessTif 的主要开发者是 Hungry Programmers 的 Chris Toshok,但许多其他人也在为该项目做出贡献,并欢迎新的贡献者和错误报告。
LessTif 的开发者仅根据书籍和头文件中的 Motif 1.2 描述进行工作——他们无权访问“真正的”Motif 源代码。一些开发者拥有 Motif 库,因此他们可以将应用程序与这两个库一起编译并比较结果。在撰写本文时,LessTif 仍处于 alpha 状态——我们离能够使用 LessTif 编译和运行大多数 Motif 应用程序还有很长的路要走。有一个已知可以使用 LessTif 编译、链接和运行的程序列表,但目前该列表很短。其他程序可以编译和链接,但离可用还很远。期望开发者能够给出确定的发布日期是不现实的,因为对于他们中的大多数人(所有人?),LessTif 都是一个业余项目,但开发者希望在不久的将来能够发布一个可用的版本;甚至可能在今年。LessTif 项目最终很可能成功实现其目标,并且 Linux 用户将可以访问一个免费的类 Motif 库。
Xt 工具包与合适的 widget 集的组合仍然只解决了部分问题。它为程序员提供了用户界面的构建块,但实际构建界面的责任仍然在于每个应用程序的开发者。近年来,用户开始期望他们的程序具有许多功能,例如上下文相关的在线帮助、拖放功能和应用程序间通信——并且他们希望看到它们在不同的应用程序之间以相同的方式工作。
虽然存在构建此类高级元素的指南,例如 OSF/Motif 风格指南,但这些指南的编写通常没有考虑到程序员可用的工具。如果没有一套合适的工具可供使用,每个开发者都将不可避免地以不同的方式解释指南,因为他们使用 Xt 和 widget 库提供的较低级别构建块来实现用户界面。另一个因素是,正在使用的 widget 集可能早于程序员尝试遵循的风格指南,因此可用的 widget 可能不适合手头的任务。那么,需要的是一个更高级别的工具包,该工具包专为提供 GUI 的特定任务而定制,并且使程序员能够以一致的方式提供用户期望的功能。这些更高级别的对象被称为应用程序框架。
应用程序框架已在 Macintosh 和 Windows 系统上成功使用,这就是为什么在这些环境中的应用程序之间存在如此相似之处的原因。直到最近,应用程序框架在 Unix 环境中还不是很常见,但这种情况正在开始改变。
Silicon Graphics 为其工作站提供了一个名为 IRIS ViewKit (TM) 的应用程序框架。ViewKit 并非旨在成为一个独立的库,而是旨在与 Motif 库结合使用。这为软件开发者提供了更高级别对象的易用性、强大功能和一致性,但如果需要,也允许他们充分利用 Motif widget 的低级别灵活性。这种方法有助于避免应用程序框架的主要危险——为了在框架内工作,应用程序的期望行为必须受到损害。
随着工作站供应商提供这些应用程序框架,Unix 环境和个人计算机环境之间的差距应该开始缩小。同样,Linux 存在成为 Unix 世界的穷亲戚的危险。
Hungry Programmers 也在忙于通过开发一个可以在 Linux 上使用的免费应用程序框架来改善这个问题。它被称为 Hungry ViewKit,是一个用于开发 Motif 应用程序的 C++ 类库,它遵循 IRIS ViewKit 的 API。它旨在成为 Silicon Graphics 套件的超集,以便为 IRIS 版本开发的所有代码都可以在 Hungry 套件上工作,但反之则不然。
LessTif 项目实际上是从 Hungry ViewKit 的开发中衍生出来的。在开发 Hungry ViewKit 和 XWord(为 X 窗口系统开发的文字处理器)时,Hungry Programmers 感觉对 Motif widget 集的依赖性太强,并决定他们应该实现一个外观和感觉相似的库。
目前,Hungry ViewKit 没有可用的文档,但 XWord 源代码可用作其用法的示例。XWord 的工作优先级高于修复 ViewKit 上的错误。因此,虽然 Hungry ViewKit 的版本是可用的,但它还不适合胆小的人。
[作者注:正如 Web 的性质一样,我在原始文章中给出的 URL 已更改。我相信下面修改后的 URL 是正确的。]
Hungry Programmers 有一个主页,网址为 http://www.hungry.com:8000/ 或可以通过电子邮件发送至 hungry@uidaho.edu。LessTif 主页位于 http://www.hungry.com:8000/products/lesstif/,您可以通过向 majordomo@hungry.com 发送请求 subscribe lesstif 的邮件正文来订阅 LessTif 邮件列表。或者,向同一地址发送请求 subscribe lesstif-digest 可以获得摘要形式的列表。还有一个 LessTif 文档项目,网址为 http://www.hungry.com:8000/products/lesstif/Lessdox/ Hungry ViewKit 主页位于 www.hungry.com:8000/products/viewkit
Malcolm Murphy 仍然希望他在小时候放弃单簧管课程之前就发现了爵士乐。他认为自己太老(或太懒)而无法重新开始,所以他改弹吉他。如果您无法抑制向他发送电子邮件的冲动,他的地址是 Malcolm.Murphy@bristol.ac.uk。