← 블로그로
Ai약 14 분 읽기

AnyPS5: PS5 실행 파일을 에뮬레이션 대신 다시 링크하는 프로젝트

게시일 2026년 10월 18일
AnyPS5: PS5 실행 파일을 에뮬레이션 대신 다시 링크하는 프로젝트

GitHub에서 왜 뜨는지 아무도 글로 남기지 않는 부류의 프로젝트가 있습니다. AnyPS5도 그중 하나입니다. 주간 차트 1위에 새 스타 약 16,000개, 커밋은 10,000에 가깝습니다. 그리고 한 줄 소개——"PS5 실행 파일을 리눅스와 윈도우로 자동 이식하는 도구"——는 변호사가 펜을 찾게 만들고 엔지니어가 북마크를 누르게 만드는 그런 문장입니다.

흥미로운 건 이게 존재한다는 사실이 아니라, 이 프로젝트가 무엇이 되기를 거부하는지입니다.

에뮬레이터도, 런타임도, 창 안의 콘솔도 없다

PC에서 콘솔 소프트웨어를 돌리는 프로젝트는 대부분 에뮬레이터입니다. 하드웨어를 모델링하죠. CPU, GPU, 메모리 배치, 타이밍까지. 잘 되면 경이롭고, 안 되면 10년짜리 노가다가 됩니다. 완전한 문서를 아무도 가진 적 없는 기계의 불완전한 모델을 놓고 게임마다 협상을 벌여야 하니까요.

AnyPS5는 다른 길을 갑니다. PS5 실행 파일을 타깃 플랫폼의 네이티브 포맷으로 변환하는 relinker를 제공하고, 그 실행 파일이 링크되리라 기대하는 시스템 prx 라이브러리 구현체도 함께 넣었습니다. README는 그 결과를 노골적으로 적어 둡니다. 에뮬레이션 없음, 별도 런타임 프로세스 없음. 게임 코드는 네이티브 코드로 당신의 기계 위에서 돌고, 원래 소니의 라이브러리를 호출하던 자리에서 재구현된 시스템 라이브러리를 호출합니다.

훨씬 지키기 어려운 약속이고, 지켜낸다면 훨씬 값진 약속입니다. 에뮬레이션은 모든 명령어에 세금을 매깁니다. 재링크는 경계에만 세금을 매기죠. 게임에서 시스템 계층으로 넘어가는 그 호출들에만.

성패를 가르는 부분: 셰이더

게임은 대체로 게임 옷을 입은 셰이더 덩어리입니다. PS5 타이틀은 특정 그래픽 스택용으로 컴파일된 GPU 프로그램을 실어 보내고, 윈도우나 리눅스 머신은 드라이버가 소화할 수 있는 형태를 원합니다. AnyPS5에는 SPIR-V를 내놓는 셰이더 재컴파일러가 들어 있고, 빌드에서 ANYPS5_ENABLE_SPIRV_TOOLS를 켜면 SPIRV-Tools로 출력을 검증한다고 저장소에 적혀 있습니다.

SPIR-V 검증은 게임이 돌아가는 것과 다릅니다. 생성된 모듈이 구조적으로 합법이라는 뜻일 뿐이죠. 그 차이는 "어쩌면 돌아갈지도"와 "드라이버가 거부할 건데, 그게 디버깅이 미치도록 어려운 방식으로 거부될 것" 사이의 차이입니다. 까만 화면을 붙잡고 저녁 하나를 태워 본 사람이라면 그 검사가 얼마짜리인지 알 겁니다.

프로젝트의 진행 상황 페이지는 숫자의 의미에 조심스럽습니다. 라이브러리 커버리지는 "프로젝트가 지금까지 선언한 함수" 중 구현된 비율이지, PS5가 노출하는 모든 함수 대비 비율이 아닙니다. 정직한 틀이고, 동시에 자신들이 모르는 게 얼마나 많은지 알아갈수록 이 퍼센트가 움직일 거라는 뜻이기도 합니다.

일부러 이렇게 실패한다

설계 결정 하나가 이 코드베이스의 성숙도를 잘 보여 줍니다. 지원하지 않거나 예상 밖인 상태에서는 std::runtime_error를 던지고, 메시지를 stderr로 보낸 뒤 프로세스를 종료합니다.

야만적으로 들리지만 옳은 판단입니다. 대안은 추측하고, 계속 진행하고, 상태를 망가뜨리는 것인데, 그렇게 하면 세 프레임 뒤에 실제 버그와 아무 상관 없는 지점에서 터집니다. 이 단계의 프로젝트에 필요한 건 크고, 이르고, 구체적인 실패입니다. 10월 중순 커밋 하나가 바로 이런 순서 문제로 생긴 윈도우 테스트 행을 고쳤습니다. 윈도우에서는 main에서 반환하는 테스트가 exit를 거치는데, exit는 DLL detach 시점에 정적 소멸자가 돌기 전에 다른 스레드를 전부 죽여 버립니다. 그때 어떤 소멸자가 이미 죽은 로거를 기다리고 있으면 영원히 돌아오지 않죠. 수정은 MinGW에서 main을 감싸고 libc를 통해 프로세스를 종료하는 방식입니다. 화려한 작업은 아닙니다. 하지만 데모와 도구를 갈라놓는 건 바로 이런 작업입니다.

입력, 그리고 사소하지만 중요한 것들

