Chinaunix首页 | 论坛 | 博客
  • 博客访问: 253053
  • 博文数量: 89
  • 博客积分: 4246
  • 博客等级: 上校
  • 技术积分: 2184
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-16 09:55
文章分类

全部博文(89)

文章存档

2013年(1)

2012年(17)

2010年(10)

2009年(58)

2008年(3)

我的朋友

分类: LINUX

2009-01-09 11:08:00

GNOME 计划(一)

By Miguel de Icaza 翻译:Zou hongbo

GNOME 是 GNU 网络对象模型环境 ( GNU's Network Object Model Environment ) 的缩写. GNOME 提出了一系列 UNIX 世界中没有的观点:

  • 提供一个统一的用户界面
  • 提供用户友好的工具, 以 UNIX 为基础, 更强有力
  • 产生一个组件编程和组件重用的标准
  • 提供一个统一的打印机制.

GNOME 的主要目标是提供一组用户友好的应用和一个易于使用的桌面环境. 同大多数 GNU 的应用一样,GNOME 设计成可以在几乎全部的类 UNIX 操作系统中运行.

GNOME 的历史

GNU GNOME 计划是在 1997 年 8 月首次宣布, 之后经过大约一年的开发, 在整个世界范围内估计有二百名程序员参与了这个计划(的开发工作).

最初召集开发者的通告通过多个讨论组规划了 GNOME 计划:GNU announce mailing lists; Guile
mailing list; and the GTK+ and GIMP mailing lists. 对(本)工程产生影响的主要是不同领域中, 具备专业特长, 热心于自由软件的人们, 包括图像处理和语言设计等.

GNOME 工作组坚定地工作, 为未来的自由软件开发建立一定的基础. GNOME 提供工具箱和可重复使用的组件, 以构造最终用户迫切需要的自由软件.

我们最近发行的版本是: GNOME 0.20, 第一个展示了整体印象的版本, 于 1998 年 5 月 发行. 然后是版本 0.25 -- "垂涎三尺的恒河猴 Drooling Macaque", 有了更多特色. 目前最新的公开版本是 GNOME 0.30, 命名为 "巨大的黑猩猩 Bouncing Bonobo".

GNOME 0.20 是第一个通过 CDROM 发行的版本: Red Hat 5.1 随带了一个专门的 GNOME 桌面环境预览版, 在北卡罗莱纳的 Linux 博览会上首次出演.

在 "Drooling Macaque" 版本之前, GNOME 软件发行工作是由小组中的两三个人协调. 这越来越成为一个显著的负担, 因为宝贵的时间被用来协调组织每一次发行工作. 我们已经尝试着使发行工作更加模块化,对不同的软件包指定了维护者. 每一个(软件) 包维护者负责打包, 测试和发行, (他们的工作)独立于主干部分. 我们设想主干部分应该是核心库和桌面应用的核心部分. 到目前为止, 我们获得了一些成功,但依然存在改进的余地. 我们将继续努力地"打磨"发行工作, 让(它)更简单.

在最近的 GNOME 版本 "Bouncing Bonobo" 中, Gnumeric, 一个 GNOME 的电子表格软件首次出现.

Red Hat 高级开发实验室

1998 年 1 月, Red Hat 宣布成立 Red Hat 高级开发实验室(RHAD). RHAD 的首个目标 是通过提供代码和程序员来帮助 GNOME, 同时协助管理工程资源.

由 RHAD 向 GNOME 提供的所有代码都是基于 GNU GPL 和 GNU LGPL 许可声明. 数个 GTK+ 和 GNOME 的开发者已经为 Red Hat 雇佣, 他们已经迅速地在 GNOME 的几个重要方面作出了贡献.

例如, Rasterman 已经实现了 "themes for GTK+"; "GTK+ themes" 允许用户改变 widgets 的外观. 这是通过将 widget 绘图例程从工具箱中抽象出来, 并放入可以 在运行时才调入的模块中实现. 因此用户可以直接改变应用的外观, 而无需关闭他们或 重新打开桌面.

GTK+ themes 充分可用, 已经有了许多实现. 在书写这篇文章时, 可用的(外观) 主题包括 Motif,Windows95, Metal, native-GTK+ 和基于位图驱动的一般应用. (具体请查看 "资源" 部分)

GNOME 所需要的GTK+ 工具箱的多种重要改进, 例如菜单中键盘导航代码和增强的 ``Drag and Drop''协议 (XDND 和 Motif DND), 是由 Owen Taylor 完成, 一个著名 的 GTK+ 黑客, 他现在为 Red Hat 实验室工作.

目前 GNOME 各种应用也由 RHAD 产生或维护: 如 the Ghostscript front end (Jonathan Blandford),the GNOME Help Browser 和 the GNOME RPM interface (Marc Ewing 和 Michael Fullbright), the GNOME Calendar 和 GNOME Canvas (Federico Mena) 及 the ORBit CORBA 2.2 实现 (Elliot Lee).

其他捐助者

GNOME 计划早期的主要资金捐助者 GNU/Linux Debian 工作组, 同时 Alpha 布告栏 是由 Quant-X Service 和 G.m.b.H 提供帮助. 对他们的贡献, 我们在此表示深深地谢意.

一些关键的 GNOME 技术特征

GNOME 库提供了一个框架结构, 用于开发统一的应用和简化编程者的工作. 今后将会描述更多的技术特征. 下面将讨论一些目前开发中的 GNOME 库的技术特征.

Metadata(元数据)

一个问题是在桌面环境中常常需要一种机制 -- 存放一个文件的属性信息. 例如, 应用也许需要为某一种特定的执行文件帮定一个图标, 或者为一个由图像文件产生 一个略图. 这些图标附属于主文件.

Macintosh OS, 例如, 他提供了一种方式将这些信息存放于 "资源分支" 文件中. 这种机制在 UNIX 环境中实现有些尴尬, 主要原因是那些"非元数据敏感"的应用 会与元数据(metadata)信息失去同步.

GNOME metadata(元数据) 由 Cygnus 的 Tom Tromey 实现, 给出了设计约束和协调. (在他们的网站上有详细描述). 下面是 GNOME metadata的特征列表:

1.每一个用户拥有自己对每一个文件的信息描述, 由自己管理. 系统在这之上提供缺省描述.
2.绑定信息根据文件特征决定, 正如 UNIX 命令 file 所做的一样.
3.可以使用正则表达式识别一类文件:例如, 正则式 *.\.gif$ 表示 gif 文件, 从而给它们一个缺省图标.
4.元数据系统可以充分, 紧密地与 GUI 方案配合, 而不仅仅是当前的命令行的组合.
5.大多数常用的文件可以继续运行, 无需元数据系统, 正如(它们)目前的状况.

现在, GNOME 已经有了大量的标准(元数据)文件属性. 例如, "View" 存放一个查看文件内容的动作; "Open" 存放类似编辑的动作; "Icon" , 它包括一个图标, 用来在桌面上显示该文件.

GNOME 计划(二)

元数据类型属于 MIME.

Canvas(画布)

GNOME 提供了一个 Canvas(画布) widget, 它以 Tk 中出色的 Canvas 为原型. 这个 widget 简化了那些
需要控制图象属性应用的工作. GNOME Canvas 最引人注目的特点是它提供了一个平滑的绘图区域, 在其上可
以无抖动地插入和调整高级对象. 基本的放缩和滚动功能也是 Canvas(功能)的一部分.

插入到 Canvas 中的高级对象如同普通的 Widget 一样, (他们)可以收到 X 事件, 可以获取(输入)焦
点, 可以获取鼠标等等. 与 Tk 中的(Canvas)类似, GNOME 中 的 Canvas 可以在运行期间使用类似 Tk 中的
机制改变它们的属性.

GNOME Canvas 带有许多衍生自 GnomeCanvasItem 对象的东西: 直线, 矩形, 椭圆, 箭头, 折线, 及一个
可以嵌入 GTK+ Widgets 的 Widget 容器. Canvas 的设计框架易于扩展. 可以证明它的扩展性的一个证据
是, GNOME 的电子表格 就是以 Canvas 为核心驱动, 然后加以附加的, 电子表格特有的 CanvasItems.

注意, 当前 Canvas 使用 Gdk(一个对 Xlib 的简单包装)来绘图, 因此(图像的)质量和 特效局限于(这
些工具), 下面是一些增强(这方面功能)的工作.

Raph Levien 正在为 Canvas 制作一个高级渲染驱动. 最初, 在他的 Type1 外廓字体编辑器 gfonted 中
作为一个独立的 widget 出现, 在我写这篇文章时, 与 Canvas 整合的工作已经开始了.

这个驱动的特点包括(以下为术语, 望专家级的网友帮助):

Anti-aliased rendering of all items
Alpha transparency
Items for vector and bezier paths
Items for RGB and RGB plus alpha images
Vector operations, including clip (intersect), union, difference and stroke layout
PostScript Type1 font loading and rendering

这个驱动的设计目标是支持大多数 PostScript (alpha transparent)图像模型. 如此, 希望它是高质量
图像应用的一个良好起点.

尽管有着实现所有的 anti-aliased 和 alpha-composited 特性的野心, 它的性能还是 不错, 可以与使
用 原始 Xlib 驱动的 Canvas 相比.

他的代码将尽快地融合入 Canvas 主要代码.

独立于窗口管理器

GNOME 不依赖于任何一个特别的窗口管理器 -- 任意一个目前的窗口管理器都可以. GNOME 为窗口管理
器制定了提示, 窗口管理器实现(它们)可以给予用户更好的融合入桌面 的感觉,但是这些(提示)不是必须(实
现的). E 窗口管理器实现了所有的 GNOME 提示, 那些想扩展他们的窗口管理器, 实现 GNOME 兼容的人们可
以参考(E 窗口管理器). ICEWM 管理器一直在追从那些开发工作, 它也是一个 GNOME 兼容的窗口管理器, 虽
然, 它现在有点滞后. 人们希望 WindowMaker 和 FVWM2 的维护者能够提供 GNOME 兼容的补丁.

构件编程

很长时间以来, UNIX 有一个诱人的理论, 那就是设计小的工具, 每一个只作好一件事, 而将他们组合起
来, 只使用管道和简单的 shell 角本, 就可以完成复杂的工作. 当数据 对象是一般文本和作过滤操作时,
这种机制工作得极好. 但是, 这种基于命令行的理论 却不能更好地适应当前的多媒体对象.

因此, GNOME 最好能够建立一种可以架构, 可以使软件重用和构件联结, 相互作用, 例如, 将小的专业
工具联结起来完成复杂的工作. 有了适当的基础框架, GNOME 应用就可以重温 UNIX 那种简单而专业的工具
的理论了.

为了提供这类功能, 一个 RPC(远程过程调用)系统是需要的. 所以, 我们决定使用 CORBA (the Common
Object Request Broker Architecture), 它来自 the Object Management Group (OMG). CORBA 可以人为是
一个面向对象的 RPC 系统, 它正巧有着各种语言的标准实现.

CORBA 向我们展开了一系列的应用. 构件编程允许我们将程序和共享库组织 成为一个程序服务器, 以实
现一个特定的(应用)界面.

举例来说, GNOME 邮件程序, Balsa, 实现了 GNOME::MailMessage 界面, 它(界面)允许任何
CORBA-aware(能识别CORBA)的应用远程编写和定制一封邮件, 然后发送它. 这样就可以使用任何实现了
GNOME::MailMessage 界面的程序替代(专门的)邮件程序. 只要安装了 GNOME 桌面, 进程只需实现
GNOME::MailMessage 界面(调用)即可. 这意味着, 例如, 我可以继续使用 GNUS 去读我的邮件, 可以使 GNUS
完全融合到我的桌面中. 同时(这种功能)也提供给 其他的 GNOME 构件: 地址簿, 文件管理器, 终端仿真器,
帮助浏览者, 办公应用等等.

除了提供 GNOME 基本界面外, 应用可以可以实现他们自己的特定界面. 这是通过 COBRA 的界面继承性
做到的. 一个特定界面可以衍生自较普通的界面. 例如, GNUS 可以实现 GNOME::MailMessage 界面, 然后扩展
为 GNOME::GnusMailMessage, 带有一些 GNUS 自己的特色. 设想一下, 这个界面允许用户在用 Lisp 定制, 而
其他一些邮递者则不能. 另外一个例子是, GNOME::MozillaMailMessage 界面允许用户配置 Mozilla 邮件程序
中的 HTML 实现.

COBRA 不仅仅只是完成这些工作, 它还可以作为内部进程之间的通讯引擎. 无需发明一种新的内部程序
通讯系统, 一个 COBRA 界面就可以做到.

将一种文档嵌入到其他文档的方式随着微软的对象联结与嵌入体系结构已经越来 越普及. 一套 GNOME
文档嵌入模型正在被设计(Baboon模型), 这个模型中所有 的内部进程通讯是使用 COBRA 界面描述.

起初, 我们为 COBRA 呈现出的可能性感到兴奋, 但是我们很快意识到在 GNOME 桌面中使用 COBRA 远比
设想的困难.

GNOME 计划(三)

我们尝试使用施乐的 ILU COBRA . 那时(它的)许可证还不允许修改代码和重新发布. 对于自由软件群体
来说, 这可是一件重要的事, 所以我们必须寻找替代产品. 施乐因此改变了许可证策略.

在试用了几种不同的免费 COBRA的实现后, 我们选定了 MICO, 因为它是实现 COBRA 特性最全的一个.
MICO 设计为 COBRA 的一个教学工具, (因此)其清晰的编码是它的主要特点.

很不幸, 我们很快发现 MICO 不是一个产品质量级, 适合于 GNOME 的工具. 其中一点是, 我们发现, 相
当杂乱的 C++ 模板使用(同时存在于 MICO 和生成的接口) 浪费了大量的资源. 编译一点 GNOME , 即使使用
了最简单的 COBRA, 竟然也需要 48MB 内存, 这减慢了我们的开发速度. 另外一个问题是 MICO 只支持 C++
语言. 虽然在开始时期曾经尝试提供 C 语言帮定, 最终并未完成和很好的维护.

为了解决这些问题, i2it 的 Dick Porter 和 Red Hat 实验室的 Elliot Lee 写了一个称作 ORBit 的
基于 C 的, 瘦型快速的 COBRA 2.2 实现版本. 一旦 ORBit 开始稳定, 贯穿于 GNOME 的 COBRA 的运用便开
始了, 不过已经 差不多耽误了 8 个月.

正是有了一个高效的, 产品质量级别, 由我们控制的 COBRA 的实现版本, 我们能够保证对应用开发者来说,
COBRA-enable(COBRA激活的)内部进程通讯是一项有价值的服务, 而不只是一个杀手或者 "黔之驴" .

仔细剖析一个 GNOME 桌面应用

工具包

GNOME 桌面应用建立在面向对象的 GTK+ 工具包中之上, GTK+ 工具包原来是设计为 GNU 图像制作程序
(GIMP)的 GUI 工具包.

GTK+ 的实现是基于一套简单的窗口和绘图 API , (它)被称为 Gdk(GTK 绘图包). 最初的 Gdk 版本完全
是一套 Xlib 的简化包装, 但是最近向 Win32 和 Y 窗口系统的移植正在 alpha 测试阶段.

GTK+ 使用 C 实现了一个对象系统. 这个对象系统具有相当丰富的功能, 包括标准的单继承, 动态产生
新的方法和类, 和一个"信号"机制 -- 它可以动态地将用户界面上发生的不同事件与处理(函数)联系起来.
GTK+ 一个巨大优势是它具有广泛地(编程)语言支持, 包括 C++, Objective-C, Perl, Python, Scheme 及
Tom. 在使用 GTK+ 和编程生成新的对象时, 我们有着众多的选择.

GNOME 的一个附加的特点是 Rasterman 的 Imlib 库. 它是和 Gdk 平行生成的, 提供了一个快速而灵活
的存取图像, 并在屏幕上绘出的界面. 使用 Imlib 的应用 可以快速地, 直接地处理 PNG, GIF, TIFF, JPEG
and XPM 文件, 使用外部的转换过滤器处理其它格式(的文件).

支持的库

基于 C 的 GNOME 应用使用 Glib 实用库. Glib 提供给 C 编程者一套有用的数据 结构: 链表, 双链
表, 哈希表(一对一映射), 树, 串操作, 内存块重用, 查错的宏, 断言和流水记录便利函数. Glib 也包括了
一个可移植的, 动态模块界面.

GNOME 库

GNOME 库加入了为产生完整的应用而工具包中缺少的部分, 规定一些策略, 帮助 产生统一的用户界面,
还有本地化 GNOME 以在不同的国家地区使用.

当前的 GNOME 库是: GTK+-xmhtml, gnome-print, libgnome, libgnomeui, libgnorba, libgtop,
gnome-dom and gnome-xml. 其他库是为特定的应用使用: libPropList (很快将被一个新的配置引擎替代)和
音频文件.

主要的非图像类库是 libgnome. 它提供函数跟踪最近使用的文档, 配置信息, 元数据处理(见下面), 游
戏积分功能和命令行参数处理. 这个库的使用无需一个窗口系统.

由于我们使用 COBRA 来部分完成桌面的融合, 因此提供一个特殊的库去处理不同的 COBRA 主题, 它被
称为 libgnorba. 它提供了 GUI/COBRA 整合 (让我们的 GUI 应用表现为服务器), 在 GNOME 框架内的认证,
和服务激活.

gnomeui 库, 则正相反, 需要一个窗口系统才能运行. 它包括如下分支:

GNOME 对话管理支持
Widgets, 包括 GTK+ 的直接扩展和设计成独立于 libgnome 的部分
一套标准对话框, 不同于 GTK+ 中的, 与其他 GNOME 库很好地集成
标准属性配置对话框
标准顶层窗口处理
多文档界面(gnome-mdi)
窗口提示
需要 CORBA 整合的地方

GTK+-XmHTML 是对 Koen D'Hondt 的 XmHTML widget for Motif 的移植, 被用来实现我们的 HTML 显示
需要. 我们所做的改变已经融合入主放行包中.

gtop 库允许系统应用轻松地向不同的操作系统移植; 它提供系统, 进程和文件系统信息.

gnome-xml 使 GNOME 应用能够加载, 分析, 保存 XML 文件, 它用在 GNOME 的电子表格 (Gnumeric) 和
GNOME 的文字处理程序中. gnome-dom 是为 GNOME 应用实现了 World Wide Web 组织的文档对象模型. 当
你在阅读这篇文章时, gnome-dom 已经在 GNOME 办公类应用中广泛地运用. gnome-xml 和 gnome-dom 都是
由 World Wide Web 组织的 Daniel Veillard 开发的.

gnome-print 实现了 GNOME 的打印体系结构. 它包括一个插座式的描述引擎, 以及一套 Widgets 和选择
及配置打印机的标准对话框. 另外, gnome-print 负责管理轮廓字体, 也包括自动搜索系统中已经安装字体
的脚本.

GNOME 打印成像模型仿照 PostScript. 基本操作包括矢量和 B 样条路径诠释, 平滑, 填充, 剪裁, 文
字(使用 Type1 字体, 不久加入 TrueType)和图像.

GNOME 计划(四)

当前, gnome-print 只能生成 PostScript 格式输出. 但是图像模型的设计最终将 与画布的
anti-aliased 描述引擎同步. 这两个模块将期望能够协同工作. 特别地, "打印"到一个画布中是可能的, 这
对于高质量的屏幕预览是有用的, 也将 实现打印一个画布的内容. 这个特性将简化使用画布应用的设计, 只
需要增加一点 额外的代码去支持打印.

同一个描绘引擎将用来描绘打印页, 直接地, 无需经过 PostScript 这一步. 这条捷径是令人振奋的,
对于那些向彩色喷墨达因机进行高质量, 高性能打印工作, 即使是复杂的页面, 包括透明物体, 倾斜, 和其
他在商业类 PostScript 图像模型 中认为是"需要技巧"的元素.

帮定(程序设计语言)

GNOME 一个清楚的目标是支持广泛的设计语言支持, 因为很明显不可能存在一种语言 对于每一个应用都
配合地天衣无缝. 为此, GTK+ 和 GNOME 库提供了许多种设计语言 的帮定, 目前有 C, C++, Objective-C,
Perl, Python, Scheme 和 Tom.

早期的帮定 Scheme, Tom 和 Perl 到 GTK+ 和 GNOME 工程的复杂工作使 GTK+ 和 GNOME 的 APIS 易于
向其他不同语言移植. 多设计语言支持在 GTK+ 和 GNOME 的 设计过程中就已经是再三考虑的事, 而不是"亡
羊补牢"之计.

开发模式

GNOME 是由世界范围内的几个松散的开发者小组进行的. 工程的协调工作是通过 不同的 GNOME 邮件列
表进行的.

GNOME 源代码保存在 GNOME CVS 服务器(cvs:cvs.gnome.org:/cvs/gnome/). 使用 Netscape 的 Bonsai
和 LXR 工具()可以得到 源代码, 帮助程序员熟悉 GNOME 代码基础.

许多贡献过代码, 修正过主要 BUG, 和 GNOME 文档的书写者对 CVS 有写的权限, (大家)共同养育了一
种非常开放的氛围. GNOME 开发者有着不同的背景, 不同的技巧 和经验水平, 有时缺少经验的人们能够给予
令人吃惊的帮助, 年长的, 更富智慧的 编码者乐于提携组中的年轻人. GNOME 开发者社区重视干净的, 可维
护的编码. 甚至有着多年编程经验的程序员也说 GNOME 工程帮助他们写出了更好的代码.

GNOME 办公应用套件

随着 GNOME 基础库的更加稳定, 开发大程序工程也具备了可能性, 也允许各个开发小组将他们的应用整
合起来, 组成 GNOME 办公套件.

随着 GNOME 构件的整合, GNOME 办公套件正在追上商业类软件. 通过提供一个 坚固的, 快速的, 基于
构件的办公套件, GNOME 工程也许会成为自由软件开发 进程中一个新纪元的开端.

GNOME 办公套件的不同构件的开发在过去一年中赋于了我们中许多人大量的知识. 我们的编程水平提高
了,编码质量提高了, 编码更清晰, 更健壮了.

这些应用也提供给我们测试的温床, 使我们得以完成文档嵌入界面(Baboon 模型)。

有两个字处理项目正在进行: 一个是 GWP, 由 Hungry Programmers 的 Seth Alves 负责; 另一个是
Chris Lahey 的 GO. GWP 目前领先一些, 已经可以和 GNOME 中 的打印框架协同进行打印工作.

Gnumeric, GNOME 电子表格项目, 目标是提供一个带有更先进特性, 商业软件级别 的电子表格. 它提供
了一个舒适的, 强大的用户界面. 为了同 GNOME 的其它构件 协同工作, 我们将继续工作希望能够为未来的
开发提供一个坚固的, 可扩展的框架.

最近, 启动了 Acthung 项目, GNOME 介绍(presentation)程序. 它依然处于早期 开发过程中.

获取 GNOME

经过测试的源代码可以从 GNOME 的 ftp 站点下载: ftp://ftp.gnome.org/.

也可以从匿名 CVS 服务器得到最新的 GNOME 开发中的代码. 查看 GNOME 的 主页以获得如何直接从
CVS 服务器得到最新版本的方法.

关于 GNOME 的新闻将发布在 GNOME 主页 还有关于 如何运行 GNOME 和如何
开发 GNOME 应用的文档.



答谢

在这里, 无法向每一位为 GNOME 工程做过贡献的人表达谢意, 只能向所有的捐助者 表示深深的感谢.

我特别向 Alan Cox, Nat Friedman, Raph Levien 和 Richard Stallman 表示感谢, 他们花时间审阅了本文
档的草稿.



资源

bonobo: GNOME 工作组获悉 Bonobo(倭黑猩猩), 与人类血缘最近的灵长类 动物, 正面临绝境. 如果你想知
道如何帮助倭黑猩猩, 查看这个主页: ~wwwbpf/bpf/

GIMP:

GNU:

GTK+:

GNOME:

Gnumeric: gnumeric/

gnome-print:

GWP:

OMG:

ORBit:

RHAD:

Themes: themes/

Tom Tromey: ~tromey/gnome/metadata.html

Y:

 

阅读(1403) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~