ANNOUNCEMENT [6/7/26]: THIS PROJECT AIMS FOR BROAD SYSTEMS SUPPORT THROUGH A VARIETY OF SOFTWARE TESTS, AND IS INTENDED FOR USE IN XENIA/XENIA CANARY EVENTUALLY.
Why make Rosette and set out to tackle one of the most difficult projects of my coding career? Apple announced for 2028, that it's dropping Rosetta 2. This significant announcement means that for macOS 28, Rosetta 2 will be relegated to only limited contexts, and this abandonment of x86 to ARM64 is why I am writing Rosette. A project like this also can fix many other issues of Windows code running on macOS. For my Xenia Canary PR, over 50k lines of code were removed. The substantial power of Rosette getting adapted to work with an emulator without explicitly targetting the emulator, is the type of support I wish Rosetta 2 had. Actualizing this idea into code is not an easy one, which is why this project is very important and needed in the world of software.
Losing access to Rosetta 2 in 2028 is one of the most critical problems. At this point, Apple is expecting that developers figure out a good tool as replacement. Whilst it will be preserved in the Game Porting Toolkit manner, for developers that need to work with x86 code, an adequate replacement requires a lengthy development process that does not happen in one night.
This framework project aims to provide support at a global shell level, with the aims of easy accessibility and a headache-less setup. Making this project into a framework that can live inside of a codebase is very difficult to do, and an aim of this project. Installing Rosette into a global shell is not a practice everyone wants to follow, and hence, other solutions are needed so this project can be used outside of a user's global shell.
Rosette aims to handle every x86-64 instruction and provide support for macOS 13. This is a rather old operating system, one that can have AVX/SSE support, and an OS that never got said support. Development thus is done entirely in macOS 13 for now. Eventually the OS environment will change to macOS 28, with plans to virtualize all the older OS environments, so this software will retain compatibility with older OSses.
Much of the code created is done entirely in Zig for good reason. It allows me to do abstractions in a C-like form, which includes ASM. Whilst Version 0.16 has some features to be desired regarding how it handles certain tasks with the kernel, Zig's current state is at a good enough place to take on such a demanding project like Rosette. Writing the same C equivalent code would require far too many lines of code, and as much as I like working with C, Zig is just a better language to tack onto the already existing C-code in this project. Zig handles all of the needed piping to make Rosette possible, and works at the incredible speed I need it to.
For UNLV CS218 Students: This program is designed for Mac users to (eventually) run x86-64 code needed for this Assembly based class. Currently, the code is being extensively tested with a variety of different hardware, so that any fundamental problems are properly handled before this tool gets announced.
The included installer .dmg will configure your global shell to work invisibly under the hood, allowing the make command to trigger Rosette if it detects the typical x86-64 project scaffolding that is provided to CS218 students. No additional configuration should be required on your end, the goal is for this shell to run seamlessly without poisoning anything else configured in your shell. It is recommended that if you have a complex shell setup, you configure a profile in which Rosette installs to, or backup your current shell in case some edge case has not been accounted for.
Many x86-64 instructions are translated to ARM64 NEON, however, given that there are over 4000 instructions, there still are many missing integral instructions. Zig is used as a means of evaluating registers before and after function calls, and after each Assembly instruction, to ensure Windows and macOS are on the same page and that the x86-64 output is what NEON also gets.
Here is how I recommend contacting me (which is on Reddit @): u/ryanwisemanmusic :: if you are dealing with any additional problems.