新闻详情

新闻详情

首页 / 资讯中心 / 详情

Madeira项目概览:如何让iPhone单进程跑起整个Windows游戏栈

发布时间:2026/9/30 9:32:23来源:尧图网络
Madeira项目概览:如何让iPhone单进程跑起整个Windows游戏栈
Madeira项目概览如何让iPhone单进程跑起整个Windows游戏栈【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/MadeiraMadeira 是一个让未越狱 iPhone 运行 x86-64 Windows PC 游戏的开源项目。它用 FEX-Emux86→ARM64 指令翻译、WineWindows API 层和 DXMTD3D11→Metal 图形转换三大技术把一个完整的 Windows 游戏栈压缩进 iPhone 上的单个 Mach 进程其中 wineserver 以线程而非独立进程运行。本文带你理解它的架构原理、单进程背后的硬核原因以及从零构建安装的完整步骤。一、Madeira 是什么三大组件组成 iPhone Windows 游戏栈Madeira 的思路可以概括为一句话CPU 翻译交给 FEX-Emu系统 API 交给 Wine图形交给 DXMT全部跑在一个 Swift/Metal 宿主应用里。项目定位是研究项目而非商业产品目前 Thumper 和 ULTRAKILL 已可游玩。组件负责层完成什么翻译位置FEX-EmuCPUx86-64 → ARM64 JIT 即时翻译FEX/WineARM64EC系统Windows API → Darwin/POSIXapp/Madeira/arm64ec-windows/DXMT图形DirectX 11 → Metalapp/Madeira/d3d12/Swift 宿主应用外壳窗口合成、输入、音频UIKit CAMetalLayerapp/Madeira/ 一句话理解游戏里的 x86 代码由 FEX 翻译成 ARM64 执行调用 Windows API 时由 ARM64 原生的 Wine DLL 接管画画面时由 DXMT 直接转成 Metal 调用——层层翻译直达 iPhone 的 GPU。二、为什么必须单进程iOS 的硬性约束这是理解 Madeira 最关键的一点iOS 不允许fork()所以传统 Wine 的每个 Windows 程序一个进程模型根本无法工作。Madeira 的解决方案是单进程模型wineserver 作为线程运行在主进程内而不是独立守护进程相关桥接逻辑见 WineProcessBridge.m每个 Windows进程如 steam.exe、services.exe实际是伪进程——同一个 Mach task 内的一个线程没有任何进程隔离这也带来最棘手的问题任何一个进程发生未处理的错误都会杀死整个应用。因此项目在故障隔离fault containment上投入了大量工作包括内存保护修复、辅助进程拦截门[proc-gate]等细节记录在 STEAM_CEF_HANDOFF.md。 单进程还意味着严格的内存纪律可用的 CPU 虚拟地址空间约 64 GBJetsam 内存上限为 4096 MB所有 JIT 内存必须提前以双映射 RX/RW 池一次性预留。三、三层翻译架构拆解FEX-Emux86-64 → ARM64 的即时翻译FEX-Emu 的执行链路为x86-64 字节 → 前端解码器 → IRSSA→ 优化 → ARM64 JIT 后端。在 iOS 上它面临的最大障碍是W^X 内存保护——页面不能同时可写又可执行。Madeira 借鉴了 MeloNX 的双映射技巧同一块物理内存映射两个视图一个只写供编译器写入生成的代码、一个只读执行供 CPU 执行从而彻底避免反复切换权限的开销实现见 JITAllocator.c。另一个关键设计是xtajit 接口Wine 通过xtajit64.dll把 x86 代码交给 FEX这意味着 Wine 成百上千个 DLL 都以 ARM64原生速度运行只有游戏自身的代码才走模拟器——这是性能上最大的红利。WineWindows API → Darwin 的原生翻译Wine 采用PE/Unix 双半结构PE 半边Windows DLL 编译为 ARM64EC PE 二进制随应用打包可直接浏览 app/Madeira/arm64ec-windows/ 里的ntdll.dll、kernel32.dll等预编译产物Unix 半边原生库实现真实功能通过__wine_syscall_dispatcher桥接到 Darwin/Mach APIiOS 定制的源文件位于build/ntdll-unix/、build/wineserver/等构建链中项目对上游 Wine 的改动以补丁形式管理如 patches/wine-rpcss-scm-bootstrap.patch。DXMTD3D11 直通 Metal少一层就是快一层DXMT 把 DirectX 11直接翻译成 Metal不经过 Vulkan 中转层相比之下 DXVK 需要 DX11→Vulkan→Metal 两层。它的特色包括着色器走DXBC → Apple AIR 位码 → Metal 库路径贴合原生编译管线几何着色器转成 Metal mesh 着色器绕开了 DXVK 在 Apple GPU 上的致命短板预计开销仅 5–15%完整论证见 ARCHITECTURE_ANALYSIS.md 第 4 节。四、如何构建 Madeira从零开始的安装步骤环境要求要求说明iPhone未越狱开发环境为 A15iPhone 13 ProJIT 权限iOS 上 JIT 需要调试器附着项目使用StikDebug实现见 StikJITHelper.swift签名免费 Apple ID 即可但描述文件7 天过期需每周重新构建安装安装方式侧载sideload无法上架 App Store构建流程克隆仓库三个子模块指向含 iOS 改动的 fork必须递归克隆git clone --recurse-submodules https://gitcode.com/GitHub_Trending/mad/Madeira按链构建unix 侧 Wine 库、ARM64EC PE 模块、FEX、DXMT 各有独立构建脚本build/*/build.sh完整顺序和每一步产物都记录在 docs/BUILDING.md编译 iOS 应用xcodebuild构建 app/Madeira.xcodeproj打包 IPA 后侧载到手机自备 Visual C 运行时微软 VC 运行时 DLL 不随仓库分发获取方法见 tools/fetch-vcruntime.md前缀保留应用容器在重装后保留游戏前缀prefix和存档不会丢失前缀模板见 prefix-template.tar.gz。⚠️ 注意构建涉及 LLVM iOS 工具链、122 MB 的 llvm-mingw 工具链等多项仓库外输入docs/BUILDING.md 逐一列出了每项的获取方式和校验和。五、当前游玩状态与输入方案项目状态Thumper✅ 可游玩带声音典型 142 FPSULTRAKILL✅ 可游玩Marvel Cosmic Invasion⚠️ 能进游戏偶发不明终止操控尚不稳定Steam 客户端 CEF 登录窗口已能渲染并交互当前前沿输入方面docs/CONTROLLERS.md 描述了完整的操控方案物理手柄经 GameController 框架以 250 Hz 采样汇入 XInput屏幕触控虚拟手柄合并为玩家 1支持 A/B/X/Y、双摇杆、扳机键的完整映射核心实现在 GamepadInput.swift 与 TouchGamepad.swift。六、许可证与贡献须知Madeira 采用GPL-3.0-or-later见 LICENSE分发的衍生作品必须保持开源。需要特别注意上游 fork 的许可差异Wine fork 依据 LGPL-2.1 §3 转为 GPL-3.0-or-laterFEX 和 dxmt fork 保留 MIT 但修改部分为 GPL-3.0-or-later。逐组件许可文本在 LICENSES/许可专题说明见 docs/LICENSING.md 与 THIRD-PARTY-NOTICES.md。贡献者需注意FEX-Emu 上游禁止 AI 生成代码不要将本 fork 中的 AI 辅助改动直接提交回上游细则见 CONTRIBUTING.md。七、延伸阅读项目关键文档导航文档内容ARCHITECTURE_ANALYSIS.md全套架构分析JIT 原理、方案对比、性能预估、实施路线图docs/BUILDING.md可复现构建记录含仓库外输入清单与校验和STEAM_CEF_HANDOFF.mdSteam/CEF 移植现状已确认/已证伪/待解问题清单docs/CONTROLLERS.md物理手柄与触控虚拟手柄的 XInput 实现细节README.md项目状态、要求、许可总览总结Madeira 证明了在 iOS 的沙箱与 W^X 约束下把整个 Windows 游戏栈塞进一个进程是可行的——用双映射 JIT 池、线程化 wineserver、xtajit 原生加速和 DXMT 直通 Metal换来了 Thumper 142 FPS 的现实成绩。它仍是一个充满毛边的研究项目但架构思路对任何想在移动端跑 Windows 负载的开发者都值得细读。【免费下载链接】MadeiraRun x86-64 Windows PC games on jailed iOS via FEX-Emu Wine DXMT项目地址: https://gitcode.com/GitHub_Trending/mad/Madeira创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

