钝评《Wayland 真的毁掉一切了吗?》及其他

这是(我)之前在 linux.cn 的一篇文章留下的评论。出于存档目的在这里贴一份。

评论原文

Xorg 当然年久失修,因为 freedesktop (i.e. Redhat, i.e. IBM) 有意抛弃了它,强推所谓更安全(同时也更无法使用的)Wayland。Xorg 不是没有来自 BSD 的维护者,FreeBSD 还在给 consolekit 打补丁(这样就可以在没有 systemd 的情况下启动 X server,而 systemd 是 Pottering/RedHat/IBM 制造出来的另一个臃肿怪物和巨大烂摊子),OpenBSD 搞出来另一套 non-root X 的方案。如果 IBM 能把它的 EEE 美梦——一个 UNIX = GNU/glibc/systemd/Linux 的 brave new world——放到一边,认真维护一下 Xorg 和 consolekit,以它的体量,这很难做吗?

退一步讲,就算 Xorg 已经不可拯救,Wayland 也远远谈不上是那个救世主。除了老生常谈的兼容性问题(FreeBSD 上用 Wayland 是靠一些兼容层魔法,NetBSD 为了用上 Wayland 做了一些工作,但是提交上去的 patch 上游也是爱搭不理)Wayland 的很多设计从一开始就有问题,而且也不是所谓的 “随着时间推移都会好起来的” 的那种。

  1. 合成器大包大揽干了太多的活。Wayland 合成器 = X server + compositor + window manager。这导致许多在 Xorg 窗口管理器开发中不是问题的事情在 wayland 合成器开发中都成了问题,其中最臭名昭著的应该就是输入法问题(对我们中文用户来说尤甚)。放在 Xorg 时代输入法不是 wm 该管的活,因为 X server 已经把 XIM 处理好了,但是开发 wayland 合成器就得也把输入法也搞定。更糟糕的是这对于应用程序来说也是如此:如果你不用 gtk/qt 这种 toolkit 开发 wayland native 的图形应用,你就得自己写输入法实现。这真的正常吗?

  2. 协议有意无意留下了大量的空白给具体实现。这在客观上制造了大量的兼容性问题。依旧拿我们刚刚提到的输入法问题做例子。wayland 下的输入法实现法案千奇百怪,gnome mutt,kde,wlroots 和 weston 用得都有些不同,到了应用程序层面就更是五花八门了,像 Chrome 系浏览器在 wayland 下输入法无法正常使用就是这个造成的。而这不光光是输入法,录屏,截图,xdg-portal 都是各有各的实现。当然了,Gnome 和 KDE 这两个背靠大公司的桌面都是把自己的各种桌面法案整得好好的(事实上也不是),不客气地讲,协议中留下的各种空白就是给 IBM 做各种技术壁垒的(EEE 策略中的 Extend)。

顺带一提,Wayland 也有 10 多年历史了,wayland 支持者都在说 wayland 未来可期。请问我还要等几个十年来让 wayland 像 Xorg 一样功能繁多且正常工作?一句凯恩斯的话送给我和大家:长远来看,我们都死了!

多余的话

事实上我不讨厌 wayland,就想我不讨厌 Xorg 一样。或者说我不喜欢 wayland 就像我不喜欢 Xorg 一样。Wayland 也不是无法挽回,毕竟还有 wlroots 在。退一步讲,D-bus 和 (e)logind 我也捏着鼻子用了嘛……