在* nix系统上是否有相当于COM的东西?如果没有,那么* nix的可重用性方法是什么?

时间:2010-06-17 15:52:41

标签: linux unix architecture com

我了解Windows COM及其背后的想法。我试图了解* nix系统是否具有等价物或为什么不具有等效物?

3 个答案:

答案 0 :(得分:37)

Unix模型是围绕轻量级进程的思想构建的,这些进程通过套接字,管道,信号和命令行相互通信。从历史上看,Unix没有线程(POSIX线程模型只有10年左右的IIRC),但Unix上的进程总是比在Windows上便宜得多,因此将功能分解为单独的可执行文件比使用单一计划,以发展大型和单片。

在COM中,您可以定义允许共享内存通信的二进制接口。 COM与面向对象的范例联系在一起。在经典的Unix模型中,您可以定义面向流的接口,允许通过管道进行通信,而无需共享内存。从概念上讲,这更接近功能编程范例。

Unix模型鼓励制作可以通过轻量级“shell”轻松耦合在一起的小程序,而COM模型鼓励制作大型程序,以暴露可被其他大型程序重用的“组件”。这真的是苹果和橙子的比较,因为这两种模型都为不同的场景提供了好处和缺点。

当然,现代Unix系统可以拥有类似COM的设施。 Mozilla拥有XPCOM,这是一个基于与COM相同原则构建的跨平台框架。 GNOME很长一段时间都使用了Bonobo,它在概念上非常类似于Microsoft OLE,它是COM的先驱。但最近版本的GNOME已经从Bonobo转向支持D-Bus,这更像是一种事件/消息模式。

答案 1 :(得分:28)

最接近的可能是D-Bus。 D-Bus是一个轻量级的IPC协议和对象请求代理(ORB),非常类似于COM,受COM和D-Bus的前身DCOP(KDE)和CORBA(GNOME)以及Netlink(Linux内核)。

在D-Bus之前,两个主要的Unix桌面环境都有自己的组件模型和桌面总线。 GNOME有基于CORBA的Bonobo,KDE有基于DCOP的KParts。 Linux内核具有Netlink,它是内核和用户空间之间的通信协议,只要您配置网络接口,就可以使用iproute2工具。

内核开发人员不断要求释放Netlink作为用户空间程序之间通信的独立部分,但他们担心这会导致功能膨胀和维护问题。最后,在Free Desktop组织的保护下,其目标是创建跨桌面标准,KDE和GNOME开发人员共同开发基于DCOP和Netlink最佳部分的IPC消息系统,结果是D-Bus。

在GNOME和KDE的当前版本中,D-Bus已经完全取代了CORBA和DCOP,因此可以在KDE中运行GNOME应用程序,反之亦然,具有更高的保真度。 D-Bus也被许多其他桌面环境和应用程序所采用,不仅在Linux上,而且在其他Unix系统,以及OSX甚至Windows上。

至少应该提到的另一种选择是Mozilla的XPCOM,它是一个受CORBA和COM启发的跨平台对象模型。 (事实上​​,XPCOM是跨平台组件对象模型的首字母缩写。)它使用与CORBA非常相似的IDL,称为XPIDL。然而,据我所知,没有人真正使用XPCOM,它被评论家以及Firefox和其他Mozilla应用程序的开发人员认为是膨胀的主要来源之一,Mozila开发人员实际上正在积极努力减少使用XPCOM尤其是内部组件,如Gecko。

然而,正如@Daniel Pryden指出的那样,在Unix中已经存在很多已经的东西,在不需要与桌面紧密集成的情况下,它应该比D-Bus更受欢迎。我在谈论管道,命名管道和插座等东西。

答案 2 :(得分:4)

最近的可能是CORBA