文章摘要
作者抱怨开发Wayland图形应用程序的困难,认为Wayland协议虽然比老旧的X11更现代,但开发体验不佳,文档匮乏且工具链不完善,导致开发者面临诸多挑战。
文章总结
开发Wayland应用是一场噩梦
作为一名Linux桌面用户,我使用Sway(一个Wayland合成器)已经有一段时间了。相比X11,Wayland安装配置更简单,被认为是"Linux桌面的未来",还能通过XWayland运行X11应用。但当我尝试开发Wayland应用时,发现这简直是一场噩梦。
基础设计的差异
Wayland协议采用面向对象的回调机制,控制流程极其混乱。开发者需要:
- 连接Wayland socket
- 通过注册表获取全局对象(显示器、核心对象等)
- 几乎所有操作都通过回调函数完成
- 使用wl_display_roundtrip()和wl_display_dispatch()触发事件处理
打开一个窗口的复杂流程
仅打开一个OpenGL窗口就需要1300多行代码。软件渲染应用更复杂: 1. 获取全局对象 2. 创建WlSurface并注册回调 3. 创建XdgSurface和XdgToplevel并注册回调 4. 通过共享内存创建WlBuffer 5. 处理各种配置回调 6. 设置重绘回调机制
开发中的各种问题
- 协议碎片化:核心协议无法创建窗口,必须使用XDG Shell等扩展,而这些扩展的接口代码需要从XML文件生成
- 输入处理复杂:键盘输入需要额外初始化xkb,按键重复需要手动实现
- 显示器刷新率:需要跟踪多个回调才能获取
- 窗口装饰:默认行为不一致,需要显式请求
- 热插拔问题:设备插拔事件处理不完善
- 剪贴板:实现文本复制极其困难
- 屏幕共享:需要依赖xdg-desktop-portal,不同合成器实现各异
- 鼠标光标:设置不同类型光标缺乏文档
结论
作为用户,Wayland体验不错。但作为开发者,Wayland的API设计是一场灾难: - 异步面向对象的协议导致控制流混乱 - 基础功能需要依赖各种扩展 - 协议发展缓慢,社区出现Frog Protocols等替代方案 - 简单任务变得异常复杂
这不禁让人质疑:这就是未来Linux应用应该构建的基础吗?
评论总结
以下是评论内容的总结,平衡呈现了不同观点:
对GUI编程的厌恶与回避
- jmclnx表示讨厌所有GUI编程,庆幸自己主要从事后端开发:"I can say I hate all GUI programming! Luckily...I was able to avoid GUIs"
- Avicebron通过使用neovim和SPICE virtio剪贴板通道来规避:"I sidestep by using neovim...clipboard sharing to work natively"
对Wayland设计的批评
- diath认为Wayland是理论纯粹主义者的产物,不切实际:"designed from...theoretical purists...impractical and...hostile"
- 65a担忧功能实现碎片化:"all the responsibilities passed to compositors...fragments linux desktop experiences"
建议使用抽象层和库
- zabzonk类比Win32/COM,建议使用封装库:"you use libraries that others have sweated over"
- motorpixel直接推荐GLFW:"GLFW is right there"
- bbor指出应该使用wlroots:"Poor soul — they missed
wlroots"
对Wayland优点的认可
- 65a肯定Wayland的安全性和防撕裂:"X11 was a security disaster...better about tearing"
- James_K认为底层规范是合理趋势:"trend of making...lower level...logical"
关于开发难度的讨论
- m132指出底层设计本应如此:"that's how good low-level designs always are"
- fonheponho认为易用性和功能难以兼得:"easy things easy, hard things impossible"或"easy things tedious, hard things possible"
其他观点
- izacus对持续抱怨表示厌倦:"constant loud bile spewing...getting a bit boring"
- DonHopkins用视频链接幽默回应:"The Decompositing Compositors"
- toinewx简短抱怨字体问题:"unreadable font"
关键分歧在于:批评者认为Wayland设计不切实际且碎片化(diath/65a),支持者则认为底层设计合理且安全(James_K/65a),多数人建议通过抽象层解决问题(zabzonk/m132/bbor)。