GNOME,其现状与未来
GNOME 项目旨在使 UNIX 更具吸引力且易于使用。为了帮助实现 GNU 项目的目标,我们希望确保为用户提供一整套应用程序,以及一个使他们能够有效管理其计算机的桌面。GNOME 团队一直专注于创建可重用的开发库和工具基础设施,以及基于此基础设施的生产力应用程序。
桌面环境不是一组应用程序(例如 Web 浏览器或电子表格),用户通过这些应用程序与系统交互以完成有用的任务;相反,它是为用户提供对其工作环境控制的实用程序。作为 GNOME 最直接可见的部分,桌面环境包括文件管理器、面板和帮助浏览器,以及日常维护计算环境所需的其他实用程序。
GNOME 会话从 GNOME 显示管理器开始,该管理器授予对系统的访问权限。这个过程的优点是 GDM 的作者重写了整个登录序列,使其安全且可扩展。GDM 代码库旨在实现稳健和安全。
从那里,GNOME 面板和 GNOME 文件管理器提供桌面功能,使用户能够启动应用程序并管理他们的信息(参见图 1)。
GNOME 桌面是第一个包含应用程序主题的桌面。应用程序主题是一种使应用程序外观不同的方式。人们可以选择使其桌面看起来像其他流行的系统,或对其进行调整以适应他们的需求和个人界面愿望。GNOME 的下一个主要版本将包含一个新的、更新的且集成更好的主题机制,以及将影响整个桌面而不仅仅是应用程序的主题包。
我们还将 GNOME 个人信息管理系统(日历、地址簿、任务列表)与 Palm Pilot 集成,并且可以将更多系统插入到系统中。要了解有关此功能的更多信息,请访问 http://www.gnome.org/gnome-pilot/。
仅仅能够选择屏幕保护程序、组织图标、浏览应用程序菜单和移动文件并不意味着您是社会中有生产力的一员。用户想要的是一套应用程序来帮助他们完成实际工作。这就是 GNOME 工作坊项目发挥作用的地方。许多不是由 GNOME 核心团队完成的应用程序是可用的,但如果它们彼此集成并与桌面集成,将会更有用。GNOME 工作坊项目希望制作一套高度集成的应用程序来完成您需要做的事情,无论是管理财务、写信还是编辑图片。GNOME 工作坊项目中已达到功能状态的组件包括功能强大的电子表格 (Gnumeric)、文字处理应用程序 (AbiWord) 和图像编辑应用程序(著名的 GIMP)。其他组件应用程序也在快速发展,有关其发布的新闻将在 GNOME 工作坊主页上列出。
GNOME 的另一个重要部分是开发环境。UNIX 的应用程序在具有一致且强大的图形界面方面没有历史。存在的少数图形应用程序的行为和外观都略有不同,通常没有强大的界面,并且对于它们的开发者来说不容易编写。GNOME 通过简化应用程序的开发来解决最后一个需求,从而允许创建易于使用且功能强大的图形界面。
GNOME 提供了一个高级应用程序框架,使程序员无需担心图形应用程序界面的底层细节,从而使他可以专注于实际应用程序。Glade 是许多 GNOME 应用程序使用的用户界面设计工具,它通过允许图形化创建程序的用户界面,将这个概念更进一步。Libglade 库允许在运行时从 Glade 保存的 XML 界面描述文件中创建用户界面。GNOME 还认识到,并非每种编程语言都适用于每种类型的工作。我们特别注意使 GNOME API 易于包装和导出到其他编程语言,以便人们可以用他们选择的语言开发基于 GNOME 的应用程序。
除了核心 GNOME 库是用 C 语言编写的之外,还有许多语言的绑定,包括 C++、Objective C、Guile、Python、Perl、Ada95、Tom、Pascal、Haskell 等。Java 绑定正在开发中;当与 gcc 编译 Java 代码的能力结合使用时,Java 可能会成为 GNOME 编程的可行替代方案。
Gnumeric 电子表格(参见图 2)的目标是包含您可以在专有电子表格上找到的所有功能。Gnumeric 已经实现了 Excel 2000 中可用的大多数内置函数,并且在您阅读本文时,它应该已经完成。
用户可以使用 Python、Perl 或 Scheme 编写自己的函数,并通过 Gnumeric 引擎访问它们。这使人们能够根据自己的需求调整 Gnumeric。当然,如果您喜欢使用 C、C++ 或汇编,您也可以将您的函数连接到电子表格。
我们正在复制流行电子表格中的许多好主意和可用性功能,并将它们包含在 Gnumeric 中。
Gnumeric 还充当各种 GNOME 技术的试验台:CORBA、Bonobo 组件和文档模型以及 GNOME 打印架构。Gnumeric 也是最早使用 libxml 的应用程序之一(Gnumeric 本地文件格式是基于 XML 的)。
Gnumeric 丰富的导入和导出过滤器使其成为您工具箱中非常有价值的补充,如果您正在寻找加载 Excel 电子表格的应用程序,那么无需再寻找:正如 LinuxWorld 测试的那样,Gnumeric 具有适用于 GNU/Linux 的最佳 Excel 导入功能。
您不仅可以使用上述语言为电子表格定义自己的函数,而且实际上可以使用任何支持 CORBA 的语言编写整个应用程序的脚本。用户可以通过使用电子表格用户界面完成的任何操作都可以通过 CORBA 通信通道完成,从而使您能够将 Gnumeric 用作应用程序的可重用引擎。
AbiWord(参见图 3)是由 Source-Gear 领导的项目。它是一款跨平台文字处理器,可以导入您的 Word 文件。该文字处理器已引起许多社区的关注,因为他们可以在 UNIX、Win32、BeOS 和 MacOS 上运行相同的文字处理器。他们的网站是 http://www.abisource.com/;您可以从那里下载它。Abi 包含许多在专有文字处理等效物中发现的有趣功能。
GIMP 是图像编辑、照片修饰、图像创作和合成的事实标准。很难列出所有功能,因为它是最成功的自由软件项目之一。GIMP 是最积极开发的应用程序之一,Yosh Manish 担任其维护者和协调员。
Dia 是一款图表应用程序,可以用作流行的专有应用程序“Visio”的替代品。Dia 支持用于绘图的各种高级对象:UML、网络、数据库、电路对象、流程图等。Dia 很容易用新的对象集合扩展,因为各种对象都是使用基于 XML 的文件格式定义的。
它已迅速成为 GNOME 开发人员生成图表并与其他开发人员交流图形信息的首选工具。Dia 团队由七名程序员组成,由 Alexander Larsson 指挥。Dia 社区非常活跃。
GNOME DB(参见图 4)是用于创建数据库应用程序的框架。它既提供了具有可插拔后端到各种数据库源的通用 API,又提供了用于处理各种数据库任务的专用小部件。按照典型的 GNOME 传统,后端基于 CORBA。Michael Lausch 和 Rodrigo Moya 是该项目的主要开发者。
GNOME-DB 由三个独立的层组成。最底层包含数据库服务器,这些服务器是 CORBA 服务器,将特定于数据库的 API 映射到 GDA 模型。中间层是 GDA 客户端库,它位于 CORBA 接口之上,以便从客户端应用程序更轻松地访问。中间层还包含 GDA UI 库,该库提供了一种从 GNOME 应用程序轻松访问客户端库的方法。顶层由利用中间层层的应用程序组成,例如 Rolodex 应用程序和 SQL 前端。
Gill(GNOME Illustrations)和 Eye of GNOME(图像查看器和组织器)是 GNOME 生产力应用程序套件的最新补充。
Gill 特别有趣,因为它的本机文件格式是万维网联盟的可伸缩矢量图形 (SVG)。在内部,该应用程序围绕文档对象模型(也是 W3C 标准)组织。Gill 仍处于起步阶段,但鉴于它建立在坚实的基础之上,它已经是一个相当强大的显示。
Eye of GNOME 也处于起步阶段,但已充当各种新 GNOME 技术的试验台:我们新的成像系统、各种新的 GNOME Canvas 改进以及新的基于模型-视图-控制器的小部件。它是我们目前选择的图像查看器,而且速度惊人。
组件编程的标准、免费可用系统不足是当今 UNIX 世界中存在的问题。GNOME 项目正在解决的问题之一是提供这样一个框架。GNOME 框架基于 CORBA 对象模型。在设计 GNOME 组件接口期间,我们试图满足一系列需求
自动化:允许远程控制应用程序。人们应该能够远程启动和控制 GNOME 应用程序。这是通过 GNOME 对象激活目录 (GOAD)、支持库(GNORBA 库)以及利用 CORBA 设施将 CORBA 绑定到脚本语言来实现的。
复合文档创建:以允许用户创建复合文档(那些内容可能由不同工具生成)的方式设计和实现 GNOME 应用程序非常重要。
就地文档编辑:复合文档创建的下一步是提供在容器应用程序内编辑嵌入式文档的方法。这意味着应该可以在文字处理文档内无缝地更改嵌入式电子表格文档:使这种集成简单易用非常重要。
组件重用:过滤器和管道被证明是 UNIX 中重要的构建块,但它们非常有限:控制流通常沿单一方向流动,并且用于交换信息的协议过于简单,无法满足当今的需求。
桌面集成:GNOME 桌面处理服务的 CORBA 接口。就应用程序而言,仅使用程序提供的已发布接口。
在 GNOME 中,特定任务的接口起着重要作用。用户可以选择他使用的这些接口的哪个实现。例如,Mailer 接口由 GNOME Balsa 邮件阅读器实现,但它也可以由 Emacs RMAIL、Emacs GNUS 或 Mozilla 邮件阅读器实现。如果其中任何一个提供 CORBA Mailer 接口,它们将与 GNOME 桌面正常工作。
所有这些需求都可以通过使用 CORBA(OMG 标准,http://www.omg.org/)来满足。我们正在使用 ORBit 作为我们的 CORBA 实现,效果非常好。ORBit 的设计目标是小巧、快速、稳健、可靠和高效。很多时候人们听到 CORBA 这个词,他们立刻会想到“臃肿”。ORBit 的情况并非如此。ORBit 很轻巧:对于大多数应用程序,ORBit 的 ORB 的工作集约为 30K,这使其适合嵌入几乎每个应用程序。这令人兴奋,因为 Gnumeric 和其他一些应用程序将其内部组件作为高度专业化的可重用组件导出到桌面(想想“UNIX 类固醇过滤器”)。
CORBA 已被证明非常有用,因为我们可以使用它通过 Perl 脚本使用 Owen Taylor 精彩的 CORBA-Perl (people.redhat.com/otaylor/corba/orbit.html) 对我们的应用程序运行回归测试。这恰好是我们最喜欢的脚本语言 CORBA 绑定之一,但您可以获得几乎每种语言的 CORBA 绑定。
通过使用 CORBA 作为我们的基础,我们确保了与现有系统的互操作性,并且任何支持 CORBA 的人都可以与我们的应用程序对话。CORBA 在 GNOME 中扮演的角色与 COM 在 Microsoft Windows 世界中扮演的角色相同。
Bonobo 是 GNOME 用于编写和实现可重用软件组件的基础。组件是提供定义明确的接口并设计为与其他组件结合使用的软件片段。在 Bonobo 世界中,CORBA 用作将组件绑定在一起的通信层。有关组件编程的更多信息,请参见 Bonobo 文档。
简而言之,Bonobo 为应用程序开发人员提供以下功能
用于创建可重用组件的基础设施,作为完整的进程、共享库或远程进程。
用于重用现有组件的基础设施。例如,您可以使用 Gnumeric 在您自己的应用程序中提供数据输入工具或作为计算引擎。
用于创建持久控件的基础设施。
用于创建复合文档的基础设施。这意味着不仅可以在垂直应用程序中重用现有应用程序,还可以创建由各种部分组成的单个文档:电子表格、公式、图形等等。
GNOME 1.0 使用 Imlib 软件库进行图像加载和操作。虽然 Imlib 满足某些应用程序的需求,但其设计与典型的 GNOME 用例不太吻合。作为替代品,libart(RGBA 图像操作库)和 GdkRGB(允许高性能显示 RGB 图像的 API)一起集成在 gdk-pixbuf 中,gdk-pixbuf 是一个图像加载库,它解决了 Imlib 的问题并添加了诸如抗锯齿和高质量渲染等功能。
GNOME 1.0 包括 libart 和抗锯齿画布,但使用不多,并且抗锯齿画布被标记为不稳定。将来,GNOME 将更多地使用 libart 和抗锯齿画布。新的 GNOME 面板和 GNOME pixmap 小部件已经使用 libart 和 gdk-pixbuf 来提供抗锯齿图标。
Glade 是一款 GUI 设计器,目前已在许多新的 GNOME 开发中使用。通常,Glade 将生成源代码来构建您创建的界面。但是,使用 Glade 的真正革命性和有用的方法是与 Libglade 结合使用。
Libglade 是一个库,它将加载保存的 Glade 项目并为您构建界面——即时。这意味着您可以想象为不同的语言、应用程序模式或主题使用不同的界面文件。它还赋予用户最终的自定义能力,因为可以在没有任何编程技能的情况下修改应用程序的界面。
各种 GNOME 应用程序现在都使用 Glade 设计,这大大缩短了它们的开发时间。它易于原型设计、易于自定义且易于扩展。快乐已经到来。
UNIX 打印既是祝福也是诅咒,虽然它可能很灵活,但它一直很难设置,并且在非 PostScript 打印机上的输出质量通常很低。此外,大多数应用程序甚至不包含打印支持,因为没有方便、统一的 API 可用于在 UNIX 上打印。GNOME Print 是一个库,它允许开发人员轻松地将打印功能添加到他们的应用程序中,并允许用户通过一致的图形界面快速轻松地访问所有输出参数。
GNOME Print 成像模型基于 PostScript,具有两个扩展:抗锯齿和透明度。请注意,我说的是“基于 PostScript 的成像模型”,而不是 PostScript。您拥有相同的成像模型,但是您的打印方式是使用导出到您喜欢的语言的 API。
目前,GNOME Print 包括 PostScript 驱动程序、屏幕驱动程序(用于进行预览)、元文件驱动程序(用于存储打印信息、传输信息以及在缩放上下文中渲染信息)和通用 RGB 驱动程序(我们将在此基础上构建每个打印机的实际打印机驱动程序)。
正如您可能期望的那样,我们确实重用了我们的技术。画布中使用的光栅化引擎与用于屏幕预览和光栅化本机打印机驱动程序输出的光栅化引擎相同。如果您有兴趣研究本机驱动程序,我们绝对欢迎您的帮助。
GNOME 项目并没有固步自封。虽然 1.0 版本系列满足了对 UNIX GUI 的基本需求,但现有实现的部分需要改进,以及现代桌面上必不可少的附加功能。
同时,GNOME 1.0 API 仍将通过兼容性库提供支持,以便现有源代码到新库的迁移将是轻松的。这将使开发人员能够专注于应用程序开发,而不必担心遵循 GNOME API 的更改。
文件管理器正在被完全重新设计。新版本将具有异步、网络透明的虚拟文件系统,该系统可从所有应用程序独立于文件管理器使用。这将使具有网络感知能力的应用程序变得容易,并且将使网络管理变得轻而易举。这种与传统的非异步虚拟文件系统库的进步相比,允许图形应用程序具有更好的响应能力。
除了文件管理器之外,桌面的另一个高度可见的部分是面板。它是放置图标以启动应用程序、访问应用程序菜单、管理打开的窗口以及运行显示机器状态、播放 CD 或显示时间的小型实用程序应用程序的地方。我们认识到人是不同的,不同的人喜欢以不同的方式工作。这就是为什么面板是高度可定制的,并且这种自定义在新版本中得到了极大的扩展。面板支持许多新的和不同的操作模式。首先,您可以根据自己的品味和屏幕尺寸选择面板的尺寸。还有新的模式可以将面板放置在边缘的任何位置,甚至屏幕上的任何位置。此外,面板上的所有图标现在都是抗锯齿的,外部小程序有能力为其显示使用抗锯齿。许多其他较小的添加使面板更易于配置和更易于使用,并使您的 GNOME 体验更加愉快。
GNOME 即将到来的另一个显着改进是 GConf,这是一个新的配置 API 和后端。这将添加 GNOME 1.0 中简单配置 API 未提供的功能。它将使插入实际存储的不同后端变得容易,因此您可以更改数据的实际存储方式和位置,而无需接触应用程序本身。
由于许多 GNOME 应用程序使用 CORBA,因此需要一个框架来定位和激活这些应用程序。OAF(对象激活框架)提供了一种简单的方法来查找和运行计算机系统上可用的 CORBA 对象。支持分布式操作,允许在 GNOME 桌面中使用的计算机网络上激活对象。OAF 的灵活性使其可以在 GNOME 程序之外使用,从而允许非 GNOME CORBA 应用程序与 GNOME 应用程序一起使用。
支持各种人类语言是一项复杂的任务,不是因为困难,而是因为人类在过去几千年里提出了广泛的交流系统。
由于我们在 GNOME 项目中的目标是增强用户的能力并让他们有机会运行自由软件,因此我们必须确保地球上的每个人都可以使用他们的语言使用我们的工具,并且我们所有的应用程序都可以被所有人使用。
Gtk+ 是 GNOME 和各种 GNOME 应用程序使用的工具包。由 Owen Taylor 和 Tim Janik 领导的 Gtk+ 团队正在朝着 Gtk+ 1.4 版本稳步迈进。
Gtk+ 1.4 的主要亮点包括无闪烁绘图、更好的国际化支持(通过 Pango)以及 BeOS 和 Win32 端口的集成。
针对 Gtk+ 1.4 和 GNOME API 编写的应用程序将可移植到 Windows 和 BeOS。(请记住,GNOME/Gtk+ 应用程序与称为 Gdk 的窗口系统层对话,该层独立于 X11。这就是为什么将它们移植到其他架构很简单。)
为您带来 GNOME 的人是程序员,大多数不是图形设计师。他们没有制作最佳用户界面所需的所有经验。编写好的用户界面很难,我们正在努力解决这个问题。GNOME 用户界面团队负责通过研究当前应用程序的失败之处并借鉴其他应用程序和系统的优点来重新设计各种 GNOME 应用程序的外观和感觉。
GNOME 是 GNU 项目的一部分,它是自由软件(有些人称之为开源软件),由人民为人民创建。我们希望制作能够赋予用户各种自由的软件。
它不是由一些大型匿名公司拥有的软件。因此,您是最有资格为改进它做出贡献的人。虽然非常欢迎编程方面的帮助,但您无需能够编程即可提供帮助。文档、翻译、网站维护、打包和图形设计只是人们已经在做出贡献的众多领域中的一小部分。如果您不喜欢 GNOME 的某个方面并希望改进它,或者想要添加一个全新的功能,那么实现这种改变的方法就是开始贡献。
您可能会认为您可以做出的任何贡献都不重要,但是如果很多人做出小的贡献,结果是正在取得的进展会大大增加。您为 GNOME 所做的努力将继续使普通用户可以轻松访问 UNIX 的强大功能。
George Lebl (jirka@5z.com) 是加利福尼亚州圣地亚哥的独立顾问。他从早期就参与了 GNOME。
Elliot Lee (sopwith@redhat.com) 是 Red Hat 软件公司 Red Hat 高级开发实验室的程序员。
Miguel de Icaza (miguel@gnu.org) 是 Helix Code, Inc. 的程序员。