Представьте, что вы можете запустить эксклюзив с PlayStation 5 на своем десктопе без просадок до 15 кадров в секунду и многочасовой возни с настройкой виртуальной машины. Пока геймеры спорят о графике, системные инженеры тихо совершают революцию: эпоха тяжеловесной эмуляции железа трещит по швам. Прямо сейчас, когда вы читаете эти строки, граница между консольным софтом и ПК-архитектурой стирается быстрее, чем успевают устаревать видеокарты (и пока тимлид не заметил, что вы тестируете это в рабочее время).

Введение: смена парадигмы в мире обратной совместимости

Исторически сложилось так, что запуск консольных игр на персональных компьютерах ассоциировался с тяжеловесной эмуляцией. Такие проекты, как RPCS3 для PlayStation 3 или более современные разработки вроде KytyPS5 и shadPS4, пытаются полностью воссоздать архитектуру железа целевой консоли на уровне процессоров, видеочипов и специализированных сопроцессоров. Это требует колоссальных вычислительных мощностей, огромных затрат времени на реверс-инжиниринг и приводит к неизбежным потерям производительности. Однако индустрия реверс-инжиниринга не стоит на месте, и сегодня на арену выходят принципиально новые подходы.

С появлением проекта AnyPS5 (доступного на GitHub в репозитории boykopovar/AnyPS5) разработчики сделали ставку на радикально иной подход — прямой маппинг системных библиотек и бинарное портирование без классической эмуляции «железа». Концепция заключается в том, чтобы взять исполняемый файл игры для PlayStation 5, адаптировать его под окружение Windows или Linux и перенаправить системные вызовы «на лету». На текущем этапе развития проекта уже замапплено впечатляющие 87% системных библиотек PS5, что открывает новую эру в исследовании консольного софта на ПК.

Но как именно код консоли начинает понимать чужую для него операционную систему? Давайте заглянем под капот и разберем этот механизм по байтам.

Архитектурные отличия AnyPS5 от традиционных эмуляторов

Чтобы понять революционность AnyPS5, необходимо взглянуть на то, как работают классические эмуляторы. Они эмулируют процессор архитектуры x86-64 (хотя PS5 использует кастомный восьмиядерный Zen 2), графический API (Gnm/Gnmp от Sony, транслируя его в Vulkan или DirectX 12), а также всю операционную систему Orbis OS / Prospero OS. Это порождает чудовищный оверхед.

AnyPS5 решает проблему совместимости совершенно иначе. Поскольку и PS5, и современный ПК работают на базе архитектуры x86-64, сам машинный код центрального процессора в основных игровых циклах уже является нативным для ПК. Главная сложность кроется не в инструкциях CPU, а в системном окружении: вызовах графического API, управлении памятью, работе с потоками и файловой системой (примерно как заставить легаси-код двадцатилетней давности работать на свежем компиляторе).

Инструмент берет на себя задачу трансляции этих системных вызовов. Вместо эмуляции «железа» создается слой совместимости, который подменяет проприетарные библиотеки Sony их ПК-эквивалентами или трансляторами. По своей философии это ближе к тому, как Proton запускает игры для Windows на Linux, только в данном случае целевой платформой выступает ПК, а исходной — проприетарная экосистема PlayStation 5.

Однако мало просто перехватить вызовы — нужно правильно связать их с железом компьютера, и здесь в игру вступает ключевой компонент архитектуры.

Инструментарий и роль компонента relinker

Сердцем проекта AnyPS5 является специализированный инструмент конвертации и связывания, известный как relinker. Без него прямой запуск бинарников был бы невозможен из-за различий в форматах исполняемых файлов, таблицах импорта/экспорта и адресации памяти.

Когда разработчик или исследователь пытается подготовить бинарник PS5 к запуску на ПК, процесс выглядит следующим образом:

  • Парсинг ELF-файла игры и извлечение таблиц импорта для проприетарных модулей Sony (sceKernel*, libSceGnmDriver и др.).
  • Динамическая подмена адресов с помощью утилиты relinker, которая перенаправл