在 Linux 上跑 Windows 程序,长期是一件"能做但很烦"的事。Wine 本身足够强,麻烦在于外围:这个游戏要装 DXVK,那个软件要换 Wine 版本,某个反作弊要特定的 Proton 分支,一不小心几个程序共用一个 prefix,互相污染到最后谁也跑不起来。Bottles 做的事就是把这些散落的旋钮收进一个 GTK 界面:每个程序一个独立"瓶子",各自带自己的运行器、依赖、显卡参数和快照。
8 月 11 日发布的 Bottles 66 是这个项目今年幅度最大的一次改动,它把 UMU 正式接了进来,也就是说 Proton 现在可以脱离 Steam 直接被 Bottles 调用。之后一周里项目连着发到了 66.7,绝大多数是紧跟着的修复——首发版本在 Flatpak 下有路径解析问题,作者在 27 小时内连推了五个修补版本。对准备升级的人来说,这个节奏本身就是提示:别停在 66.0,直接用 Flathub 上的最新版。

先说清楚 UMU 这件事为什么值得单独拎出来。Proton 是 Valve 在 Wine 基础上做的兼容层,为游戏做了大量补丁,但它原本是 Steam 的一部分,想在 Steam 之外用就得自己拼命令行和环境变量。UMU 是社区做的统一启动器,Lutris、Heroic 这些前端都靠它在 Steam 之外调用 Proton。Bottles 66 直接对接 UMU,并且默认使用 ProtoSoda——项目自己在 Soda 基础上调校的 Proton 构建。结果是,以前需要在配置文件里手改的那些事,现在变成了新建瓶子时选一个运行器。
配合 UMU 一起来的还有 Adaptive Launch。用 Soda 11.0-5 及以上的运行器时,Bottles 不再对所有程序一视同仁地套同一套启动方式,而是根据识别到的程序类型去调整启动参数。这类"自动挡"功能好不好用要看具体程序,但方向是对的:绝大多数人并不想知道 WINEDLLOVERRIDES 该怎么写。

日常用法其实很直白。新建瓶子时先选环境类型,Application 面向生产力软件,Gaming 面向游戏和 3D 应用,Custom 则是一张白纸;再选运行器版本和瓶子的存放目录,点确定就完事。这三个预设的差别不只是名字,Gaming 会预先打开一批和游戏相关的组件与优化,而 Application 保持相对干净,这样办公软件不会被一堆游戏专用的补丁牵连。

瓶子建好之后,详情页是主要的操作场所:运行任意 exe、把安装好的程序加成桌面快捷方式、管理依赖、创建快照、看任务管理器。快照这一项在装 Windows 软件时特别有用——装某个运行库之前先打个快照,装崩了直接回滚,不用把整个瓶子删掉重来。

真正体现 Bottles 价值的是设置页。Wine 运行器、DXVK、VKD3D、LatencyFleX 这些组件各自有版本下拉框,显示区域里 FSR、独显开关、vkBasalt 后处理都是开关;这些东西单独用命令行也能配,但要记住每个环境变量叫什么、和哪个组件版本兼容,成本就上来了。把它们摆在一个页面里、并且限定在单个瓶子的作用域内,是这个项目最实在的贡献。

另外一个容易被忽略的部分是 Installers 页,社区维护的一批安装脚本放在这里,Battle.net、Epic Games Store、EA 启动器、FL Studio、Ableton Live 这些都在列,每条带着 Platinum/Gold/Silver 的兼容度评级。对不熟悉 Wine 生态的人来说,这份列表比任何教程都直接:先看评级,再决定值不值得折腾。

安装方式官方只推荐 Flatpak,命令是一条:
flatpak install flathub com.usebottles.bottles
66 系列还带来一个实验性的 cpak 打包格式,定位是比 Flatpak 更轻的分发方式,依赖仍然隔离但少了 Flathub 沙箱那层开销。这东西现在还处在很早的阶段,尝鲜可以,生产机器上还是走 Flatpak 稳妥。
需要泼一点冷水的地方也有。Bottles 是 Flatpak 优先的项目,在沙箱之外的构建路径上一直不太顺,66.1 到 66.7 里修的相当一部分问题就出在 Flatpak 路径、Steam Runtime 包装和 NVK 检测上;如果目标是跑带内核级反作弊的竞技游戏,任何 Wine 方案都救不了,这不是 Bottles 的锅但结论一样。它真正擅长的是另一类需求:把一两个非跑不可的 Windows 生产力软件、老游戏或者行业工具,装进一个不会污染系统、能随时快照回滚的独立环境里。就这件事而言,66 这一版让门槛又低了一截。
项目地址:https://github.com/bottlesdevs/Bottles