关心linux平台上的开发者不妨看看这一段:
构件编程
很长时间以来, 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 远比设想的困难.
我们尝试使用施乐的 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激活的)内部进程通讯是一项有价值的服
务, 而不只是一个杀手或者 "黔之驴" .