AnyPS5 真正反直觉的地方,不是它能跑 PS5 游戏,而是它压根没打算在运行时翻译任何东西。据项目官方 README,它用一个重链接器把 PS5 可执行文件一次性改写成 Linux ELF 或 Windows PE 原生格式,再提供一批重实现的系统库供动态链接;整个过程没有模拟器,也没有独立的运行时进程。它把移植从运行期搬到了构建期,这既不同于保持二进制原样的 Wine,也不同于逐条指令解释的模拟器。
它不是模拟器,也不等于 Wine
据项目架构文档,转换后的程序就是一个普通进程,调用的是系统库的原生实现。绑定依赖 NID:每个系统库编译成共享库后,构建脚本把每个导出函数重命名成它的 NID(由函数名算出的标识),宿主操作系统的加载器再按 NID 把游戏的导入项接到这些库上。
把三者并排看,差异是结构性的。Wine 不碰二进制,只在运行期替换 Windows API;模拟器在运行期解释或翻译指令;AnyPS5 两头都不占,它在构建期重写二进制与模块布局,运行期只留符号绑定。据架构文档,重链接器按序做四件事:可选的 AMD 专有指令降级、按 NID 过滤未用导入并重建动态段、转换随附的 guest 模块,最后交给 Linux 或 Windows 的 patcher 写出 app.elf 或 app.exe。
| 路线 | 翻译发生点 | 是否改写二进制 | CPU 指令翻译 | 运行期绑定 |
|---|---|---|---|---|
| Wine | 运行期(API 层) | 否 | 否 | Win32 API 映射到 POSIX |
| 模拟器 | 运行期(指令层) | 否 | 是 | 整机模拟 |
| AnyPS5 | 构建期(二进制层) | 是 | 否(源与目标皆 x86) | NID 绑定到原生库 |
86% 这个数字在数什么
官方进度板给出的系统库数字是 3018/3494,约 86.38%;GPU 着色器指令则是 1166/1166,100%。单看这两个数字很容易得出接近完工的印象,但它们都不是完成度,而是相对项目自设清单的覆盖率。进度板对已实现的定义写得很清楚:某函数不再调用占位桩 NotImplemented_nid_no_patch,就算已实现。
关键在分母。据进度板原文,总数只包含 core/libs/prx 中已被声明的函数,并非 PS5 固件导出的全部函数;声明得越多,分母越大。Hacker News 上的讨论据此指出,提交标题里的 87% 存在事实错误,因为 README 本身就带着这条限定。着色器的 100% 同理,它只是说解码器认得出 AMD 公开的 RDNA1 与 RDNA2 指令表里的每一条。
| 指标 | 数值 | 分母是什么 | 已实现的定义 | 能否当可玩性 |
|---|---|---|---|---|
| 系统库 | 3018/3494 ≈ 86.38% | 项目已声明的函数 | 不再调用占位桩 | 不能,分母自设 |
| 着色器指令 | 1166/1166 = 100% | AMD 公开 RDNA1+RDNA2 指令表 | 解码器能识别 | 不能,识别不等于可执行 |
从 RDNA 到 SPIR-V:图形才是门槛
据架构文档,游戏通过 libSceAgcDriver 提交 DCB/ACB 命令缓冲,项目执行其中的 PM4 包来设置状态、发起绘制与派发;如果某个着色器变体已在内存或磁盘缓存里,就直接交给 Vulkan,否则进入五阶段重编译器:RDNA 解码、控制流建图并结构化、翻译为内部 IR、优化资源与绑定、最后发射 SPIR-V。启用 SPIRV-Tools 时,产物还会被校验。
识别率与可执行率不是一回事。技术债文档明确列出:多重、反向、交替与小数循环的着色器循环会抛异常;缺少某个 Vulkan 扩展时,重编译器不加载 barycentric VGPR;驱动不执行 SET_CONFIG_REG 包,一旦提交就抛错。这些正是大型 3D 游戏常用的结构,也解释了为什么最先跑通的是 2D 平台游戏而非画面密集的大作。
要么正确,要么抛异常
这个项目有一条贯穿始终的工程约定:每个函数要么做对,要么抛异常。据 README,未支持或意外的状态严格抛出 std::runtime_error,错误写到 stderr 后进程直接终止。技术债文档把这条约定补全,指出静默桩是全项目明文列出的少数例外,例如若干对话框、USB、音频与 VR 库只实现无设备路径。
把未知一律升级为显式异常,而非悄悄降级,是一种把兼容缺口集中暴露的策略。它让边界可定位、可计数,代价是任何未覆盖路径都会让进程当场结束。对使用者来说,崩溃不是随机的,而是这条边界的信号。
现在真能玩什么,会踩哪些坑
据官方兼容性表,Dreaming Sarah(PPSA02929,一款 2D 平台游戏)在 GTX 1050 Ti 与 i5-7500 上稳定 60 FPS;DOOM 的 Shareware homebrew 在 Windows 上可玩到 E1M1 及后续地图。同一张表也如实标注未验证项:当前 main 分支的 Windows,以及 Intel GPU 上的 Linux。
真正的门槛常出现在内存与驱动路径。据使用文档,Linux 下当 Vulkan 驱动经 dma-buf 导入内存时,共享直接内存走 /dev/udmabuf;如果没有权限,相关区间改为拷贝,GPU 经 FLAT/GLOBAL 的写入会失败并报 BDA access failed。Windows 侧的直接内存在分配时即全额提交,受系统 commit 上限约束,不够就报错。这些失败与函数计数无关,却比 86% 更直接地决定能不能进游戏。
山寨仓库与本地 exe 骗局
走红之后,项目也成了仿冒目标。据一份官方仓库核验页,唯一的官方仓库是 github.com/boykopovar/AnyPS5,官方产物是重链接器加 prx 库归档,并不存在单个 AnyPS5.exe、安装向导或本地 zip 的官方构建;fork 与拷贝可以沿用同样的名字和描述,但只有该组织拥有的是官方项目。
官方发布形态本身就是真伪判据:据 README,正确用法是把输入可执行文件与输出路径交给 relinker,再自行安排目录与库。任何号称一键安装、双击即玩的单个可执行文件,都与这一形态矛盾。
合规边界与它的位置
据 README 的免责声明,项目定位于互操作、研究、保存与兼容用途,不附带也不分发受版权保护的软件、固件、密钥或专有库,使用者须自行确认所用二进制合法获取与合规使用。争议点因此落在输入二进制的来源,而不在工具本身的代码分发。
回到最初:AnyPS5 的价值不在那个 86% 的封面数字,而在它把移植问题改写成构建期的二进制重链接加运行期 NID 绑定,从而把难点从指令模拟转移到系统库与图形特性覆盖。想了解进度与限制,官方进度板、兼容性表与技术债文档都能并入 README 一起看,那里的限定比任何标题都诚实。
评论