为什么GNU/Linux中没有更广泛地使用DirectFB?它是否存在无法在X11中存在的严重限制?

25
据我所知,DirectFB为许多种图形卡提供硬件加速。此外,它比X11更小、更快,且使用的内存更少。那么,为什么它现在还没有更流行呢?
以下是我不确定的事情:常见的GTK+/Qt程序需要被移植到DirectFB吗?在DirectFB网站上,有一个将Firefox移植到DirectFB的项目。如果GTK+能够直接使用DirectFB,这个项目为什么还有必要呢?以我(可能不正确)的理解,Firefox 应该输出到GTK+,然后GTK+再输出到DirectFB,最终输出到硬件。如果我对此理解错误,请纠正我。

1
Firefox并不直接使用Gtk+,它只是使用其主题引擎。 - dmitry_vk
6个回答

21
如果你认为X在现代Linux系统中是一个开销的来源,那么你可能没有找到正确的地方。 X是设计用于比现代手机性能弱得多的计算机,而且已经设计很久了。
如果你查看"top"并看到X使用内存,就需要进行很多工作来确定实际的X开销。有一些内存映射不是“真正”的内存,并且还有资源(如应用程序所分配的大块像素)。总之,在top中显示的X内存并不是人们想象的那样。
人们也会听说X使用“网络”,并认为这将成为性能瓶颈。这里的“网络”是指本地UNIX域套接字,在现代Linux上几乎没有开销。对于可能在网络上成为瓶颈的事情,有X扩展可以使其更快(共享内存像素图,DRI等)。进程内的线程未必比X套接字更快,因为瓶颈主要与协调多个线程或进程访问相同硬件的固有问题有关,而不是与本地套接字的最小开销有关。
多进程设置有很多优点,例如更难崩溃。以Google Chrome为例,使用多个进程来提高鲁棒性 - 结果是运行速度更快。进程越少并不一定意味着更现代。
有许多原因使使用GTK的应用程序无法透明地移植到DirectFB。对于Firefox,一个原因是它有时会直接使用X。此外,一些与工具包无关的东西,如浏览器插件接口,也直接使用X。例如,Flash插件将无法在DirectFB上运行。即使不直接使用X的应用程序通常也会假设正常的基于X的桌面环境存在(如GNOME等)。
替换X的另一个问题是驱动程序支持,在其更好的图形卡(NVidia、ATI)都有专有驱动程序比自由驱动程序更具能力,而这些专有驱动程序与X相关联。
当然,还有迁移路径。如果您有数百个使用X的应用程序,并且没有明显的X端用户缺点,那么没人会切换到无法运行任何应用程序的新系统。最可能的解决方案是在新窗口系统上运行根本无法窗口化的X服务器,以便旧的应用程序仍然可以使用。

老旧并不总是坏的。X由聪明的人设计得非常好,这使得它能够演变和改变并仍然在许多年后工作良好。

总之,换掉X需要很大的努力,它真的运行良好,“运行良好”从来没有适用于任何替代方案(至少如果你想在大多数硬件上运行大多数应用程序)。

有一些问题需要解决,比如不可能进行原子屏幕更新,Wayland项目正在研究这个问题,但大多数问题对用户来说只是表面问题(例如非原子更新),对开发人员来说只是表面问题(老旧的废弃扩展等)。事实并不是丢掉X就可以神奇地得到更小、更快的东西。这主要基于人们猜测“旧的”和“使用网络”一定会很慢和臃肿,但再次强调,X是为真正糟糕的硬件而设计的。我曾经在我的386上顺利运行X(和Emacs!),可能只有8兆字节的RAM或类似的东西。


7
X很糟糕。它没有像应该改进的那样,主要原因在于计算机图形行业中的保密和专利问题。 - Arlen
4
听起来你在谈论开源实现 X 中的实现限制(尤其是驱动程序)。这些限制也适用于 DirectFB。这里的问题并非源于 X 协议/设计/API 与其他可能的设计之间的固有差异,而更多地涉及到(如你所说)“后勤”问题,例如使用硬件的能力。 - Havoc P
2
@HavocP:你忽略了一个重要的细节,即“X是在比现代手机弱得多的计算机上设计的”。 X服务器本身最初并不是为今天的用途而设计的。整个堆栈也不打算完全在单个PC上运行。这解释了整个延迟问题,对可移植性的极端重视以及显着的硬件抽象水平。快进到现在,我们有许多扩展来帮助适应X11的今天的体系结构。从其核心和灵魂来看,它是次优的。 - J. M. Becker
4
我完全同意X不够理想,认为Wayland在X上有很有用的改进并可能最终成功取代它......这并非巧合,因为Wayland的创造者Kristian非常了解X。鉴于现代需求,窗口系统可以进行改进和简化。但是X已经足够好了,所以取代它比看起来要困难得多。 - Havoc P

9
x11不仅仅是屏幕绘制的一种方式,它是一个完整的网络桌面协议套件。DirectFB 并不打算取代 x11(据我所知),而是与之并行运行。换句话说,DirectFB 力求成为应用程序的轻量级“主机”,以获取基本输入和图形输出的访问权限。有可能编写一个 X 服务器(X 中的服务器是显示东西的东西 :-))来使用 DirectFB。

在 DirectFB 上的 GTK 与在 X11 上的 GTK 不同


我明白了,GTK+在不同平台上是有所不同的。然而,我发现DirectFB有很多高级功能,而X11甚至不能执行常见的alpha混合等操作,这是怎么回事? - user377628

7

为什么不使用DirectFB呢?因为它并没有解决任何问题。对于嵌入式系统来说,它还可以,但是对于桌面应用程序,你会失去很多东西,却没有真正获得任何好处。


5

DirectFB是专为内存占用较小的嵌入式系统设计的。它允许应用程序通过直接API直接与视频硬件通信,加速和简化图形操作。

它经常被游戏和嵌入式系统开发人员使用,以避免完整的X Window系统服务器实现所带来的开销。

http://elinux.org/DirectFB


3

X11比DirectFB更具可移植性。 X11应用程序可以在Linux、BSD、Solaris、AIX、HP-UX、MacOS X、Windows(通过Cygwin或Exceed)等许多平台上运行。而DirectFB几乎只能在Linux上运行。


1
使用XDirectFB,可以使用DirectFB来实现无根X服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接