Automatic porting of PlayStation 5 and PlayStation 4 executables to native Linux, Windows, and experimental macOS binaries.
Ryty includes a relinker that converts the executable to the target system's native format and implementations of system PRX libraries suitable for dynamic linking. No emulation, no separate runtime process: guest code runs as host code.
Ryty is a fork of AnyPS5 - see authors and acknowledgments.
- Full AMD SHA extension lowering - all seven SHA-NI instructions (SHA1RNDS4, SHA1NEXTE, SHA1MSG1/2, SHA256RNDS2, SHA256MSG1/2) are lowered to SSE2-only stubs, hardware-verified by a 360,360-assertion suite.
- AMD-only instruction coverage - RDPRU, MCOMMIT, RDPID (with REX.B), PREFETCHW, FEMMS, MONITORX/MWAITX, CLZERO, EXTRQ/INSERTQ and MOVNTSS/SD are lowered in place or through out-of-line stubs; short sites absorb neighbouring instructions.
- PlayStation 4 and PlayStation 5 Support - Auto-detection and explicit console selection (
--ps4,--ps5,--console auto|ps4|ps5) to port both PS4 and PS5 executables. - Experimental macOS Target with Metal -
--macostarget support with Objective-C / Objective-C++ Metal API graphics rendering bridge. - Qt6 GUI (
ryty-gui) on Linux, Windows, and macOS, shipped with the Qt6 runtime bundled (self-contained AppImage on Linux, windeployqt DLL set on Windows). - JSON porting report (
--report) with per-site substitutions, summary counters and warnings. - Hardened parsing -
DT_STRSZ-bounded strings, 8-byte GOT slot alignment checks, and a resilient level-1 NID filter that keeps every reference when CFG analysis cannot run. - Single-file CI - one
CI.ymlbuilds, tests and packages both platforms and publishes releases forv*tags.
Unsupported or unexpected states strictly throw std::runtime_error;
what() is printed to stderr and the process terminates.
The relinker CLI uses only the C++20 standard library.
cmake --preset linux-release # or windows-release in an MSYS2 UCRT64 shell
cmake --build build/linux-release --parallel
ctest --test-dir build/linux-release --output-on-failureQt6 is optional and enables the GUI; without it the build skips the GUI
gracefully (the linux-release-cli preset builds and tests exactly that
configuration). Full dependency and toolchain notes, including the Windows
MinGW requirement for the runtime libraries, are in
docs/user/BUILDING.md.
On Intel hosts, pass --to-intel to the relinker to lower supported
AMD-only instructions in the executable and bundled sce_module/sce_modules
PRX files. Unsupported instructions or stub jumps outside the x86-64
relative branch range produce an error.
ryty-gui wraps the CLI: pick input/output, choose the target system, set
the porting options, watch the colored log and optionally emit the JSON
report. It launches the ryty binary from its own directory. Downloads from
CI ship the GUI with every Qt6 file it needs - see ci/README.md.
A single workflow (.github/workflows/CI.yml) builds and tests Linux and
Windows, packages the GUI with its runtime, and attaches both zips to GitHub
releases for v* tags. Details: docs/dev/CI.md.
- Documentation index
- Building and usage
- Porting pipeline and instruction lowering
- Conventions and technical debt
- Contributing, security policy, code of conduct, changelog
See the game compatibility list for tested games and known issues.
SDL-mapped game controllers are supported, including analog sticks and
triggers. Keyboard and mouse controls can be configured with a
ryty-input.ini file. See input mapping for
the supported devices and configuration format.
This project is intended for interoperability, research, preservation, and compatibility purposes. It does not include, distribute, or require copyrighted software, firmware, cryptographic keys, or proprietary libraries. Users are responsible for ensuring that any binaries used with this project are obtained and used in accordance with applicable laws and their respective license terms.
This project is licensed under the GNU General Public License version 2 only.
Ryty builds on AnyPS5 by Andrii Semkiv (boykopovar) and its contributors: the relinker architecture, the PRX system library implementations, the shader recompiler and the test infrastructure originate from that project.