Sunday, September 1st, 2013
In June of 2013 Sony and Microsoft unveiled the hardware details of their next entries into the upcoming console generation — the PS4 and Xbox One, respectively. Like many others, I couldn't help but notice the similarities between the two platforms. Both supposedly use an 8 core AMD Jaguar based CPU and a Radeon GCN GPU, integrated into an AMD Fusion package. Both platforms also have 8GB of unified memory and a Blu-ray drive.
The architectural differences seem to lie within the individual configurations of each component. For example, the PS4 uses GDDR5 memory, whereas the Xbox One uses DDR3. Both companies also claim to have customized their hardware in additional unique and undisclosed ways. Yet despite these differences, these two systems might actually execute extremely similar instruction sets and command buffers.
Given these similarities, what would it take to run an Xbox One game on a PS4, or vice versa?
The answer is an enormous amount of time and energy. Even if we assume that the architectural similarities simplify some of the common emulation hurdles such as JIT code generation and real-time (p)reformatting of high bandwidth resources (e.g. textures), there remain a number of extremely challenging hurdles to overcome, such as:
Security Models: Both Microsoft and Sony invest heavily in their security models to prevent the execution of unauthorized code on their hardware. In order to bridge these platforms a developer would need to circumvent both models, which could involve:
Decryption of the game code and content (potentially off a Blu-ray disc or hard drive)
Extraction and decryption of operating system code, interrupt vectors, memory tables, and other proprietary information
Corruption of hypervisor/supervisor state to gain the privileges necessary to execute (and potentially modify) code
An understanding of the in-memory security features of both platforms and a way to circumvent them
Management of online security authentication mechanisms
Component Support: a nontrivial amount of processing for a game is performed by system libraries and components. Some of these components may be packaged within the game itself or pre-installed on the console. In order to bridge the Xbox One and PS4, a developer would need to detour system calls properly, and provide custom alternatives that support the game in the expected ways.
Graphics Resources: both systems rely heavily on GPU resources such as shader programs and textures that may be dynamically created/compiled/executed and differ in terms of supported features and formats on each platform.
Thin Abstraction Layers: game developers typically code "to the metal" when working on these types of systems. This means that the platform development kits provide very low level access to the hardware through relatively thin abstraction layers. As a result, game developers may take advantage of unique characteristics on a platform that are difficult to simulate on alternate hardware.
Hardware Asymmetries: although the core components of the two systems share similarities, the rest of these platforms are quite different (e.g. the Kinect vs. the PS Eye). Overcoming these asymmetries would be extremely difficult due to the physical limitations of the devices.
Of course, there are many more reasons why this feature would be extremely difficult to complete, but this list provides some insight into the types (and severity) of problems that would arise. Given these, I wouldn't expect anyone to supply this feature anytime soon (if ever), however I am always amazed by what the hacker, homebrew, and developer communities are able to accomplish just for the fun of it.