On Ten Years of Emulation

My emulator, higan, is now over ten years old.

I must stress right away that work will continue on the project into the foreseeable future. But, there's no denying work has slowed down immensely. In fact, there hasn't been much of any progress since January. There are several reasons for this, which I'll go over.

In January, I was in the process of wrapping up the finishing touches on loki, my SNES debugger, in preparing for a v095 release.

The first major roadblock was Debian's decision to acquiesce on systemd. At that time, Debian was my primary development operating system. Having suffered through years of broken audio by the same egomaniacal Redhat developers, I wasn't eager to repeat the experience by introducing such fascinating features as having an HTTP server that generates QR codes as part of my init system. I fundamentally believe systemd to be poorly designed and a major step backward for Linux. But with Linus asleep at the wheel while Redhat turns Linux into Windows, the writing was on the wall: it was time for me to move on.

This led to a few months of crash-course learning FreeBSD. Now, FreeBSD makes for a wonderful server, but is not exactly the best way to run a desktop. It can be done, and to great effect, but it requires an immense amount of effort and dedication.

Due to most developers only considering Linux, this leads to lots of portability issues that result in bugs which slip past port maintainers. I battled through issues with font rendering, libvte crashing terminal instances, Thunar refreshing and resorting on every gedit save due to the latter's insistence on creating temporary files for every save, mousepad crashing when opening any file an even multiple of 4KB due to an out-of-bounds memory access which apparently was hidden by the Linux implementation of mmap, more Thunar issues in failing to update file types and file sizes in its displays, ibus issues with anthy and mozc, browser issues with large images, and on and on.

The worst part was probably the horribly buggy binary nvidia driver. It was so unstable, taking my entire system down, that I went back to using vesa. By some miracle, my graphics card actually has a 2560x1600 vesa mode. After manually rewriting my MTRR tables, I've found I actually get rather decent performance. By multi-threading my software XShm renderer, I can even run my emulator and watch movies just fine.

For the most part, I was able to work around these software issues. In many instances, I had to switch to new software programs, or revert to older ones. For instance, the Firefox team decided to completely change its user interface to the braindead Australis design, and to hell with anyone who didn't like it. Classic Theme Restorer may get something about 80% close to what you're used to on Windows, but is an unmitigated disaster on Xorg.

After Metro, Unity, Gnome 3, KDE 4, Firefox Australis, and on and on; it has become painfully clear to me that I cannot rely on software vendors to not radically disrupt my workflow whenever some wide-eyed kid fresh out of college decides it's time to completely redesign applications that were perfectly fine already. I'm not against change when it leads to better ways of doing things. But I am vehemently opposed to change for the sake of it. And my desktop is not a god damned tablet, you stupid fucks. But well, as they say, if you want something done right, you have to do it yourself.

Upon attempting to write replacements for critical programs, such as a file manager and text editor, it became clear that my UI abstraction layer, phoenix, was not going to cut it. I had to go back to the drawing board and work on the largest redesign that the project has ever seen. This required many new components in my template library, nall, such as shared objects and IPC. I then added a lot of power to phoenix, mostly focusing on the GTK2 target. I've added new widgets, new functions, and an entirely new shared memory model that will greatly aid in writing dynamically generated interfaces, among other things.

And just as I was finishing this up, the godawful web host I was using, InMotion Hosting, decided to reveal their gross incompetence. First, they managed to botch an Apache upgrade, resulting in all of my PHP files being accessible as plain-text. So anyone typing in /config.php would be greeted with the plain-text login credentials for MySQL. Then, a few weeks later, another update corrupted half of my phpBB SQL tables. Repairing didn't work: permissions were completely broken, allowing any user to edit any other user's post, page refreshes were broken, and many other similar issues arose. I had no choice but to drop five years worth of posting history and start over. But no way in hell was I going to start over on that host.

And so now, I've had to move my site over to a new host. This time, I decided to go the VPS route so that I could be in control of software updates. I certainly couldn't do any worse than my previous host. Thankfully I have plenty of experience in running and securing web servers, so this wasn't very painful.

But frankly, I've grown sick of Apache, PHP, and phpBB. I am so tired of bloated, buggy, poorly designed software. So now I am further working on designing lighter weight replacements with my usual emphasis on minimalism. Just because it's the web, that doesn't mean I want to throw away native code performance and compile-time type safety. And I am so tired of fighting mod_rewrite to do simple things like map a subfolder to a subdomain.

I've been having frequent chest pains and issues with lethargy, which my GP is either too incompetent or apathetic to help me with. So my output has been reduced quite significantly. I've been trying to take up healthier eating and exercise to try and improve my health. All the same, I find it increasingly difficult to pull off marathon coding sessions any longer. And even when I do, it leaves me out of commission for the next day or two.

So as you can see, it's just been one hell of an awful year. I've been jumping from fire to fire, struggling to keep everything afloat. And it's been taking a toll on my enjoyment of programming. It seems like the more work I try and do, the more work I have waiting for me. I can never really complete anything when I keep getting new things dumped on me all of the time.

I have an incredible backlog spanning years worth of work here. I have to map out and scan nearly 1500 games, I have to do all of the programming work for a fan translation of Tengai Makyou Zero, I have to finish up the Windows, Cocoa and Qt4 phoenix targets, so that I can continue on the design of higan and loki, I have to write a myriad of desktop applications, up to and possibly including a web browser frontend (for either Webkit or Gecko), and then I have all of my backlogged hardware research on the BS-X, Cx4, etc, and it just keeps going. All the while dealing with diminishing health.

Yet when it comes to all of this ... I really feel that I've already accomplished more than I ever wanted to or thought I could on SNES emulation. I no longer feel like I am facing strong challenges that force me to grow, but rather an infinite stream of tedium and maintenance. I'm not saying I necssarily hate programming, just that it's lost its magic.

The most fun I've been having lately has been in attempting to improve my Japanese knowledge through some fan translations of manga (holy hell is that language a nightmare to learn), and getting a bit back into drawing again.

So, what I hope to do from this point out is to start winding down on my programming projects, and focus on new ventures while I'm still young enough to take on large new challenges in fields I have little to no experience in. Again, I don't mean to seek to abandon my projects, but to get them more suitable for a slower development pace, so that I can start branching out into new areas.

© 2014 byuu - archive.fo/efPBT