闲鱼客服咨询AI流量赋能,闲鱼科技重塑智能体验新标杆 2026/9/30 11:25:55

闲鱼客服咨询AI流量赋能,闲鱼科技重塑智能体验新标杆

近期,由湖南改变生物科技有限公司主办、本因内酵未徕品牌协办的“生物科技健康论坛暨AI赋能大健康产业启动会”在长沙市步步高福鹏喜来登酒店隆重举行。活动以“AI流量赋能实体破局——中小企业增长峰会”为主题,汇聚全国大健康行业专家、中小企业负责人、机构代表及…

阅读更多 →
专有云企业版V3.7.1云服务总线CSB全流程部署与调用避坑指南 2026/9/30 11:25:55

专有云企业版V3.7.1云服务总线CSB全流程部署与调用避坑指南

简介:这是阿里云专有云企业版V3.7.1的云服务总线(CSB)用户指南PDF文档,面向企业架构师、运维人员与集成开发工程师,系统讲解CSB在私有云、公有云及混合云环境中实现服务注册、发现、路由、安全与监控的核心机制&#x…

阅读更多 →
元宝    LeetCode 130. 被围绕的区域 Golang实现 2026/9/30 11:25:48

元宝 LeetCode 130. 被围绕的区域 Golang实现

LeetCode 130 的核心不是「找被包围的 O」,而是反过来:先保住所有和边界连通的 O,剩下的 O 才是真被包围的。 思路(DFS 反向标记) 扫描矩阵四条边界(第一行、最后一行、第一列、最后一列)边界上…

阅读更多 →
linux kernel struct 之 ptdesc 2026/9/30 11:25:48

linux kernel struct 之 ptdesc

struct ptdesc 的定义在 Linux 内核的 include/linux/mm_types.h 文件中(早期版本曾放在 include/linux/pgtable.h)。它的设计目标是将页表元数据从 struct page 中拆分出来,目前通过完全覆盖(overlay) struct page 的…

阅读更多 →
侵入式双向链表 2026/9/30 11:25:48

侵入式双向链表

侵入时双向链表不需要单独进行内存分配,跟随具体结构进行分配,详细数据结构:typedef structure list_node {struct list_node *next;struct list_node *prev; } list_t;链表初始化初始化链表,哨兵自己成环。list->next list; …

阅读更多 →
元宝    LeetCode 131. 分割回文串 Rust实现 2026/9/30 11:25:47

元宝 LeetCode 131. 分割回文串 Rust实现

Rust 实现 LeetCode 131 的核心逻辑和 Python 完全一致,依然是回溯(Backtracking)。不过在 Rust 里需要稍微注意字符串处理和递归函数的写法。 方法一:回溯 实时回文判断(最直观,面试首选)AC R…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