요약
PSP판 God of War 두 편을 WebAssembly로 미리 번역해 브라우저에서 실행하는 프로젝트가 공개됐습니다.
GitHub 이용자 snuri00이 공개한 오픈소스 프로젝트입니다. 게임의 MIPS 기계어를 실행 전에 C++로 옮긴 뒤 WebAssembly로 컴파일합니다. 여기에 PSP 운영체제와 그래픽 칩을 다시 구현한 작은 런타임을 붙여 WebGL2로 화면을 그립니다.
왜 중요한가
- 정적 재컴파일(실행 전에 기계어를 통째로 다른 언어로 번역하는 방식)로 휴대용 게임기 게임을 웹 페이지 하나로 옮길 수 있음을 보였습니다.
- 다만 같은 스튜디오와 엔진의 게임 두 편만 확인돼, 다른 게임에도 통할지는 아직 모릅니다.
핵심 내용
- Chains of Olympus는 부팅부터 전투까지 Chrome과 Firefox에서 60fps로 돌아가고, 해상도는 원본의 최대 4배까지 올릴 수 있습니다.
- 후속작 Ghost of Sparta는 DRM 해제와 시스템 호출 몇 개를 더해 3배 해상도에서 55~60fps로 돌아갑니다.
- 첫 빌드는 약 6fps였지만, 화면 한 장을 보일 때마다 8프레임을 그리던 문제 등을 고쳐 속도를 끌어올렸습니다.
- 그래픽 처리를 별도 스레드로 옮겨, 바쁜 전투 장면의 프레임당 시간이 Firefox에서 약 17ms에서 10ms로 줄었습니다.
- 저장소에는 게임 데이터가 없어 이용자가 가진 디스크 이미지를 직접 변환해야 하며, 결과물은 공개하지 말라고 당부합니다.
HN 반응
- 운영체제와 그래픽 칩을 흉내 내는 이상 이것도 에뮬레이션이라는 지적과, 정적 재컴파일은 전통적인 에뮬레이션과 다르다는 반론이 맞섰습니다.
- 일부 이용자는 AI 덕분에 옛 게임 이식이 쉬워져 보존에 좋다고 반겼지만, 보존이 아니라 리마스터에 가깝고 엉성한 이식만 늘어난다는 우려도 나왔습니다.
이런 걸 짚는 게 좀 깐깐해 보일 수는 있는데, 이건 에뮬레이션 스택을 설명한 거잖아요. 많은 에뮬레이터가 이미 대상 기계어 코드를 중간 표현으로 끌어올려서 JIT으로 처리하고 있어요(WASM을 거치지 않을 뿐이죠).
대부분의 사람들은 AOT(Ahead-of-time) 컴파일이나 정적 재컴파일을 전통적인 에뮬레이션으로 보지 않는다고 할 겁니다.
지난 세기부터 우리는 그걸 에뮬레이션이라고 불렀고, 지금도 달라진 게 없습니다.
원래 하드웨어가 대상 시스템에 없다는 것이 핵심입니다.
수많은 사례 중에서 유명한 예를 하나 들겠습니다.
https://en.wikipedia.org/wiki/FX!32
'에뮬레이션'은 디지털 시스템 밖에서도 쓰이는 일반적인 영어 단어입니다.
어떤 집단은 그 분야에서 어휘를 넓혀야 하는 문제와 해법을 만났고, 그래서 이 일반적인 단어를 특정한 기법을 가리키는 말로 다시 쓰고 다른 기법에는 다른 용어를 쓰기로 했습니다.
당신은 그게 다른 방식을 택한 또 다른 집단에 대한 당신의 기억과 맞지 않는다고 불평하는 겁니다.
마음껏 불평하세요. 하지만 언어는 원래 이렇게 굴러갑니다. 지금 로블록스를 하는 아이들도 크면 똑같은 소동을 자기들 방식으로 되풀이할 겁니다.
CPU는 더 이상 에뮬레이션하지 않더라도 나머지 시스템은 분명히 에뮬레이션하고 있잖아요. 그러니 전통적인 에뮬레이션과 아주 가깝다고 봅니다.
CPU 쪽도 좀 묘한 위치에 있습니다. 변환된 C++를 보면 명령어를 MIPS CPU 상태 객체를 조작하는 코드로 옮기고 있는 것 같거든요.
https://github.com/jessicanataliagta/PSPRecomp/blob/main/src/runtime.cpp
그 정도면 WINE이 하는 일과 거의 같은데, WINE은 에뮬레이터가 아니라고들 하잖아요. 윈도 유저랜드를 작게 재구현하고 DirectX를 Vulkan/OpenGL로 변환하는 거니까요. 그럼 x86 -> ARM 바이너리 변환을 AOT로 해서 WINE으로 돌리면 그건 에뮬레이터인가요?
https://github.com/wine-mirror/wine/blob/master/loader/main.c#L2
WINE 스스로가 WINE은 에뮬레이터라고 말하고 있습니다.
결국 에뮬레이션과 네이티브 코드 사이에는 스펙트럼이 있고, 어디에 선을 긋느냐는 임의적이고 주관적인 선택입니다.
저라면 소프트웨어 라이브러리를 재구현하는 것, 아니 새 아키텍처로 포팅하는 것은 에뮬레이션으로 치지 않겠습니다. 게임 코드 자체를 변환할 수 있다면 그 코드가 의존하는 라이브러리라고 변환하지 못할 이유가 있나요?
WINE이 에뮬레이터가 아니라면 YAML도 마크업 언어가 아니겠네요.
WINE을 에뮬레이션으로 본다면 실행 파일을 어떤 식으로든 변환할 거라고 기대하겠지만, WINE은 바이너리를 있는 그대로 불러와서 실행합니다. PE/COFF 로더를 제공하고, 윈도 API를 리눅스 네이티브 구현으로 대체하는 거죠. 원본 실행 파일의 기계어 코드가 프로세서에서 직접 실행됩니다.
Yelling At My Laptop(내 노트북에 소리 지르기)이겠죠.
얼마 전에 Fable한테 할 일 목록을 관리하고 편집할 수 있는 작은 CRUD 앱을 짜 달라고 했어요. 그랬더니 데이터베이스를 git에 저장하는 YAML 파일로 만들었더라고요. 왜 데이터베이스를 안 쓰냐고 물었더니, 원할 때 언제든 파일을 직접 편집할 수 있고, 원하는 곳으로 동기화할 수 있고, git 병합으로 일관성도 믿을 만하게 유지되니까 원격 데이터베이스 작업에 의존할 필요가 없다면서 그 선택을 옹호하더군요.
Yelling At Your Application(당신의 애플리케이션에 소리 지르기)이네요.
제가 보기엔 바이너리를 그냥 통째로 컴파일해서 넣은 에뮬레이터 같습니다. 이런 코드가 엄청나게 많거든요.
https://github.com/jessicanataliagta/PSPRecomp/blob/main/profiles/vcs/generated/generated_unit_0000.cpp
보고 웃음이 났네요.
참고로 PSP로 나온 갓 오브 워 두 편은 이 플랫폼에서 그래픽이 가장 인상적인 게임으로 꼽혔습니다. 둘 다 콘솔 수명 후반(2008년과 2010년)에 나왔고요.
IGN 리뷰는 그중 한 편을 두고 "상당수의 PS2 게임보다 나아 보인다"고 평했습니다. [0] 저도 한 편을 해 봤는데, 정말 크기만 줄인 PS2 게임을 하는 느낌이었습니다.
[0] https://web.archive.org/web/20121020044819/http://www.ign.com/articles/2010/10/25/god-of-war-ghost-of-sparta-review
맞아요, 이 게임이 RAM 32MB짜리 포켓 사이즈 콘솔에서 돌아갔는데 그래픽이 그렇게 좋고 세밀했다니까요!
RAM 32MB라니, 대단하네요.
저는 오히려 요즘은 기본적인 소프트웨어가 돌아가는 데 수백 MB의 RAM이 필요하다는 게 더 놀랍습니다.
개발사는 Ready at Dawn입니다. 이후 인터랙티브 영화 The Order 1886(평가는 좋지 않았죠)을 만들었고, Facebook에 인수된 뒤에는 호평받은 VR 게임(Lone Echo, Lone Arena)을 만들었다가, VR로는 충분한 돈을 벌 수 없어서 문을 닫았습니다.
제 기억엔 PSP를 오버클럭했던 걸로 아는데요?
출시 때부터 2007년까지 PSP는 222MHz로 제한되어 있었습니다. 펌웨어 3.50 이후 333MHz 전체가 풀렸고요. 갓 오브 워 시리즈는 그 이후에 나왔으니 333MHz를 다 썼을 거라고 봅니다.
상업용 소프트웨어 대부분이 서버 사이드 렌더링이나 스트리밍으로만 가는 건 언제쯤일까요? 2027년 1월쯤엔 GTA 6를 바이브 코딩으로 만들고 있는 거 아닐까요?
스태디아를 다시 켤 거예요. 요즘 개인용 그래픽 카드랑 메모리를 누가 살 수 있겠어요?
그런데 마이크로소프트는 자사 스트리밍 플랫폼 가격을 올리고 있어요. https://www.cnbc.com/2026/09/03/microsoft-xbox-game-pass-cloud-limits.html
그 GPU를 LLM 추론이나 학습에 쓸 수 있는데 게임 스트리밍을 감당할 여력이 누구한테 있겠어요?
구글이요. 그걸로 유명하잖아요. (힌트: TPU)
AI가 에뮬레이션 거품을 완전히 박살 내고 있어요. 이젠 에뮬레이션을 하는 게 아니라 그냥 리버스 엔지니어링해서 게임을 바로 포팅하잖아요. 오래된 게임 보존에는 최고의 시대입니다. 이 인간들은 이제 그 게임들로 돈을 벌지도 않으면서 IP를 풀지도 않고, 옛 게임을 더 접근하기 쉬운 새 플랫폼용으로 내놓지도 않아요. 그래서 이런 개발자들이 해 온 작업이 정말 고맙습니다.
솔직히 저는 멋진 시대라고 생각하지 않아요. AI는 다들 하나(혹은 두 개)의 프로젝트에 모여 기여하는 대신 각자 알아서 하게 부추기는 면이 있는데, 오픈 소스 전체에서 제가 걱정하는 부분이 바로 그거예요. AI를 써서 하나의 디컴파일 프로젝트에 기여하고, 그걸 최대한 좋게 만들면서 게임에 대한 지식을 모았다면 훨씬 더 나았을 거예요. 그런데 지금은 어설프게 바이브 코딩한 포팅이 산더미처럼 쏟아지고 있죠.