Some time ago, I offered to do an interview with my good friend flibitijibibo (Ethan Lee) about the work he'd been doing with the independent game development studio 12characters, and the contributions he had made to several Free/Open Source projects. Fourteen months and several collaborations later, our schedules have finally coincided, though flibit (as he is known) is now working as an independent game porter, with three cross platform titles under his belt, and one in-progress Humble Bundle port.

In this three part interview, we discuss cross platform porting, software development, and gaming communities. Part two and part three are also live.

First up, tell us a little bit about yourself. How did you get into software development and where has it taken you?

Oh, where to begin... no really, I'm not entirely sure where. There are a few times that I explored programming, and a lot of things happened in between those times.

Up until I was about 15, my parents would have bet everything on me being a software engineer. Problem is, I was never actually doing any programming before then. Most of my time before then was modding (I still find myself interested in what the Halo modding community is up to, from time to time), and not even doing anything on the technical side... just doing some texture/asset replacement via DotHalo, or something to that effect.

I actually only first sat in front of an IDE when I was in high school, in what was a pretty awful introductory programming course (when I say awful, I mean it was VB6 in 2005)... the programming environment of VB6 combined with the assignments we were given (I swear, those exercises were training kids to be the most boring, uncreative programmers ever) led me to step away from programming... I actually ended up going for music instead. I took one more class in Java, which I actually really enjoyed, but until I was about 20, my work varied from music performance to music education to audio production (audio production ranging from field recording to sound engineering for some DOA Halo CE mods).

Fast forward to my second year in college. I'm two years in my music production degree, not really doing a whole lot... that was the year I began working on The Big List of 3rd Party DRM on Steam, but aside from that I wasn't really... er... doing anything. I've talked to a lot of my friends/family about this, recently. You really don't do anything at college. This was fine back in the day, where degrees were a novelty, but now everybody goes to college to do nothing, and they leave without anything to do. I almost never recommend college to anyone anymore, unless they want to explore a wide range of things (that's pretty much the only thing I got out of college, the classes that seemingly had very little to do with my intended degree), and instead just do something. This can be done as early as high school! I did this somewhat unintentionally when I started teaching middle school students during my last year of high school... I just did something! There were almost no prerequisites for that, I just wanted to do it, so I did.

That mindset's pretty much how I've done everything that people know me for. It's a lot less exciting than you might have expected. For instance, I became a Linux user at the same time that I took over The Big List. Both of those things were entirely unrelated, but things I just wanted to do, so I did. Virtually no story to either one. (To those checking the timeline closely: yes, I've only been a Linux user for just over 2 years!)

But anyway! I'm sitting at my desk, doing my usual nothing, and I'm also watching the IGF/GDC awards. This was the year that Notch won everything ever, and I had actually been following Minecraft closely from the Indev days (I was on /v/ a lot in those days)... I don't remember what it was about that broadcast, but after it was all over I grabbed Eclipse, found the LWJGL, and went to work. All I knew at this moment was the kind of thing you'd learn in a programming course... "Wow! I can make a class that stores numbers in an internal int[], and output it via System.out.print*()! Wooooahhh." I knew nothing about OpenGL, knew very little about OpenAL (I explored some OpenAL tools/examples previously when fiddling with audio tech). Also, I hadn't touched an IDE in over 2 years! Over the course of a year or so I taught myself most of what I know about OpenGL/OpenAL today, which culminated with the Astronomusic demo that I hope nobody has seen.

12characters was actually an effort I started when I began to make my own game. There were three of us, people I knew from the modding days, and in less than a year it was just me again, with 100% of the final codebase being mine (one of them has their own 3D fork that I let them have all the rights to, but I have no idea what happened to it). I still "own" 12characters Games, but I won't be using it until I have an actual company... it just seems silly if I use it for myself.

