wayland.fyi 极简主义 Wayland 特别兴趣小组

Lobsters Hottest 新闻

摘要

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,我不打算提供链接 - 可能还有其他地方

相似文章

《我的世界》中的 Wayland 合成器

Hacker News Top

一个在《我的世界》中实现完整 Wayland 合成器的模组,允许用户在游戏内启动和管理 Firefox、GIMP、VLC 等窗口。仅限 Linux。

Xfwl4 的首个预览版发布

Lobsters Hottest

Brian Tarricone 宣布推出 xfwl4 的首个预览版,这是 Xfce 的 Wayland 合成器,经过了六个月的工作,详细说明了已知缺失的功能和未来计划。