제일브레이크 없는 아이폰에서 윈도우 PC 게임을 실행하는 방법
아이폰을 열어 평소처럼 게임을 하다가, 갑자기 PC용 게임이 실행되는 장면을 상상해 보세요. 이 프로젝트는 아이폰의 보안 제한을 우회하지 않고도 윈도우 게임을 돌리는 실험적인 도구입니다. 여러 에뮬레이터와 변환 기술을 하나로 묶어, 아이폰이 마치 작은 PC처럼 동작하게 만듭니다.
아이폰 안에서 PC 게임을 돌리는 원리
이 프로젝트는 Wine, FEX-Emu, DXMT라는 세 가지 기술을 결합합니다. Wine은 윈도우 프로그램이 다른 운영체제에서 실행되도록 돕고, FEX-Emu는 PC용 명령어를 아이폰이 이해하는 명령어로 번역합니다. DXMT는 윈도우의 그래픽 명령을 아이폰의 그래픽 언어로 바꿔 줍니다. 이 모든 것이 하나의 프로세스로 실행되며, 별도의 서버 프로세스 없이 스레드로 동작하도록 설계되었습니다.
지금까지 실행된 게임과 상태
현재 Thumper와 ULTRAKILL은 플레이할 수 있습니다. Marvel Cosmic Invasion도 게임 플레이 단계까지 도달했지만, 가끔 이유 없이 종료되거나 조작이 불안정한 경우가 있습니다. 다른 게임들은 낮은 프레임 레이트로 실행되는 경우가 많습니다. 이는 완성된 제품이 아니라 연구 프로젝트이므로, 게임마다 다른 문제나 갑작스러운 변경이 생길 수 있음을 알아야 합니다.
실행을 위한 준비물과 제약
제일브레이크를 하지 않은 아이폰이 필요합니다. 개발은 A15 칩이 들어간 iPhone 13 Pro에서 이루어졌습니다. iOS에서는 JIT(Just-In-Time) 컴파일러를 사용하려면 디버거를 연결해야 하며, 이 프로젝트는 StikDebug를 사용합니다. 또한 앱 서명을 위해 Apple ID가 필요하며, 무료 계정을 사용하면 프로비저닝 프로필이 7일마다 만료되어 매주 앱을 다시 빌드하고 설치해야 합니다. 재설치해도 앱 컨테이너는 유지되므로 저장 데이터는 사라지지 않습니다. JIT가 디버거 연결을 요구하기 때문에 이 앱은 앱스토어 배포가 불가능하며, 사이드로딩 방식으로 설치해야 합니다.
빌드 과정과 라이선스
빌드는 유닉스 측 Wine 라이브러리, ARM64EC PE 모듈, FEX, DXMT, iOS 앱 등 여러 단계로 나뉩니다. build/*/build.sh는 네이티브 부분을 처리하고, 앱은 xcodebuild로 빌드합니다. 저장소를 클론할 때 서브모듈을 함께 받아야 하며, FEX, wine, research/dxmt는 iOS 작업을 포함하는 포크를 가리키므로 업스트림 클론으로는 빌드할 수 없습니다. 라이선스는 GPL-3.0-or-later이며, 배포되는 파생작도 오픈소스로 유지되어야 합니다. 각 포크는 자체적인 라이선스 파일을 가지고 있으며, 기존에 관대하게 라이선스된 코드는 그 조건이 유지됩니다. Microsoft Visual C++ 런타임 DLL은 포함되지 않아 사용자가 직접 준비해야 합니다.
연구 프로젝트로서의 한계와 주의점
이 저장소는 완성된 제품이 아니라 연구 프로젝트이므로, 거친 부분이나 게임별 특이사항, 깨지는 변경을 예상해야 합니다. 특히 포크에는 AI 보조 작업이 많이 포함되어 있으며, FEX-Emu의 기여 정책은 AI로 생성된 코드의 업스트림 제출을 금지합니다. 따라서 이 포크의 AI 생성 변경 사항을 업스트림에 제출해서는 안 됩니다. MIT 라이선스는 포크 자체는 허용하지만, 업스트림으로의 기여는 각 프로젝트의 정책을 따릅니다. 업스트림에 변경 사항을 제안하기 전에 해당 프로젝트의 기여 정책을 반드시 확인해야 합니다.