Wine 已移植到 OpenBSD

将 Windows 兼容层 Wine 移植到 OpenBSD 后,像 The Witcher 3 和 Disco Elysium 这样的现代游戏得以在这个传统上以安全著称的 BSD 系统上运行,这得益于更新后的 AMD/Intel 图形驱动和基于 Vulkan 的工具链。贡献者解释了所需的深层技术工作——例如拦截并重写 `%gs` 指令、重新路由信号,以及绕过 OpenBSD 严格的 ptrace 与进程隔离模型——同时指出 Wine 上游并不热衷于正式支持另一个操作系统。该项目也引发了更广泛的讨论:OpenBSD 对 AI 辅助代码的立场、长期可维护性,以及拒绝 LLM 生成的贡献是否会让较小的操作系统在功能和硬件支持方面“落后”。

移植工作与技术方案

  • Wine 已移植到 OpenBSD/amd64,并且可以运行要求较高的游戏(例如 Witcher 3 remaster、Disco Elysium、Hollow Knight、Prey、Death Stranding、Factorio)。
  • 关键的 OpenBSD 特定工作:
    • 处理 %gs 寄存器:由于 OpenBSD 的 %gs/gsbase 为 0,OpenBSD 会拦截 %gs 指令,因此该移植会对被拦截的指令进行解码,使用临时寄存器将其重写为非 %gs 形式,并通过 stub 跳转。这解锁了大多数基础 Windows 应用和许多游戏。
    • 处理 ucontext、栈映射、mmap 和陷阱上下文,以便 %gs 逻辑知道在何处操作。
    • 信号处理:OpenBSD 不允许向另一个进程中的线程发送信号。Wine 通过 Unix 信号来模拟 Windows 线程 API,因此该移植会捕获进程间信号,并在目标进程内部重新发出它们(例如重映射到另一个信号)。
    • ReadProcessMemory / WriteProcessMemory 的等效实现很棘手,因为 OpenBSD 的安全模型和 ptrace 限制,尤其是对 Electron/Chromium 和 Steam。

上游合并与维护

  • Wine 已经支持 FreeBSD 和 macOS,因此扩展到另一个 BSD 被认为具有挑战性,但并非极端困难。
  • 一些补丁是 OpenBSD 专用的,并被认为对 Wine 的模拟应用代码来说过于临时拼凑或侵入性太强,难以被上游接受。
  • 据称 Wine 维护者对为另一个操作系统增加持续支持持谨慎态度;OpenBSD 以及可能的 NetBSD 很可能会继续维护各自的独立补丁。

图形、驱动与硬件支持

  • OpenBSD 通过源自 Linux 的 DRM 驱动支持现代 Intel 和 AMD GPU,提供硬件加速的 2D/OpenGL 和 Vulkan;Nvidia 支持实际上仅限于老旧、无加速的 nv(4) 硬件。
  • 如果 Vulkan 和所需扩展存在,VKD3D 就能工作;在 OpenBSD 上,这在 AMD 硬件上似乎运行良好。
  • 一些人将性能描述为“可接受”,但没有提供详细基准测试。

工具、仓库与 ports

  • Wine 移植位于 OpenBSD ports tree 中(基于 CVS,并镜像到 GitHub)。ports 条目是构建配方加补丁,而不是整个 Wine 的一个分支。
  • 还有一个独立的 GitHub 分支跟踪 OpenBSD 特定的 Wine 工作;问题提交也在该分支上被接受。

社区反应与意义

  • 许多评论者都很兴奋,称这是令人印象深刻的工作,也是 BSD 游戏和旧版 Windows 应用支持的一大进步。
  • 一些人认为这表明 BSD 正在获得更多关注,并可能成为抵御其他操作系统趋势的避风港。