
무슨 일이 있었나요?
GitHub에 AnyPS5라는 프로젝트가 올라왔어요. 소개 문구가 꽤 대담한데요, PS5 바이너리를 에뮬레이션 없이 PC로 포팅하고, 시스템 라이브러리의 87%를 매핑했다고 해요.
콘솔 게임을 PC에서 돌린다고 하면 보통 에뮬레이터를 떠올리잖아요. 그런데 에뮬레이션을 안 한다니, 어떻게 가능한 걸까요? 이 질문을 따라가다 보면 요즘 콘솔 구조와 Wine, Proton 같은 호환 레이어 기술을 한 번에 이해할 수 있어요. 게임에 관심이 없는 분이 읽어도 재미있는 주제예요.
에뮬레이션 vs 호환 레이어
먼저 에뮬레이션은 다른 기계의 CPU를 소프트웨어로 흉내 내는 거예요. 예를 들어 닌텐도 스위치는 ARM CPU를 쓰고 PC는 x86 CPU를 써요. 둘은 기계어 자체가 달라서, 스위치 게임의 명령어를 하나하나 PC용 명령어로 번역해야 해요. 외국어 책을 통역사가 옆에서 한 문장씩 읽어주는 것과 비슷해요. 당연히 느리고, 그래서 고성능 PC가 필요하죠.
PS4와 PS5는 사정이 달라요. 둘 다 AMD의 x86-64 CPU를 쓰거든요. PS5는 Zen 2 기반 CPU와 RDNA 2 계열 GPU를 쓰는데, 일반 게이밍 PC와 사실상 같은 계열이에요. 그래서 게임 코드의 CPU 명령어는 번역 없이 PC CPU에서 그대로 실행할 수 있어요. 같은 언어를 쓰는 사람끼리는 통역이 필요 없는 것처럼요.
문제는 게임이 혼자 돌아가지 않는다는 거예요. 게임은 파일을 열고, 메모리를 잡고, 컨트롤러 입력을 받고, 화면을 그리려고 운영체제와 시스템 라이브러리를 계속 호출해요. PS5 OS는 FreeBSD를 기반으로 소니가 크게 손본 독자 시스템이라, PC는 이 호출들을 알아듣지 못해요. 그래서 '이 PS5 함수가 호출되면 PC에서는 이렇게 처리해라'라는 대응표, 즉 매핑이 필요해요. '시스템 라이브러리 87% 매핑'은 이 대응 작업이 그만큼 진행됐다는 뜻으로 읽을 수 있어요.
이 방식은 리눅스에서 윈도우 프로그램을 돌리는 Wine과 원리가 같아요. Wine이라는 이름 자체가 'Wine Is Not an Emulator'의 약자예요. CPU를 흉내 내는 대신 윈도우 API 호출을 리눅스 기능으로 바꿔주거든요. 밸브가 스팀덱에 쓰는 Proton도 Wine을 바탕으로 만들어졌고요.
진짜 어려운 부분은 따로 있어요
다만 87%를 '게임의 87%가 돌아간다'로 받아들이면 안 돼요. 게임이 실행되려면 그 게임이 호출하는 함수가 전부 제대로 동작해야 하고, 남은 13%에 하필 핵심 기능이 들어 있을 수도 있거든요. 함수 이름만 연결한다고 끝나는 것도 아니에요. 동작까지 원본과 똑같아야 해요.
가장 큰 산은 그래픽이에요. PS5 게임은 소니 전용 그래픽 API를 쓰고, 셰이더(GPU에서 도는 작은 프로그램)도 PS5 GPU용 기계어로 미리 컴파일돼 있어요. 이걸 PC에서 그리려면 Vulkan 같은 표준 API로 바꾸고, 셰이더도 PC GPU가 이해하는 형태로 다시 컴파일해야 해요. PS4용 프로젝트인 shadPS4도 CPU 코드는 네이티브로 돌리지만, 그래픽 변환과 셰이더 재컴파일에 오랜 시간을 쏟고 있어요. 그러니 AnyPS5도 아직은 초기 실험으로 보는 게 맞아요. 어떤 게임이 어디까지 동작하는지는 저장소에서 현황을 직접 확인해 보세요.
법적 문제도 짚고 넘어가야 해요. 호환 레이어 자체는 오래전부터 합법적인 영역에서 발전해 왔어요. 하지만 게임 파일은 반드시 본인이 정당하게 소유한 것이어야 하고, 소니의 펌웨어나 키 같은 저작물을 그대로 배포하면 문제가 돼요. 이런 프로젝트들이 클린룸 구현(원본 코드를 보지 않고 동작만 보고 새로 만드는 방식)을 강조하는 이유가 바로 이거예요.
한국 개발자에게 주는 시사점
게임 개발자가 아니어도 배울 게 많아요. 이 프로젝트에는 ABI(애플리케이션 바이너리 인터페이스), 동적 링킹, 시스템 콜, 그래픽 API 변환 같은 저수준 개념이 다 모여 있어요. '프로그램이 실행된다는 게 정확히 뭘까?' 궁금했던 분이라면 코드를 따라 읽기만 해도 공부가 많이 돼요.
이런 기술은 게임 밖에서도 계속 쓰여요. 애플이 Intel에서 Apple Silicon으로 넘어갈 때 쓴 Rosetta 2, 윈도우의 WSL, 레거시 시스템을 클라우드로 옮길 때 쓰는 호환 계층이 모두 비슷한 문제를 풀어요. 기존 바이너리를 새 환경에서 돌리는 문제는 실무에서도 생각보다 자주 만나거든요.
마무리
한 줄 정리: CPU가 같으면 에뮬레이션 대신 시스템 호출만 번역해서 실행할 수 있어요. AnyPS5는 이 방식을 PS5에 적용해 보는 초기 실험이에요.
남은 13%와 그래픽 변환이라는 벽을 생각하면, 이런 프로젝트가 실제로 게임을 플레이할 수 있는 수준까지 갈 수 있을까요? 아니면 기술 데모에서 멈출까요? 여러분 생각이 궁금해요.
🔗 출처: Hacker News