Areas That Need Help
Have some spare time, know advanced C++, and want to write an emulator? There’s a ton of work that needs to be done:- Game Compatibility: Help work through missing functionality and bugs in games
- Performance: Reduce the size of Xenia’s huge log files
- Linux Support: A strong contributor is needed to help with porting
- Good First Issues: See projects good for contributors
Before You Start
Read the Style Guide
Please read the style guide before sending pull requests. The buildbot will check your code formatting, so it’s important to follow the guidelines from the start. Quick rule: Runxb format before you add a commit and you won’t have problems.
Information Sourcing Rules
All information in Xenia has been derived from:- Reverse engineering legally-owned games and hardware
- Tools made public by Microsoft (such as XNA Game Studio)
- Public documentation from Microsoft (slide decks, conference presentations)
- Code made public by 3rd party companies (like Valve SDKs)
Contributing Code
Referencing Sources
When writing code that interacts with guest interfaces or protocols, please leave comments describing how the information was obtained. For code based on analysis of Xbox 360 hardware or software, provide:- Reproduction information
- Algorithm outlines
- Function call arguments and results
- GPU or XMA commands and state register changes
- Verifying the legality of submitted code
- Enabling additional research based on your findings
- Evaluating accuracy and completeness
If you verified your code using a game, do not refer to it by its title trademark. Instead, use the hexadecimal title ID number displayed in the title bar. Avoid using proper names of game content.
TODO Comments
If you’re unsure about code accuracy or want more research done, use TODO comments in this format:No Game-Specific Code
- Do not leave hard-coded references to specific games in the UI or configuration
- Game identifiers in the UI must only come from user-provided data
- Any workarounds must be expressed in terms of the common interface
Clean Git History
Tools likegit bisect are used regularly to identify regressions, requiring a clean git history.
Requirements:
- Individual commits must add functionality in a working form
- Each commit must fully compile and run on its own
- Small pull requests with a single commit are best
- Multiple commits are allowed only if kept clean
Bad Commit History Example
Good Commit History Example
GitHub Workflow
- Fork the repository on GitHub
- Clone your fork locally
- Create a branch for your feature or fix
- Make your changes following the style guide
- Run
xb formatbefore committing - Test your changes thoroughly
- Commit with clear messages describing the changes
- Push to your fork and create a pull request
- Respond to feedback from maintainers
Testing Your Changes
Before submitting a pull request:- Build the project with
xb build - Test with actual Xbox 360 game files
- Check for regressions in previously working games
- Verify all commits compile and run individually
- Run
xb formatto ensure code style compliance
Issue Tracker Guidelines
The issue tracker is exclusively for:- Filing and discussing bugs
- Feature requests
- Tracking work items
- Technical support (use Discord instead)
- General discussion
- Discussing illegal activity
License
All Xenia code is licensed under the 3-clause BSD license. Code underthird_party/ is licensed under its original license.
Key points:
- Incoming pull requests are subject to the Xenia license
- Copyright is ascribed to the project to prevent future disputes
- Xenia will never be sold or made closed source
- The license will never change to a fundamentally incompatible one
Third-Party Code
Anythird_party/ code added will be reviewed for license conformance:
- GPL code is forbidden (except for development-time tooling like compiling)
- LGPL code is strongly discouraged as it complicates building
Community
Join us on Discord to chat about emulator-related topics. For developer discussions, join the#dev channel but stay on topic.
We have jobs and lives, so don’t expect instant answers. Lurking is not only fine, but encouraged! Check the FAQ before asking questions.
