Hacker News 中文摘要

RSS订阅

我讨厌:编写Wayland应用程序 -- I hate: Programming Wayland applications

文章摘要

作者抱怨开发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. 设置重绘回调机制

开发中的各种问题

  1. 协议碎片化:核心协议无法创建窗口,必须使用XDG Shell等扩展,而这些扩展的接口代码需要从XML文件生成
  2. 输入处理复杂:键盘输入需要额外初始化xkb,按键重复需要手动实现
  3. 显示器刷新率:需要跟踪多个回调才能获取
  4. 窗口装饰:默认行为不一致,需要显式请求
  5. 热插拔问题:设备插拔事件处理不完善
  6. 剪贴板:实现文本复制极其困难
  7. 屏幕共享:需要依赖xdg-desktop-portal,不同合成器实现各异
  8. 鼠标光标:设置不同类型光标缺乏文档

结论

作为用户,Wayland体验不错。但作为开发者,Wayland的API设计是一场灾难: - 异步面向对象的协议导致控制流混乱 - 基础功能需要依赖各种扩展 - 协议发展缓慢,社区出现Frog Protocols等替代方案 - 简单任务变得异常复杂

这不禁让人质疑:这就是未来Linux应用应该构建的基础吗?

原文作者:Felix | 发布时间:2025年5月12日

评论总结

以下是评论内容的总结,平衡呈现了不同观点:

  1. 对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"
  2. 对Wayland设计的批评

    • diath认为Wayland是理论纯粹主义者的产物,不切实际:"designed from...theoretical purists...impractical and...hostile"
    • 65a担忧功能实现碎片化:"all the responsibilities passed to compositors...fragments linux desktop experiences"
  3. 建议使用抽象层和库

    • zabzonk类比Win32/COM,建议使用封装库:"you use libraries that others have sweated over"
    • motorpixel直接推荐GLFW:"GLFW is right there"
    • bbor指出应该使用wlroots:"Poor soul — they missed wlroots"
  4. 对Wayland优点的认可

    • 65a肯定Wayland的安全性和防撕裂:"X11 was a security disaster...better about tearing"
    • James_K认为底层规范是合理趋势:"trend of making...lower level...logical"
  5. 关于开发难度的讨论

    • m132指出底层设计本应如此:"that's how good low-level designs always are"
    • fonheponho认为易用性和功能难以兼得:"easy things easy, hard things impossible"或"easy things tedious, hard things possible"
  6. 其他观点

    • 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)。