Interview With gdkchan, Project Founder
When did you first become interested in software development? Do you feel the same about it today or have your thoughts changed?
I first became interested when I was 9 years old. It was mostly because I used to play a lot of games (usually old stuff, at that time), and wanted to create my own. I think I still feel pretty much the same way about programming: it can be a lot of fun, and also a lot of stress.
When did you first begin developing for Ryujinx and what did you implement?
Technically, development on Ryujinx started in October of 2017 when I started writing the CPU emulation code. I only actually started working on Ryujinx as an emulator in December of 2017, as before that the only code was the Armv8 CPU emulator I’d written, and it was not called Ryujinx.
What factors influence your direction when planning your next implementation/bugfix in the emulator?
The games that would be affected by a bugfix or new feature are the main driving force for me. If the game interests me, I feel more motivated to fix the issue. Doesn't need to be something I have played before; I just look at some screenshots and gameplay videos. If it’s something that piques my interest, I'm more likely to try fixing it. The number of games that benefit from the change, or the resulting improvement to code maintainability, are also important factors I take into account.
On a related note, Puyo Puyo Tetris was the first commercial game ever to boot in a Switch emulator. What made you choose this game to be the very first? Was it simply easier to emulate, or was there another reason?
The Switch didn't have very many games at the end of 2017. I knew it would be better to start with something simple as opposed to something more complex, and Puyo Puyo Tetris looked like a good candidate since it is a rather basic 2D game. On top of that, I’m also a Puyo Puyo fan, having played some of the older games. It turned out to be a somewhat easy to emulate game, so I think I made the right choice.
The GPU emulation for this game was pretty simple: to show the two logos, the game basically just draws a textured square, so it can't get much simpler than that. Back in the day I had no clue about how the GPU worked, so I was basically just looking at the commands the game submitted and trying to guess what they do. Later on I found documentation on nouveau (open-source NVIDIA driver), which helped a bit. I started by dumping the game’s textures that it uses to disk, and then decoded the texture data using an external tool. This way I was able to verify that it was submitting the correct textures and, after that, I implemented the basics required to make it actually render to screen. It was very exciting seeing it working for the first time.
I think most of the complication was the audio renderer features that it uses, it took quite some time until they were implemented, and without them the game would get stuck after fading out the Tetris logo, or in the menus.

Puyo Puyo Tetris booting on an early version of Ryujinx
What's the biggest single challenge you've faced as a software developer and how did you overcome it?
I have already faced many challenges during my development; it’s hard to say which one was the biggest of them all. I think for Ryujinx one of the biggest challenges was the GPU rewrite I did back in 2019. I spent some time reverse engineering NVN (the Switch main graphics API designed by NVIDIA) code to understand how the GPU works better. Then I was able to write the GPU emulation code and fix many bugs that were present on the old implementation. I also did not have much experience with many other things that I also had to implement (OS implementation etc.), since my only previous experience was emulating older consoles like the NES, SNES and GBA. But it’s just a matter of learning. Now I understand it all much better.
What projects are you working on outside of Ryujinx?
I work on some modding tools, and I am also part of a fan game translation group. I write tools to enable the translators in the group to modify the game text. One of the projects that I still need to finish is a Legend of Legaia (PSX game) text editing tool. However, these side projects are on hold right now.
What is one thing about Ryujinx that most people may not know?
I think most people don’t know why it is called Ryujinx. The name is actually a fusion of "Ryujin", the Japanese dragon god of the sea, and "NX", which was the Switch codename during development. The name itself was inspired by "RyuJIT", which is the name of .NET JIT compiler. "RyuJIT" is also a derivative from "Ryujin", and the reason Microsoft used this name was because a famous book about compilers has a dragon on the cover, and is commonly called "The Dragon Book" due to that fact.
It's pretty funny listening to people trying to say the name “Ryujinx”; I’ve heard it pronounced in many different ways. Maybe I should have come up with a simpler name. To be honest I wasn’t thinking that far ahead back then.
What was your favorite improvement to Ryujinx in 2020?
It’s hard to pick just one because we had many improvements in 2020, so I’ll pick two: those are 32-bit games support and the new audio renderer. It was pretty exciting to see these games working for the first time, and the implementation was completed much faster than what I was expecting, so kudos to riperiperi for making it happen in such a short time period! I had quite a few 32-bit games piling up that wouldn't boot due to the lack of the 32-bit support, and as expected the first thing I did once the initial 32-bit support landed was to take them for a spin. 32-bit games had never been supported before in Switch emulation, so this is a pretty big deal.
The audio renderer rewrite was also a game changer. Many games had completely broken audio before this release; it’s basically a night and day difference with the new audio renderer. It's a completely different experience on games like Mario Kart 8 Deluxe and Splatoon 2, for example. It also fixed some game breaking bugs and made others progress further, such as Persona 5 Scramble. And as with 32-bit support, Ryujinx was also the first Switch emulator to fully implement the audio renderer. On that front I would like to thank Thog as well for the excellent job she did on the new audio renderer.
If you could choose one thing to implement next in the emulator, what would it be?
I really want to work on low level emulation of the Switch hardware. The ultimate goal is being able to run/emulate the Switch ports of Linux and Android. It's just something that I find exciting, though I don't think many people will be interested in it. At the end of the day, most of the public interest is in getting Switch exclusive games running on other platforms. I don't know if I will work on low level emulation or not; maybe one day...
Join us next month for another Meet the Team developer Q&A!
Ryujinx
2021-04-04 06:22:50 +0000 UTCMilos Andjelkovic
2021-03-24 18:31:54 +0000 UTCQuinton Ashley
2021-02-17 03:15:23 +0000 UTC