Developer Interview Series Part 3: Bunnei! (Patreon)
Content
A very good day to all our Patrons!
As part of our Developer Interviews segment, we have been interviewing our developers every month to give you guys a sneak peek into their lives. And this month, we bring you an exclusive look into the life of the author of two popular and successful emulators - Citra (3DS) and yuzu (Switch) - bunnei!
It was very hard to get hold of this man, for he is always ever so busy. But after a bit of pressure, he finally surrendered and sat with us for this wonderful interview. So without further ado, let's begin!
~
We began the interview by asking the most important question. A question of immeasurable significance. A question that has been gnawing the minds of everyone who heard about him.
Q: So bunnei, are you secretly a real life bunny rabbit?
B: I am not -- Sorry to disappoint!
Q: To be honest, I am a bit shaken after hearing that. But, do tell us a little about yourself.
B: I'm a fairly typical 30 year old dude who lives in the northeast United States. I really like video games -- Im primarily a console gamer, I own and actively game on Switch, 3DS, and Xbox. I really like being outside, running, cooking, (American) football (sorry, I'm a huge Patriots fan!) and craft beer. I am married and have a lovely wife. I also have a black cat, who is good sometimes. Im a software engineer at a well known tech company and prior to this, my technical background was in electrical engineering.
Q: Yea! I love video games too. So, what brought you into emulation?
B: Growing up in 90s, I was a really big fan of Nintendo games. My first console was the Super Nintendo, and my favorite game [at the time] was The Legend of Zelda: A Link to the Past. A few years later, my parents got me a Nintendo 64 and Ocarina of Time, and that became my favorite game(I know, very unique of me... Although I liked Majoras Mask better, so I guess thats a little edgy). With that said, I was always drawn to Nintendo franchises and still am, even as an old guy.
Around this time (something like 1998), I had an older cousin who ran a fairly successful emulation news website. He introduced me to emulation, starting with ZSNES, and my mind was completely blown. At this time, it was completely surreal to have access to hundreds of Super Nintendo [and other systems] games that you could just play on your PC.
You have to understand, in 1998, the average person either did not have the internet at all, or was just recently exposed to it. As ridiculous as it sounds today, back then, it was totally crazy to be able to even just try something like a Japanese-exclusive SNES game from within the United States.
Before emulation and the internet, this segment of gaming was just not accessible out-of-region (especially to someone who was 12 years old). For those who remember when UltraHLE came out, you probably remember the feeling -- it seemed like pure magic (for the uninitiated, it was one of the first Nintendo 64 emulators that ran several games quite well, and at the time HLE was quite revolutionary).
Needless to say, I was completely fascinated by emulation. Back in those days, console games seemed so unique and different from PC games. I always kind of wondered: "How could this game that was designed to be played on a TV, with a very specific controller, and is stored on a very special cartridge, work on a PC?"
This got me involved in forums for emulation and rom hacking (Emulation64.com in the heyday of Nintendo 64 emulation was a blast!), and talking to emulator developers on IRC. My fascination here led me to end up learning to code and going to school to be an engineer.
Q: Wow. That is just so beautiful. I remember how I felt when I was introduced to emulators. It was absolutely exhilarating. Before Citra, have you ever worked on other older emulators?
B: Yes -- I became really interested in console emulation around 2002, back in the days when Project 64 just came out and was becoming hugely popular. I remember seeing early teasers of Dolphin in 2003 (when it was still closed source) showing really broken screenshots of Zelda: The Wind Waker, and being super excited by it.
This prompted me to want to work on GameCube emulation, but I didnt really know how to code. I made some minor contributions to Dolwin (an earlier GameCube emulator that was far behind Dolphin, but open source -- Dolphin was closed source at the time). I quickly realized that my contributions were not very meaningful given my lack of skills and experience.
So I decided to step back a bit and do the normal how to be an emu dev stuff -- I wrote a Chip 8 emulator, then GameBoy and NES (all of which remain unreleased). This was maybe a 2-3 year effort. (If you want to do some real archeology, take a look at this thread: http://www.emutalk.net/threads/41525-Game-Boy/page60 - I am user ShizZy and this is me learning how to code!)
Finally around 2005, I decided to write my own GameCube emulator, Gekko. I worked on this for a few years with some other developers. It got pretty far -- booting several popular games like Super Mario Sunshine, Zelda: Wind Waker, and Zelda: Twilight Princess. At the time of its height (2006 or so...) it even worked better than Dolphin for many games (which was still closed source and somewhat dead at the time).
However, I went to college in 2007 and things slowed down a lot. Around this time, Dolphin went open source, and quickly progressed way ahead. Gekko kind of died, there wasnt really even much point in trying to keep up. After college, I wanted to get back into emulation, so I tried to revive Gekko in 2012. Here is the Gekko code, if you want to take a look -- https://code.google.com/archive/p/gekko-gc-emu/.
It was around this time that I met neobrain who helped a bit -- Primarily with a new, cross-platform UI based on Qt. (fun fact: this would later go on to be Citras UI, and then yuzus). I made some other improvements, but it was pretty clear that the gap between Gekko and Dolphin was insurmountable.
Because of this, it was pretty much impossible to attract new open source developers. I realized that to have a vibrant and active open source team, you need to be working on something exclusive or exciting -- so a year later, neobrain and I decided to attack 3DS, because no one else was really working on it.
Q: What were your thoughts when you started Citra? Did you imagine that it'd become the massive success that it is now? And specifically, why a 3DS?
B: Coming back after a bit of a hiatus, I wanted to get back into the emulation scene and to work on something noticeable. To be quite frank, I'm motivated [to work on emulators] by user excitement, so I naturally gravitate to the "latest and greatest" thing, for better or worse.
At the time (this was sometime in 2013), no one was working on 3DS emulation, so it seemed like a fairly obvious place to leave my mark. Even though the 3DS was a few years old at the time, it actually felt a bit too early to start writing an emulator.
The system was very well secured (light years ahead of the Wii or original DS), and at the time, there was no public way to get code execution (i.e. run homebrew on real hardware). This is quite prohibitive for early emulator development, as it's imperative that we write little programs that are "tests" that we can run on the real system to learn how it works.
As such, things were a bit of an uphill battle at first. I think I would never have succeeded on my own path - but a few things lined up nicely.
- First, neobrain (from the Dolphin team) joined the project, and brought with him a lot of GPU and open source development expertise.
- Secondly, right around the same time, smealum and folks released a public exploit for 3DS, as well as a pretty great library for writing homebrew. This greatly expedited things.
To answer the second part of your question -- No, I never expected it to be so successful, but I was very personally invested in it succeeding, beyond just a science project. To expand a bit:
In the modern era of emulation, systems are so incredibly complicated, that it takes dozens of developers many years to make a true "product" that the average person will be able to use and enjoy games one (for example, like Dolphin).
So, when writing an emulator in this era, I think you do it either
1. To purely just learn or have fun as a hobby, and/or
2. You believe in the software that you are writing, the investment you are making in it, and that it will be a "product" that people will want to use and enjoy.
For me, it has always been #2 -- I am motivated by providing people another way to play games, and by making it a great experience. With this in mind, it has always been my goal to "not fail" at writing emulators. Failure here might be writing a bunch of code that no one ever runs except for me.
As I've told many of the developers on Citra and yuzu, my "measure of success" is:
If I got hit by a bus tomorrow, would [Citra or yuzu] continue to grow and be the best choice for users?
I believe that we've achieved this, at least for Citra. yuzu still has some growing to do, but I think it will get there too in a few years.
Q: If I remember correctly, you were inactive in Citra's development for quite a while. So, what inspired you to start writing a Switch emulator? Also why the name "yuzu"?
B: Honestly, I just saw an opportunity and took it. Switch is not terribly hard to emulate given what we know today:
Nintendo re-used a bit of the operating system from 3DS, the CPU (ARM) is publicly documented, parts of the display management are based on Android, the GPU has fairly complete open source Linux drivers, and the system was cracked open pretty early (compared to 3DS, at least).
I kind of saw the writing on the wall -- if we [the Citra team] did not make an emulator, then someone else would. I know this is a bit presumptuous - we often get the criticism "Why don't you just focus on making a good 3DS emulator?!".
But I counter that with this: I deeply care about video game preservation, so I wanted to ensure a strong open source team was behind Switch emulation. It's very easy for a closed source project to spring up and be incredibly successful, and the momentum of early successes (booting the first games, etc.) demotivate prospective open source developers.
Furthermore, I kind of just assumed that creating a framework for a Switch emulator would do no harm -- if a more successful open source project came along, we would probably just contribute to that. Lastly, of course, going back to my childhood, I've always been a huge Nintendo fan. So whether it was my project or not, I would have ended up working on Switch emulation.
Another crazy thing happened that I did not really expect -- yuzu attracted new developers that were interested in Switch, and Citra [continued to] attract new developers that were interested in 3DS. And then developers of each started contributing to both projects, porting yuzu improvements to Citra, and vice versa. We also share a lot of the same web infrastructure, moderation and testing teams, etc. This unexpected synergy, I think, has been really important to the continued success of both projects.
Regarding the name yuzu, it's kind of funny -- I could not for the life of me find a name that I liked for the project, but proposed that we pick another citrus fruit to pay homage to Citra (yuzu was initially a fork of Citra).
Literally, we were right down to the wire (we wanted to go public with the project the next day) and still did not have a name. I knew that whatever name we picked, we would be stuck with -- which added to the stress and pressure of the decision.
Flame Sage suggested yuzu (which is a weird/ugly Japanese citrus fruit that I had previously decided I did not like) and it just kind of stuck. I still don't love the name, but it has grown on me a bit. Ive often contemplated renaming the project, but I doubt that would work well... so probably not haha...
Q: Yeah! I agree the name has grown on us all. What areas of switch emulation have you worked on mainly and which areas are you most interested in?
B: I tend to be all over the place.
As the project lead, I like to have a lot of breadth in my knowledge -- at least a cursory understanding of the whole system. That being said, I dont consider myself the expert in any one particular area, although there are specific things that I worked on and am more familiar with than others.
For example, I did most of the work to initially stand up the project, get Switch games loading, get the basic kernel mechanisms working, and setup the OS and service HLE framework. I also did most of the work to get early GPU rendering working, and the initial implementation of our HLE audio backend.
Since then however, other developers have focused on particular areas that I initially hacked together and rewrote or drastically improved them. Examples of this are what Lioncash and Subv did with the kernel implementation, Blinkhawk and Rodrigo with GPU, DarkLordZach with the filesystem and game interfaces, etc. I think at this point, these guys are all more expert in their respective areas.
For the second part of the question, Im most excited about seeing the emulator work, and work well. Any changes that get new games booting for the first time, rendering better, or working at a silky smooth framerate, really excite me.
Since emulating Switchs GPU is pretty hard (both to do it accurately and performantly), this has probably been the bigger area that Ive spent my time lately. Im also really interested in OS HLE emulation.
Q: What are some of the challenges you generally face, when working on these?
B: Im not very patient and Im motivated primarily by my ability to make progress on whatever Im working on. I think one of the biggest challenges for me personally is to keep that motivation when Im stuck on a really hard bug and not making progress.
I often end up switching gears frequently just to work on something fresh and make an impact in a different area. The other challenge is just finding the time to be active and make meaningful changes.
Q: How do you manage to make time for all this, after work and personal life?
B: Funny you ask -- I think its pretty important to lead a well-balanced lifestyle. I like to make sure I eat healthy, do a good job at work, exercise, travel, spend time with my family, socialize with friends, etc. So yes, that means not a lot of time for Citra and yuzu.
Admittedly, I dont spend as much time as Id like working on these projects -- which is why Ive always thought that it was incredibly important to have an active open source team. We all need breaks, so its great when us developers can feel like its OK to take some time off, because there are other developers who are always progressing things further.
For me, it seems to come in waves. Ill get super motivated and make a ton of progress on something over the span of a few weeks, then Ill slow down for a few weeks. I also always try to find time to look at pull requests throughout the day, and often find pockets of time in the evening to get some coding done.
~
Thanks a lot bunnei, for taking the time to sit with us for this session -- considering the very busy schedule you usually have. It was amazing to have a little peek into your world, to understand your dedication and motivation.
That was it folks. We hope you guys loved that as well.
Until next time! Thank you for your support & keep playing on yuzu.