willfaust/Madeira — Run x86-64 Windows PC games on jailed iOS via FEX-Emu + Wine + DXMT
탈옥하지 않은 iPhone에서 Windows PC 게임 실행하기 — FEX-Emu·Wine·DXMT 조합
Madeira는 FEX-Emu로 x86-64 코드를 ARM64로 변환하고 Wine과 DXMT를 결합해 탈옥하지 않은 iPhone에서 Windows 게임을 실행하는 연구 프로젝트입니다. Thumper와 ULTRAKILL은 플레이 가능하지만 게임마다 성능과 안정성에 차이가 있고, JIT 때문에 앱을 직접 사이드로드해야 합니다.
- 주제
에디터 노트
윈도우 없이 윈도우 게임을 돌리는 시도가 어디까지 왔는지 보여줍니다. Madeira는 FEX-Emu(CPU 변환), Wine(API 구현), DXMT(D3D11→Metal)를 하나의 Mach 프로세스에 합쳐 탈옥하지 않은 아이폰에서 PC 게임을 실행합니다. Thumper와 ULTRAKILL은 실제로 플레이 가능합니다. 다만 iOS의 JIT 제약을 디버거 연결로 우회하는 구조라 App Store 배포는 안 되고 사이드로드만 됩니다. 프레임이 낮은 타이틀이 많고, FEX 포크의 AI 생성 코드는 upstream 기여가 금지라는 점도 알아둘 만합니다.
AI 요약
Madeira는 탈옥하지 않은 iPhone에서 Windows PC 게임을 실행하는 연구 프로젝트입니다. Wine(ARM64EC), FEX-Emu의 x86-64→ARM64 변환, DXMT의 D3D11→Metal 변환을 한 Mach 프로세스 안에서 결합합니다. 별도 프로세스인 wineserver 대신 스레드로 실행하는 구조도 사용합니다.
호환성과 성능
Thumper와 ULTRAKILL은 플레이할 수 있습니다. Marvel Cosmic Invasion은 게임플레이까지 진입하지만, 실행이 원인 불명으로 종료된 사례가 있고 조작도 아직 안정적이지 않습니다. 다른 게임도 플레이 단계에 도달한 경우가 있으나 프레임 속도가 낮습니다. 프로젝트는 거친 부분과 게임별 예외가 있으며, 변경에 따라 동작이 깨질 수 있다고 안내합니다.
설치와 빌드
개발 기준 기기는 iPhone 13 Pro의 A15입니다. iOS에서 JIT를 쓰려면 디버거 연결이 필요하며, Madeira는 StikDebug를 사용합니다. 이 제약 때문에 App Store로 배포할 수 없고 사이드로드로 설치해야 합니다. 서명에는 Apple ID가 필요하고 무료 계정도 쓸 수 있지만, 프로비저닝 프로필은 7일 뒤 만료되므로 매주 앱을 다시 빌드해 설치해야 합니다. 앱 컨테이너는 재설치 뒤에도 유지되어 Wine prefix와 저장 파일은 보존됩니다.
빌드는 Unix 계열 Wine 라이브러리, ARM64EC PE 모듈, FEX, DXMT, iOS 앱으로 나뉩니다. 네이티브 구성요소는 build/*/build.sh로 빌드하고 앱은 xcodebuild를 사용합니다. FEX, Wine, DXMT는 iOS 작업이 들어간 포크를 서브모듈로 참조하므로 upstream 저장소를 그대로 가져오면 빌드되지 않습니다.
라이선스와 기여
저장소는 GPL-3.0-or-later를 적용하며, 배포하는 파생물도 오픈소스로 공개해야 합니다. 다만 구성요소와 포크마다 조건이 다릅니다. Wine 포크는 LGPL-2.1 §3에 따라 GPL-3.0-or-later로 재허가했고, FEX와 DXMT는 기존 MIT 라이선스를 유지하되 수정분에는 GPL-3.0-or-later를 적용합니다. rpmalloc도 기존 0BSD 조건과 수정분의 GPL 조건을 구분합니다. 이미 공개된 시점에 허용적 라이선스로 받은 코드는 해당 라이선스 아래 계속 사용할 수 있다고 설명합니다. Microsoft Visual C++ 런타임 DLL은 저장소에 포함되지 않아 사용자가 별도로 준비해야 합니다.
프로젝트의 포크에는 AI 보조 작업이 상당 부분 포함되어 있습니다. FEX-Emu 기여 정책은 기여 코드 생성에 AI를 쓰지 못하게 하므로, 이 포크의 AI 생성 코드를 FEX에 제출하지 말라고 안내합니다.
원문: GitHub / 번역·요약: Trawling