wayland.fyi 极简主义 Wayland 特别兴趣小组
摘要
wayland.fyi 是一个主张简化 Wayland 实现的极简主义特别兴趣小组,该组织批评了 wlroots 等主流库的复杂性,并推崇 neuswc 等轻量级替代方案。
<p><a href="https://lobste.rs/s/qbliwt/wayland_fyi_minimalist_wayland_special">评论</a></p>
查看缓存全文
缓存时间: 2026/05/10 16:53
# wayland.fyi 极简主义 Wayland 特别兴趣小组
来源:https://wayland.fyi/
极简主义 Wayland (https://wayland.freedesktop.org/) 特别兴趣小组 (https://en.wikipedia.org/wiki/Special_interest_group) 的家园。
许多人声称 Wayland“很烂”,本网站的目标不仅是推广和制作符合“极简主义”标签的替代性 Wayland 软件,还要驳斥人们针对 Wayland 提出的许多指控。
## 更小的 Wayland
运行 hevel、hack 和 hst 的桌面环境
Wayland 的核心是一个极其简单的线路协议 (https://wayland-book.com/protocol-design/wire-protocol.html),仅此而已。其默认实现的代码量仅约为 1 万行。真正庞大的是构建**在其之上**的东西,这在主流的 Wayland 实现中通常是某种基于 GLES 或 Vulkan(尽管有时提供 Pixman 后端,但它只是二等公民)的综合器库。引入如此庞大的渲染管线**必然**会导致复杂、混乱的系统,凡人难以理解,或者需要大量的协议扩展,亦或是 xdg-desktop-portal,天知道那是什么。
我们提供了一种替代方案。它可能并不完美,但我们发现,省略“现代”渲染器和一些功能对我们的工作流来说已经足够好了。同样,围绕 freedesktop 的许多混乱状况,仅仅是不实现某些协议或“Wayland”特性就可以被忽略。Wayland.fyi 认证™ 软件列表可在页面底部找到。
## 关于 wlroots 的问题
wlroots (https://gitlab.freedesktop.org/wlroots/wlroots/) 有点烂……但问题出在哪里?
有几点:
- 它很大。甚至可以说巨大。
- 引入了大量设计糟糕且过于庞大的协议扩展。
- wlroots 极度以 Linux 为中心:在没有 udev 的极简 Linux 发行版上很难使其正常工作。
- 静态链接时会导致与 sway 的符号冲突 (https://github.com/swaywm/sway/issues/5514)(公平地说,这是 sway 方面的问题)。
- 由于依赖 udev 且需要座位(seat)管理,它不能在 BSD 上原生运行,需要“兼容性垫片”(即糟糕的黑客手段)。我们的综合器库 neuswc (https://git.sr.ht/~shrub900/neuswc) 可以在所有 BSD 系统上原生运行,无需这些糟糕的黑客手段。
- wlroots 发展迅速且不稳定:像 dwl (https://codeberg.org/dwl/dwl) 这样的业余项目因开发者无法跟上变化而无人维护。
- wlroots 级别较低:这对某些用例很好,但对于希望轻松制作自己综合器的人来说,这确实(非常)痛苦,这就是为什么 Wayland 在这方面的选项比 X 少得多的原因。
一些有趣的讨论和工作,可能会让 wlroots 的糟糕程度减轻不少(虽然并未解决其过度工程化的事实):
- 关于 udev 的讨论(已归档)(https://github.com/swaywm/wlroots/issues/2257)
- 一个使 udev 变为可选的 PR(被拒绝)(https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3490)
- 静态链接讨论 (https://gitlab.freedesktop.org/wlroots/wlroots/-/work_items/2929)
> 注意:尽管声称是“你本来就要写的 60,000 行代码”,但实际上接近 8 万行,而且 swc 证明即便如此这也是不实的 :P
简而言之:情况可能更糟,但也完全可以好得多。
## 关于 X11 的问题
一张图片,背景是山丘后升起的太阳,上面有 Wayland 的“W”标志,文字写着:“随着 Xorg 太阳落山,Wayland 升起,不再落下,而是成为新的太阳。地球赖以生存的太阳。”
UNIX 上的所有图形系统都很糟糕,这是因为现代 UNIX 是野蛮的技术 (https://harmful.cat-v.org/software/operating-systems/),但 X11 是野蛮性最严重的罪魁祸首。
完整的 X11 堆栈包含数百万行遗留代码和工作区,而且在理论上甚至不是一个好的设计。他们制作了一个名为 libXfixes 的库。当你需要一个专门的库只是为了修复问题时,你就知道它有多糟了。或者是 libXfont2……Xorg 太老了,他们竟然给字体库做了续集!
你曾尝试查看它的源代码吗?最好不要……
本质上(无论好坏),现在不再是 1990 年代了。
X11 客户端代码通常看起来更简单,因为有很多东西是你看不见的(也不想看),还有更多你**永远不会**使用的东西。
Wayland 让你所做之事更加明确,而不是依赖那些陈旧抽象(天哪,它们有多陈旧)。
X11 是小巧、极简主义软件的反义词。
## 错误信息
在围绕 Wayland 与 X 的讨论中,经常会出现各种奇怪、奇妙且不正确的说法,此处予以驳斥,你可以直接链接到以下任何部分
# (https://wayland.fyi/#fallacy-composited)“Wayland 默认进行合成是坏事”
合成并非指花哨的动画或透明度,实际上它通常意味着仅在需要的位置绘制所需的内容。X11 综合器独立于 X 服务器,作为客户端运行,将所有窗口重定向到屏幕外像素图,并重新绘制特效或垂直同步。在 Wayland 上,没有统一的服务器。综合器就是服务器。它处理所有绘图、输入管理和最终场景的合成。虽然使用同一个词,但 X 和 Wayland 上的合成并非同一回事!
# (https://wayland.fyi/#fallacy-minimal)“X11 比 Wayland 更极简/更好”
这里引用一段 1998 年关于 X 的话,仅为了说明它不仅不好,而且实际上从来都不好!
> “X-Windows: ……完美执行的错误。X-Windows: ……保证不满意。X-Windows: ……没有它你会感到沮丧。X-Windows: ……连你的狗都不会喜欢它。X-Windows: ……不稳定且注定如此。X-Windows: ……简单非问题的复杂非解决方案。X-Windows: ……缺陷超出想象。X-Windows: ……形式追随故障。X-Windows: ……指尖垃圾。X-Windows: ……无知是我们最重要的资源。X-Windows: ……情况可能会更糟,但需要时间。X-Windows: ……可能发生在你身上。X-Windows: ……日本的秘密武器。X-Windows: ……让它挡**你**的路。X-Windows: ……体验噩梦。X-Windows: ……绳长足够上吊。X-Windows: ……从未拥有,永不会拥有。X-Windows: ……没有硬件是安全的。X-Windows: ……给愚者的强力工具。X-Windows: ……为生产力设定新限制。X-Windows: ……把简单变复杂。X-Windows: ……过时的前沿。X-Windows: ……无能的艺术。X-Windows: ……事实上的次标准。X-Windows: ……第一个完全模块化的软件灾难。X-Windows: ……致命的笑话。X-Windows: ……你问题的源头。X-Windows: ……肯定有更好的方法。X-Windows: ……警告你的朋友。X-Windows: ……你最好坐下。X-Windows: ……你会羡慕死者。”
让我再补充一条:X-Windows: ……自 1998 年起就乞求被替代。
参见:关于 X11 的问题
# (https://wayland.fyi/#fallacy-similiar)“Wayland 和 X11 在某些方面相似”
非常错误,整个模型从根本上不同。X11 是网络透明的统一服务器,窗口管理和合成由客户端处理;Wayland 不是网络透明的,因为现在不是 1985 年。在 Wayland 上,综合器**是**服务器,并处理窗口管理、输入处理等。在 X 上,客户端使用丰富(即:过度复杂)的协议告诉服务器在客户端窗口中绘制什么。在 Wayland 上,客户端只需将完全渲染的缓冲区提交给综合器。
# (https://wayland.fyi/#fallacy-builtin)“Wayland 内置了安全策略/CSD 支持/我不喜欢的东西”
Wayland 几乎没有“内置”的东西。你可能不喜欢的其实是某个综合器或综合器库。Wayland 本身提供的非常少,省略你不喜欢的部分非常简单。虽然在 Wayland 上输入通常只发送给目标客户端(不!!我的键盘记录器!!),但如果你愿意,这也很容易解决。因为综合器处理所有输入,它可以轻松地将输入转发给所有客户端。
# (https://wayland.fyi/#fallacy-rewrite)“如果我们出于某种原因用 Zig 重写 X,就可以拯救它”
Phoenix 是一个浪费时间的项目(虽然令人印象深刻),用一种每 5 分钟就有新破坏性变更的语言重写一堆垃圾协议并不是个好主意!将 Wayland 中 arguably 最糟糕的部分强行塞入已经糟糕透顶的 Xorg 也不是好主意!我们已经有运行 X 软件的解决方案,它叫 Xwayland!
## wayland.fyi 认证
好吧,大多数 Wayland 软件都很烂,X 更烂,你能做什么呢?嗯,这是一些真正简单且设计良好的 Wayland 软件列表,你可以使用,从 libwayland 到综合器库,再到综合器,最后到应用程序。标准如下:
- 使用合理且可移植的语言实现
- 代码库小巧、易于修改
- 不依赖非常大的协议扩展
- 没有任何“Linux 特性”,并且至少可移植到一个非 Linux 的类 Unix 操作系统
库:
- libwayland (https://gitlab.freedesktop.org/wayland/wayland): 经典的 Wayland 核心代码和协议
- freeway (https://git.sr.ht/~shrub900/freeway): 一个稍小、更简单的 libwayland 实现,依赖更少,并原生支持 NetBSD kqueue
- wld (https://github.com/michaelforney/wld): 一个面向 Wayland 的基础绘图库
- swc (https://github.com/michaelforney/swc): 一个用于创建简单平铺 Wayland 综合器的优秀库,使用 wld
- neuwld (https://git.sr.ht/~shrub900/neuwld): wld 的一个分支,具有正确的字体渲染,更多功能正在开发中
- neuswc (https://git.sr.ht/~shrub900/neuswc): swc 的一个分支,实现了更多功能和修复,包括壁纸、截图和更好的光标处理
- zig-swc (https://codeberg.org/sewn/zig-swc): neuswc 的 Zig 原生绑定,可与 zig-wayland 互操作
综合器:
- nyctal (https://github.com/s-rah/nyctal): 用 Go 实现的微小 Wayland 综合器
- velox (https://github.com/michaelforney/velox): 基于 swc 的简单平铺综合器
- hevel (https://git.sr.ht/~dlm/hevel): 受 Plan9 UX 范式启发的可滚动、浮动综合器,基于 neuswc
- wsxwm (https://git.sr.ht/~uint/wsxwm): sxwm (https://github.com/uint23/sxwm) 作者制作的基于 neuswc 的平铺综合器
- neuwm (https://git.sr.ht/~pfr/neuwm): 基于 neuswc 的 Wayland 综合器,从 wsxwm 分支而来,受 hevel 启发
- tohu (https://git.sr.ht/~shrub900/tohu): wsxwm 综合器的一个小分支,去除了平铺功能,基于 neuswc
- slgro (https://codeberg.org/0uppy/slgro): 面向 neuswc 的浮动键盘驱动综合器,支持移动、调整大小和居中,使用 lua 配置
- shko (https://git.sr.ht/~chld/shko): 高度可配置的、浮动、滚动和缩放的键盘导向综合器,用 Zig 编写,使用 neuswc
- dwc (https://git.sr.ht/~corg/DWC): 基于 neuswc 的动态 Wayland 综合器
- sunday (https://git.sr.ht/~sp649/sunday): 提供 3x3 工作区网格的平铺综合器,用 Zig 制作,使用 neuswc
- klatka (https://git.sr.ht/~dlm/klatka): 面向 neuswc 的iosk 风格综合器
- wmonad (https://github.com/bqv/wmonad): 用 Haskell 编写的 swc 综合器
- howl (https://codeberg.org/wf/howl): 由外部客户端程序控制的基于 neuswc 的综合器
实用工具:
- st-wl (https://github.com/michaelforney/st): 将 suckless 终端模拟器移植到 Wayland,使用 wld
- hst (https://git.sr.ht/~dlm/hst): st-wl 的预打补丁且兼容 freeway 的版本,使用 neuwld 实现更好的字体渲染
- havoc (https://github.com/ii8/havoc): 极简且现代的 Wayland 终端模拟器
- hack (https://git.sr.ht/~shrub900/hack): plan9port 的 acme 编辑器的原生 Wayland 版本,支持主题,使用 neuwld
- swiv (https://git.sr.ht/~shrub900/swiv): 面向 Wayland 的微型图像查看器,使用 neuwld(由 uint 分支)(https://git.sr.ht/~uint/swiv/tree)
- swclock (https://git.sr.ht/~shrub900/swclock): 面向 Wayland 的类似 xclock 的模拟时钟程序,使用 neuwld
- wlclock (https://git.sr.ht/~coasteen/wlclock): 简单的 Wayland 时钟,不使用任何绘图库
- wlED (https://git.sr.ht/~coasteen/wlED): 简单的 Wayland 文本编辑器,不使用任何绘图库
- wev (https://git.sr.ht/~sircmpwn/wev): 用于调试 Wayland 窗口事件的小工具
- dmenu (https://github.com/michaelforney/dmenu): 面向 Wayland 的 dmenu,使用 wld
- neumenu (https://git.sr.ht/~uint/neumenu): 使用 neuwld 的更新版 Wayland dmenu 分支
- swall (https://git.sr.ht/~uint/swall): neuswc 的壁纸设置器
- mojito (https://git.sr.ht/~dlm/mojito): 面向基于 neuswc 的综合器的轻量级、兼容 lemonbar 的状态栏
- chum (https://git.sr.ht/~dlm/chum): 面向 neuswc 的区域选择器,精神层面类似于 slop(1)
杂项:
- neu-nix (https://github.com/ricardomaps/neu-nix): neulibs 包的 Nix Flake
- neu-kiss (https://gitlab.com/murog/neu-kiss): wayland.fyi 相关内容的 kiss 仓库
- void-packages 的分支 (https://github.com/orahcio/void-packages): 包含此处列出的一些内容的 void 包
## 贡献
一张指着观众的人物图,配文“需要 YOU”,旁边是 Wayland 的“W”标志
你知道或制作了一个符合我们标准的程序吗?发现了拼写错误或格式问题,或者只是想添加一些内容?
请拨打 1-800-WAYLAND 或发送补丁到我们 SourceHut (https://git.sr.ht/~dlm/wayland.fyi) 上的邮件列表
## 社区
#derive on ergo.chat (https://ergo.chat/)
/derive/ on 9larp forum (http://9larp.net/derive)
#swc on libera.chat (https://libera.chat/)(请注意这是 mcf 创建的原始频道,请尊重大家的时间,低质量的讨论请去 #derive)
## 推荐阅读
- Wayland Book (https://wayland-book.com/) 关于 Wayland 内部机制的基本指南
- Wayland from Scratch (https://gaultier.github.io/blog/wayland_from_scratch.html) 使用最少资源制作 Wayland 客户端的指南
- Pure Wayland (https://hacktivis.me/notes/pure-wayland) 无 X 的 Wayland
- X is a Dangerous Virus (https://web.archive.org/web/20241204184321/https://www.art.net/~hopkins/Don/unix-haters/x-windows/dangerous-virus.html) 一篇古老的智慧之作
- A Guide for Wayland.fyi Stuff (https://thadathino.nekoweb.org/guides/waylandfyi_guide): 在 Alpine 上设置和运行完整基于 swc 的环境的指南
## 曾被提及于……
- YouTube (https://www.youtube.com/watch?v=fKh-bdWecsg)
- YouTube (https://www.youtube.com/watch?v=9-afWqWt6jA)
- Glaucus Linux Wiki……出于某种原因 (https://wiki.glaucuslinux.org/rfcs/wayland/)
- 4chan 的 /g/ 板块,每隔几个月,出于某种原因
- TikTok,我不打算提供链接
- 可能还有其他地方
相似文章
在Minecraft中作为模组实现的Wayland合成器
一个在游戏内实现了功能完整的Wayland合成器的Minecraft模组,允许用户在Minecraft世界中运行和管理应用程序。仅支持Linux。
《我的世界》中的 Wayland 合成器
一个在《我的世界》中实现完整 Wayland 合成器的模组,允许用户在游戏内启动和管理 Firefox、GIMP、VLC 等窗口。仅限 Linux。
我终于可以在2026年开始使用Wayland了吗?
作者重新评估了2026年Wayland在Linux上的可用性,指出虽然有改进,但NVIDIA驱动和8K显示器支持仍存在问题,使其仍未准备好用于其设置。
fht-compositor: 一个动态平铺的Wayland合成器
fht-compositor是一个受dwm和xmonad启发的动态平铺Wayland合成器,提供自动窗口布局和以键盘为中心的工作流程。
Xfwl4 的首个预览版发布
Brian Tarricone 宣布推出 xfwl4 的首个预览版,这是 Xfce 的 Wayland 合成器,经过了六个月的工作,详细说明了已知缺失的功能和未来计划。