SDL로 매핑된 컨트롤러는 됩니다. 아날로그 스틱과 트리거까지 포함해서요. 키보드와 마우스는 anyps5-input.ini 파일로 설정합니다. 파일을 로컬에서 처리하는 웹 변환기도 있어서 아무것도 업로드되지 않습니다.

게임별 호환성은 README에서 관리하지 않습니다. 공개 GitHub 데이터로 만든 커뮤니티 blocker map에 있고, 타이틀별 테스트 리포트는 저장소 discussions의 스레드에서 다룹니다. 뭘 내려받기 전에 이걸 이해해 두는 게 좋습니다. 이 프로젝트가 추적하는 건 각 타이틀이 어디서 막히는지이지, 잘 돌아가는 게임들의 초록색 목록이 아닙니다.

정말로 읽어야 하는 그 법적 문장

면책 조항은 이 프로젝트가 상호운용성, 연구, 보존, 호환성을 위한 것이라고 말합니다. 저작권이 있는 소프트웨어, 펌웨어, 암호 키, 독점 라이브러리를 포함하지도, 배포하지도, 요구하지도 않는다고 밝힙니다. 그리고 사용하는 바이너리가 적법하게 입수되고 적법하게 사용되었는지 확인할 책임은 사용자에게 있다고 덧붙입니다.

아주 조심스럽게 그은 선이고, 동시에 전부입니다. 도구 자체는 GPL-2.0-only이고 게임 데이터를 전혀 담고 있지 않습니다. 무엇을 넣을지는 당신 문제입니다. 그리고 대부분의 관할권에서 "내가 직접 재링크했다"는 법정에서 검증된 항변은 아닙니다.

경계는 실제로 어디에 있는가

relinker의 일은 심볼 해석입니다. 실행 파일은 함수를 이름으로 요구하고, 도구는 그 이름 하나하나가 로드 시점에 호출 가능한 무언가로 해석되도록 보장해야 합니다. 올바른 호출 규약으로, 그리고 그 바이너리가 빌드된 기계가 아닌 기계 위에서요. 하나를 놓치면 프로세스는 시작하자마자 죽습니다. 대개는 라이브러리 이름 하나만 적힌 메시지를 남기고요.

그래서 이 프로젝트의 커버리지 페이지가 저장소에서 가장 정직한 문서입니다. 보고하는 건 선언된 함수 중 구현된 비율——PS5의 전체 API 표면 대비 비율이 아닙니다. 그 차이는 어마어마하고, 팀이 모르는 것의 크기를 알아갈수록 퍼센트는 내려갑니다. 대부분의 프로젝트는 이 역학을 숨깁니다. 이 프로젝트는 숫자 옆에 주석을 붙였습니다.

GPU 쪽도 논리는 같습니다. 셰이더 변환은 하나의 문제가 아니라 셰이더마다 다른 문제입니다. 이십 분 동안은 제대로 그리다가, 번역되지 않은 명령어 경로를 밟는 순간 드라이버 버그처럼 보이는 방식으로 죽는 타이틀이 그렇습니다. SPIR-V 검증 단계는 구조적 문제를 일찍 잡습니다. 의미론적 문제는 못 잡고, 프로젝트도 잡는다고 주장하지 않습니다.

그러니 실용적인 질문은 "돌아가냐"가 아니라 "내 타이틀은 어디서 멈추냐"입니다. blocker map이 게임별로 그 답을 주고, 열린 이슈가 붙어 있습니다.

왜 하필 지금 떴나

보존이라는 주제가 한창입니다. 디스크 부식, 스토어에서 내려간 게임, 꺼 버린 서버——소프트웨어를 계속 돌아가게 유지할 이유는 더 이상 감상이 아니라 실무입니다. relinker는 에뮬레이터와는 다른 의미에서 보존 도구입니다. 기계를 모델링할 필요 없이, 소프트웨어가 기대하는 인터페이스만 만족시키면 되니까요.

더 단순한 설명도 있습니다. 프로젝트가 거대하고, 커밋이 백 단위로 쏟아지고, 그 상당수는 코딩 에이전트를 루프에 넣고 쓴 게 뻔합니다. 저장소에는 에이전트가 잘 어기는 규칙을 적어 둔 AGENTS.md까지 들어 있습니다. 10,000 커밋짜리 프로젝트가 두 달 반쯤 만에 쌓여 가는 광경은 그 자체로 볼거리이고, 게임이 몇 개 부팅되느냐와 거의 무관한 스타 곡선을 설명해 주기도 합니다.

그래서 어떻게 쓸 것인가

적법하게 구한 실행 파일과 남는 저녁 하나가 있다면, 정직한 기대치는 이렇습니다. 현대 콘솔 타이틀이 어떻게 조립되는지 아주 많이 배우게 될 것이고, 아마 게임을 끝까지 못 깰 것입니다. 먼저 자기 타이틀의 blocker map을 읽으세요. 이슈를 올리기 전에 기술 부채 문서를 읽으세요. 그리고 이걸로 만든 걸 배포하기 전에 라이선스를 읽으세요.

결국 몇 개의 타이틀이 부팅되든 더 큰 요점은 남습니다. 20년 동안 "이 콘솔 소프트웨어를 다른 곳에서 돌릴 수 있나"의 답은 "누군가 기계를 에뮬레이트하면"이었습니다. AnyPS5는 두 번째 답을 향한 진지한 시도이고, 이게 공개된 자리에서, 이 속도로, 이렇게 화려할 것 없는 배관 작업과 함께 쓰이고 있다는 사실이 이 프로젝트가 트렌딩 페이지에 있어야 하는 이유입니다.

관련 글