I learned a lot about programming/engine development (including the importance of static analysis/code quality tools), but I maintain that I am a miserable game designer, and an awful visual artist/designer. (You actually did the art for Astronomusic! Doesn't this look weird now!)

As much as I hate on that demo, it was what I used to get the attention of Eden Industries. I originally went in to make some audio tech for Waveform, but I ended up porting it to Mac/Linux instead. I enjoyed that so much that I ended up taking Blueberry Garden and Eversion as well, and I suppose the rest is history.

Ha, Astronomusic. I was wondering when that was going to come up. Do you think you'll go back and revisit that (or game development in general) at some point?

Probably not. Astronomusic was a great way to show myself what I'm good at and what I should stay far away from, but not much else. I think for game development in general, I would love to be working at one developer one day. Some guys work well as contractors with many companies, some work well focusing on one project with one company. I've been able to delve into the former, but I'm really interested in trying the latter at some point.

You mentioned that you initially approached Eden Industries in the hopes of doing audio work. How did that transition to porting, and do you now find yourself chasing porting work, or do you find porting work chasing you?

Well, the game was a Win32 game, and I'm a Linux user... the game works in Wine, but developing tech for Waveform might have meant working in Windows and Visual Studio... blech. The game used OpenGL and all free libraries though, so I figured if I was going to do some tech for it, I may as well port it first. Seemed like a win-win. I haven't gone back to do the audio tech, but I would really like to. Mostly just a matter of time/funding, at this point.

In the beginning it was just me looking for games I really liked, going "I could probably port this..." then contacting the developer to see if they wanted it. A lot of people said no, a lot of people didn't respond, and the lonely few let me port their games.

How do you find game porting to differ from game development?

There's a lot more debugging in porting, at least in my experience. I'm a colossal pain in the ass about portability/code quality though, so anything I work on from the start tends to require a lot less time in QA. I like to think that this carries into my port work, but it's probably not as much as I want it to be.

I also tend to learn a lot from my porting. I'll only delve into what I would put in my own engines if I work alone, but when dealing with other engines I'm forced to broaden my horizons a bit more. Here are some things I learned to port some of my games (some of these may shock you):

As you can see, a lot of these things I just learn as I port. Is this bad? I don't know, maybe. I've been able to get these out in a timely manner, so I can't be sure. So far the only project that's been impacted by this is Vessel, but that's also the largest project I've ever worked on. It's hard to tell, at least from my perspective. Maybe someone sensible will read this and tell me I'm a phenomenal idiot for learning things after I take the project.

You've also worked on some Free/Open Source Software projects. What similarities and differences are there between porting proprietary and F/OSS projects?

Not a whole lot, but the types of projects I've done on both sides kind of vary. Most of my F/OSS stuff is in libraries while the proprietary stuff is... well, the games that use them.

A lot of big or well-aged projects (SDL is the big one for me) will be extremely well-written, very well maintained and will have gone through many professional developers, and you can generally trust that your time spent editing the project will be a pleasant one. However, there are a TON of projects, free/libre and commercial, that can be rushed, not well thought-out, or just being worked on by people who should NOT be working on these kinds of things. This could happen commercially, but it seems to get heavily amplified in the F/OSS universe.

I'll even point out MonoGame as being such a project; there are an immeasurably large amount of problems with that project, and it's going in just about every wrong direction that it can at the moment. Right now the big target for them is Windows 8/Metro support, with PS Vita on the side... does that sound stupid to anyone else? Really, their goal should be to make MonoGame an XNA-compliant framework running on top of SDL2, and let the SDL2 devs figure out the ugly per-platform support. This would resolve a lot of issues in both the low-level details in the library as well as how MonoGame approaches its goal of being an open source and cross-platform implementation of the XNA framework. Let MonoGame worry about XNA compliance and accuracy, and let SDL2 worry about platforms. However, there's no central organization/individual that is putting their foot down on making MonoGame genuinely production-ready right now, so currently MonoGame is trying to do everything, and it sucks. A lot. Of course, they would probably have to write a Direct3D renderer if they wanted MonoGame on Metro that badly, but I mean, it barely works on the original platforms right now.

I could go on for hours about MonoGame, but the point is that sometimes F/OSS projects have the burden of letting anyone maintain the project, whereas with proprietary projects you know exactly who is working on it and what their qualifications are. Of course, you have to deal with HR in the latter case, so if that's a problem then it may be worth putting up with the occasional ugly pull request you get in your inbox if you know how to manage your volunteers properly.

How do you feel that commercial games fit within the Free Software ecosystem?

Right now commercial projects are the main source of professional developers in the Free Software universe. Commercial projects need open libraries, open libraries need work, developers work on those libraries.

Of course, we'd all like for developers to release the main project source as well, but this is where we're at, currently. There are still a lot of people developing on proprietary libraries/frameworks as well, so I think we should keep working at making the free/open libraries the best they can be. Think of it as attacking from all sides, I guess.

plash: Of the code you've ported, what is the quality like? Is it more consistently rushed and crude, or elegant and beautiful? *

It depends on the developer. Sometimes it may have been the product of their first programming experience refined over time, and sometimes it was written by developers who've been in professional software development for many many years. The former category will have thought of the simple, elegant solution quickly, but the latter category may be getting too clever with bits and pieces of their engine. The former will have some pretty cringeworthy design choices, whereas the latter will have a squeaky-clean engine despite the complicated parts. It's pretty much what you'd expect from any software written by people with different levels of experience and programming backgrounds.

Hannah: Have your experiences with Vessel changed the way you would approach future porting work? *

I do want to change things a bit. To be honest, I want to make it a policy of not even considering my ports for anything until they're fully complete. A more "when it's done" way of doing things has provably been the best way for me to release things that aren't junk.



Read on for part two, or jump ahead to part three if that's what you're into (there's talk about how to pronounce flibit's name there if you can't read any farther without looking into that).