Yesterday we saw the release of Mira Project for PS4, and today following his 6.20 WebKit PS4 Exploit developer @SpecterDev released via Twitter the OpenOrbis PS4 Toolchain from the OpenOrbis Team allowing scene devs to build ELF (Executable Linkable Format) files for PS4 without using Sony's official software development kit with guides on his YouTube Channel to encourage more involvement and reignite the PS4 scene! 
Download: OpenOrbis.PS4.Toolchain.v0.5.2.pkg (Latest Version) / OpenOrbis.PS4.Toolchain.v0.5.2.exe (Latest Version) / sample-packages.zip / OpenOrbis-PS4-Toolchain-master.zip / GIT
Shortly following came v0.2 proceeded by v0.3, v0.4, v0.5, v0.5.1 and those who don't have access to a PS4 jailbroken console can try to Find a 5.05 / 5.07 Jailbreakable PS4 Console or wait for a Future PS4 Jailbreak Exploit to be publicly released such as what TheFloW previously announced for 6.20 Firmware.
To recap briefly, PS4 MiraCFW 5.05 came proceeding the Sony 4.50 leak via @KromeMods and several PS4 Devkit-related articles including an Installation Script, Windows Setup Guide, ExtDev / IntDev Settings, CTurt Updates, PS4 Homebrew Resources, Demo Videos, Building Payloads, PS4 Homebrew Tools, Setup Tutorial for PS4 Homebrew Development, a Ready-To-Use Development Environment, the open source PS4 DevKit, PS4 Userland DevKit, OpenOrbis DevKit PS4 Library Ports and PS4 6.20 FW.
From the README.md: OpenOrbis PS4 Toolchain
This repository contains the source code and documentation for the OpenOrbis PS4 toolchain, which enables developers to build homebrew without the need of Sony's official Software Development Kit (***). It contains the header files, library stubs, and tools to build applications and libraries for the PS4.
The header files as well as the library stubs may need updating to support yet undiscovered functions, so feel free to fork the repository and make pull requests to update support.
All Visual Studio solution files are assumed VS2017 for now. This will change when the .NET core-based projects drop, which will be VS2019 to allow usage of .NET core 3.1.
Notes
The following projects will be added to this repo within the next few days:
Documentation
Each tool will have an additional README.md file in it's sub-directory giving more specific information on that project. The docs sub-directory also contains additional materials and documentation. Below is an overview of the purpose of each sub-directory:
Setup & Installation
The clang toolchain as well as the llvm linker (lld) is needed to compile and link using this ***. For Windows, these can be downloaded using the Pre-Built Binaries provided by LLVM. For Linux and macOS, the same page contains pre-built binaries, however you can also use the following commands (Debian/Ubuntu):
In the future, we may include pre-built binaries for clang/lld, however for the present, it is required for you to install these separately.
The OO_PS4_TOOLCHAIN environment variable also needs to be set. On Windows, this can be done using the environment variables control panel. On linux, the following command can be added to ~/.bashrc (Debian/Ubuntu):
This is needed so the build scripts and the converter tool know where to look for certain files. It is also recommended you add the root *** directory + /bin to your path variable.
Windows Installer
For Windows, a Nullsoft scriptable installer is provided, which will automate the process of extracting the toolchain files and setting the OO_PS4_TOOLCHAIN environment variable.
Linux
For Linux, after installing the required dependencies and setting up the environment variable as noted above, you'll also want to run the setup-toolchain.sh script in /extra. This will mark all the Linux binaries as executable, as by default they're read/write.
Creating Homebrew Projects
For Windows, /extra provides Visual Studio templates which can be added into your VS installation's templates directory to allow easy creation of homebrew projects. You can also copy and modify the solutions from the provided samples.
For Linux, /extra contains a setup-project.sh script which will create a project directory based on the hello_world sample.
Contribution
Contribution is welcome, the OpenOrbis toolchain is open source after all. For those eager to contribute, we have an actively maintained list of issues on CONTRIBUTING.md that are accessible and would be awesome to get closed. We appreciate anyone who contributes and acknowledgements will be maintained in this README.
Tools
Each tool will have a dedicated README.md file for more specific information on the tool. Below is a generic overview of the tools included in the toolchain currently.
create-eboot
The create-eboot tool takes normal Executable Linkable Format (ELF) files and performs the necessary patches and relinking to create an Orbis ELF (OELF). It will further take this OELF and process it into a final wrapped Signed Executable Linkable Format (SELF). This was made possible thanks to flatz' previous work on the make-fself.py script, which can be found in /scripts. For more information on these formats, see the wiki or /docs.
The create-lib tool is similar to the create-eboot tool, however it produces Playstation Relocatable eXecutable (PRX) library files from a given ELF file.
The create-pkg tool takes a set of files that applications are expected to have (eboot.bin, param.sfo, necessary modules, etc.) and creates a package file (pkg) for them to install on the PS4.
The stub-generator generates the header files and shared libraries (.so) files for linking with PS4 system libraries. The output of this tool can be found in /include/orbis and /lib. These directories are essential to properly link with PS4 libraries.
The miralib library contains C# and Python code for interacting with Mira on the desktop side of things. This includes management of a local list of consoles, connecting to a console, and performing various actions once connected via RPC.
Assistant is actually a suite of tools for aiding in developing PS4 homebrew. This includes a log viewer, a debugger, a launcher for Mira, and a tray application to easily launch all of these.
A replacement readelf tool for reading PS4-compatible ELFs, otherwise known as Orbis ELFs (OELF).
All scripts in the /scripts directory are Python 3 scripts, specifically targeting Python 3.7.0, with the exception of /scripts/make_fself.py. You will need Python installed on your system to run these scripts. Usage of these scripts can be found in /scripts/README.md.
OpenOrbis.
This project is licensed under the GPLv3 license - see the LICENSE file for details.
The accompanying LLVM binaries are licensed under the Apache 2.0 license and is owned by LLVM. Under that license, redistribution is allowed.
Credits + Special Thanks
Contribution
Below is a list of issues that need some help. There are three lists; advanced issues, intermediate issues, and starter issues. Starter issues are issues that can be picked up and worked on without too much hassle or setup. Intermediate issues may require some digging. Advanced issues likely require a lot of work.
Starter Issues
Changelog
Spoiler: OpenOrbis PS4 Toolchain Changelog
Spoiler: Related Tweets
OpenOrbis PS4 Toolchain Part 1 - Overview + Installation
OpenOrbis PS4 Toolchain Part 2 - Creating a Project + Project Structure Overview
OpenOrbis PS4 Toolchain Part 3 - Sample CPU Rendering 2D Images
OpenOrbis PS4 Toolchain Part 4 - Sample Playing Audio
OpenOrbis PS4 Toolchain Part 5 - Building and Testing on the PS4
Update: PS4 SELF File format via PSDevWiki.com: From leaked 6.00b1 Kernel (containing only one segment) the following information can be deduced:
Spoiler
Download: OpenOrbis.PS4.Toolchain.v0.5.2.pkg (Latest Version) / OpenOrbis.PS4.Toolchain.v0.5.2.exe (Latest Version) / sample-packages.zip / OpenOrbis-PS4-Toolchain-master.zip / GIT
Shortly following came v0.2 proceeded by v0.3, v0.4, v0.5, v0.5.1 and those who don't have access to a PS4 jailbroken console can try to Find a 5.05 / 5.07 Jailbreakable PS4 Console or wait for a Future PS4 Jailbreak Exploit to be publicly released such as what TheFloW previously announced for 6.20 Firmware.
To recap briefly, PS4 MiraCFW 5.05 came proceeding the Sony 4.50 leak via @KromeMods and several PS4 Devkit-related articles including an Installation Script, Windows Setup Guide, ExtDev / IntDev Settings, CTurt Updates, PS4 Homebrew Resources, Demo Videos, Building Payloads, PS4 Homebrew Tools, Setup Tutorial for PS4 Homebrew Development, a Ready-To-Use Development Environment, the open source PS4 DevKit, PS4 Userland DevKit, OpenOrbis DevKit PS4 Library Ports and PS4 6.20 FW.
From the README.md: OpenOrbis PS4 Toolchain
This repository contains the source code and documentation for the OpenOrbis PS4 toolchain, which enables developers to build homebrew without the need of Sony's official Software Development Kit (***). It contains the header files, library stubs, and tools to build applications and libraries for the PS4.
The header files as well as the library stubs may need updating to support yet undiscovered functions, so feel free to fork the repository and make pull requests to update support.
All Visual Studio solution files are assumed VS2017 for now. This will change when the .NET core-based projects drop, which will be VS2019 to allow usage of .NET core 3.1.
Notes
The following projects will be added to this repo within the next few days:
- Debugger
- MiraLib
Documentation
Each tool will have an additional README.md file in it's sub-directory giving more specific information on that project. The docs sub-directory also contains additional materials and documentation. Below is an overview of the purpose of each sub-directory:
Directory | Contents |
/bin | Executables for tools for each platform (Windows in /bin/windows and Linux in /bin/linux) |
/docs | Documentation for PS4 format specifications (reverse engineered) and the toolchain itself |
/extra | Extra / miscellaneous files. Currently, this includes project templates for Visual Studio |
/include | Contains header files to compile against when building applications/libraries (PS4 specific files are in /include/orbis |
/lib | Contains library stubs to link against when building applications/libraries |
/samples | Example programs to get you started and for reference |
/scripts | Helpful scripts to view Orbis ELF (OELF) information as well as other various tools |
/src | Contains source code for tools (see /src/README.md for more information on this directory) |
The clang toolchain as well as the llvm linker (lld) is needed to compile and link using this ***. For Windows, these can be downloaded using the Pre-Built Binaries provided by LLVM. For Linux and macOS, the same page contains pre-built binaries, however you can also use the following commands (Debian/Ubuntu):
Code:
sudo apt-get update
sudo apt-get install clang
sudo apt-get install lld
The OO_PS4_TOOLCHAIN environment variable also needs to be set. On Windows, this can be done using the environment variables control panel. On linux, the following command can be added to ~/.bashrc (Debian/Ubuntu):
Code:
export OO_PS4_TOOLCHAIN=[directory of installation]
Windows Installer
For Windows, a Nullsoft scriptable installer is provided, which will automate the process of extracting the toolchain files and setting the OO_PS4_TOOLCHAIN environment variable.
Linux
For Linux, after installing the required dependencies and setting up the environment variable as noted above, you'll also want to run the setup-toolchain.sh script in /extra. This will mark all the Linux binaries as executable, as by default they're read/write.
Creating Homebrew Projects
For Windows, /extra provides Visual Studio templates which can be added into your VS installation's templates directory to allow easy creation of homebrew projects. You can also copy and modify the solutions from the provided samples.
For Linux, /extra contains a setup-project.sh script which will create a project directory based on the hello_world sample.
Contribution
Contribution is welcome, the OpenOrbis toolchain is open source after all. For those eager to contribute, we have an actively maintained list of issues on CONTRIBUTING.md that are accessible and would be awesome to get closed. We appreciate anyone who contributes and acknowledgements will be maintained in this README.
Tools
Each tool will have a dedicated README.md file for more specific information on the tool. Below is a generic overview of the tools included in the toolchain currently.
create-eboot
The create-eboot tool takes normal Executable Linkable Format (ELF) files and performs the necessary patches and relinking to create an Orbis ELF (OELF). It will further take this OELF and process it into a final wrapped Signed Executable Linkable Format (SELF). This was made possible thanks to flatz' previous work on the make-fself.py script, which can be found in /scripts. For more information on these formats, see the wiki or /docs.
- Author: Specter + flatz (fself stuff)
The create-lib tool is similar to the create-eboot tool, however it produces Playstation Relocatable eXecutable (PRX) library files from a given ELF file.
- Author: Specter + flatz (fself stuff)
The create-pkg tool takes a set of files that applications are expected to have (eboot.bin, param.sfo, necessary modules, etc.) and creates a package file (pkg) for them to install on the PS4.
- Author: maxton
The stub-generator generates the header files and shared libraries (.so) files for linking with PS4 system libraries. The output of this tool can be found in /include/orbis and /lib. These directories are essential to properly link with PS4 libraries.
- Author: CrazyVoid
The miralib library contains C# and Python code for interacting with Mira on the desktop side of things. This includes management of a local list of consoles, connecting to a console, and performing various actions once connected via RPC.
- Author: Specter + Kiwi
Assistant is actually a suite of tools for aiding in developing PS4 homebrew. This includes a log viewer, a debugger, a launcher for Mira, and a tray application to easily launch all of these.
- Author: Specter
A replacement readelf tool for reading PS4-compatible ELFs, otherwise known as Orbis ELFs (OELF).
- Author: Specter
All scripts in the /scripts directory are Python 3 scripts, specifically targeting Python 3.7.0, with the exception of /scripts/make_fself.py. You will need Python installed on your system to run these scripts. Usage of these scripts can be found in /scripts/README.md.
- autobuild.py - is an automated pkg generating script based on project dir content (may be unstable, wait for release build)
- dynamic_entries.py - Gets a list of dynamic entries from the dynamic table of Orbis ELFs.
- make_fself.py - Copy of flatz' script to generate fake SELF files. This functionality has now been integrated as a part of create-eboot and create-lib.
- program_headers.py - Gets a list of program headers from the program header table of Orbis ELFs.
- rela_entries.py - Gets a list of relocation with addend (RELA) entries from the relocation table of Orbis ELFs.
- symbol_entries.py - Gets a list of symbols from the symbol table of Orbis ELFs.
OpenOrbis.
This project is licensed under the GPLv3 license - see the LICENSE file for details.
The accompanying LLVM binaries are licensed under the Apache 2.0 license and is owned by LLVM. Under that license, redistribution is allowed.
Credits + Special Thanks
- Specter: Create-eboot/lib relinker, miralib, assistant suite, readelf, samples and documentation
- CrazyVoid: Stub generator, headers, samples and documentation
- maxton: Create-pkg pkg and SFO generation tools
- Kiwidog: Mira stuff, documentation
- flatz: Homebrew research and writeups, SELF reversing and documentation
- m0rph3us1987: Help with debugging stuff
- bigboss / psxdev: Library research and reverse engineering, used for reference by various samples
- LightningMods / LM: Testing via APP_HOME and lib loading help on the Mira side
- MrSlick: Awesome logo
- OpenOrbis Team
- Other anonymous contributors
Contribution
Below is a list of issues that need some help. There are three lists; advanced issues, intermediate issues, and starter issues. Starter issues are issues that can be picked up and worked on without too much hassle or setup. Intermediate issues may require some digging. Advanced issues likely require a lot of work.
Starter Issues
- Add reversed type info for PS4 library function prototypes in /include/orbis/*
- Submit issues for requested features
- Build some basic samples for functionality not covered by existing samples
- Testing on create-lib to ensure exporting and what not works properly
- SDL 2D sample
- Develop MiraLib bindings for other languages
- Build a standardized libc for PS4 for portability and eventually C++ support
- C++ support (see above)
- GPU 2D/3D rendering support
- DOOM port?
Changelog
Spoiler: OpenOrbis PS4 Toolchain Changelog
Spoiler: Related Tweets
OpenOrbis PS4 Toolchain Part 1 - Overview + Installation
OpenOrbis PS4 Toolchain Part 2 - Creating a Project + Project Structure Overview
OpenOrbis PS4 Toolchain Part 3 - Sample CPU Rendering 2D Images
OpenOrbis PS4 Toolchain Part 4 - Sample Playing Audio
OpenOrbis PS4 Toolchain Part 5 - Building and Testing on the PS4

Offset | Size | Description | Notes |
0 | 0x10 | AES Key | CBC 128 Key for Segment 1 |
0x10 | 0x10 | AES IV | CBC 128 IV for Segment 1 |
0x20 | 0x20 | SHA256HMAC | SHA256HMAC for Segment 1 (Decrypted But Compressed in this case) (Without Extra at Footer) |
0x40 | 0x10 | HMAC Key | SHA256HMAC Key for Segment 1 |
0x50 | 0x40 | License + BMP Header | ??? |
0x90 | 0x20 | BMP Entries | 2 (0x10) Entries (First entry is NULL) |
0xB0 | 0x100 | RSA SIG | RSA Signature that validates Header Meta |
Spoiler