I like to write about the interstitial tissues of this coding effort because I assume that you assume in turn that much of the guts of this thing is me sitting at a desk writing code into a collection of text files. The interstitial connective tissue between that coding is what is often more interesting.
Yet, sometimes, I make those layered efforts and the stringy bit in between writing that actual code feels like a lack of progress, when in fact I need to remind myself that is often some of the more important work.
This weekend I went down a rabbit hole of interstitial work that felt a bit like progress when it worked and like so much more wasted time when I was struggling.
Last week, after I wrote my last post about the milestone of achieving the foundational bare minimum of a game I got an idea into my head. See, to remind you, after nearly two months of writing code that amounted to a kind of half-baked collection of systems that did stuff, I wrote the last of the systems that led me to a point in the writing of this game wherein I could actually start calling it a “game” — as in, or that is to say, the systems reacted and progressed in a way that it was more than a cute demo of code and sprites and time clocks and other loops, but rather there was suddenly therein a point. It became a game, if a utterly simple and mostly pointless cozy toy of doing stuff with no broader implications. It kept a score, it had conditions to progress, it played. It was a bare minimum game by my own biased approximation.
I got it into my head to do a thing with it. I got it into my head to put this game on my Steamdeck.
For those reading this who may be less techie than I, a Steamdeck is a portable gaming computer very much resembling a Nintendo Switch but whose guts are more much more powerful than that and encompassing a gaming ecosystem designed, built and sold by a company called Valve who owns the Steam game store which in 2025 is The Foremost Place to buy and sell PC games. A couple years back they released this portable gaming system that was built on the ideologies of open design, right to repair, and extensibility. Simply, it’s a computer that is packed into a little portable form factor, running an open source operating system and linked to a downloadable ecosystem of countless games, from triple-A titles to little indie games like mine.
Mine. But not yet, mine.
See the end goal of an indie game guy like me is to get their game into the hands of gamers and the aforementioned Steam game store is the modern go to for gaming self-publishing. For a small fee I can put my game on there and anyone (and there are literally hundreds of millions) of their customers can buy and download it.
A lot of those people would, of course, want to play it on their very popular Steamdeck.
I have a Steamdeck. And so logically, developing this I should figure out how to at the very least test it on there.
This was where my brain was last week as I was playing around with the code and the compiled version of my game there on my Windows PC where I write my code each day.
So. Off I set, down into the rabbit hole.
Down, down, down I went. Down deep into learning about the Steam developer tools, about cross-compilation, and about the lack of important code libraries that would make all that seamless and easy.
A few hours into my efforts I realized that I would not be able to just press a button on my Windows PC and have a working copy of my game that would run on the Steamdeck. The Steamdeck, see, runs on an operating system called Linux. You may know enough about computers (not mobile devices, that’s a whole other ballgame) to know that there is Windows and there is MacOS, but then also that there is a third equivalent called Linux. Linux is technically free in as much as there is no Licence to buy to use it. There is a steep learning curve to making it work well, a curve that has smoothed considerably since I started playing around with Linux in the 90s but a curve none-the-less. Likely you interact with Linux on a daily basis and don’t even realize it. It lives on a huge percentage of the worlds web servers, for example, or on many little gadgets and toys (the Steamdeck for one) that haven’t switched over to something like Android. I have a few little Raspberry Pi computers in my house, the famous little fifty-dollar computer which runs a flavour of Linux called Raspberry Pi OS which is, again, just Linux.
I haven’t been writing my code in Linux. I’ve been writing it in Windows. And while normally in 2025 that isn’t the main problem because things like cross-compiling exist, I ran into one of those cases where I was making something complex enough that it didn’t “just work” like I had been expecting.
So there I was, a few hours in of mucking around in Windows trying to make a game that would run in Linux, and it wasn’t working.
Side note: Steamdeck does have a little emulator called Proton that lets you run Windows games, but that wasn’t working either.
So, deeper into the rabbit hole I went.
First, I thought to myself that it since my Steamdeck is technically just a Linux computer in a pretty box I could just move the code over there and compile it there. I spent a good two hours installing software and building drivers and connecting all the dots and—well, I’ll be honest. I seemed to be running into roadblocks that seemed like they were inherent to the Steamdeck itself and as thing were grinding away I was already looking to other machines in my house for help.
At some point I moved onto one of those aforementioned Raspberry Pi machines. They are slow but persistent. They are meant to do simple word processing or manage file systems. I put all the pieces on a little Raspberry Pi 400 I have set up as a mini desktop computer in our bedroom and started compiling— and quickly ran into the same problems I had encountered on the Steamdeck.
Ok. So it wasn’t a Steamdeck issue. But I pushed on and solved those issues, dug deep and found the right commands to download the right libraries and then—slowly, like eighty minutes slowly—it churned through the code and finally spit out a working game.
The Raspberry Pi doesn’t have a graphics card, mind you, so when I booted Pleck’s Mart to life it chugged away at about 2 FPS struggling to keep up. I had a game running on Linux.
I copied all the files over and, though it was approaching midnight and I had a wife giving me dirty looks from where she was planning on going to sleep fifteen feet from where I was compiling code late into the night, I ported it all over and loaded it into the Steamdeck.
Memory stick transfer. Upload to deck. Press play. Bonk!
Again. It did not work.
I went to bed, having failed to complete my goal.
I was up around 5am with a new idea.
A couple years ago I had loaded a copy of Ubuntu, a popular version of Linux, onto a twenty-year-old laptop computer. It had few advantages over the Raspberry Pi in speed but it did have the bonus that it was not in the bedroom where my wife was sleeping at 5am on a Saturday morning.
I dug it out, booted it up, went through all the same steps to get that compiler up and running as I’d done on my Pi the night before and—wham, by 7am I had yet another compiled copy of my game.
Memory stick transfer. Upload to deck. Press play. Crash.
That didn’t work either.
After breakfast I spent another couple hours doing online resesarch and, sparing you the thought processes and digging through the cryptic Steamdeck logs, I will tell you that I learned that by default my game engine of choice, Bevy, uses something called Dynamic Linking. That is to say, when I put the game on my Steamdeck it was looking for files that were linked (to save space, or something I assume) to the the computer where I compiled it. Turns out, if you want to “ship” your game, you need to use Static Linking and bundle all those important things up with the code.
Another couple hours and adding even more plugins to my laptop I tried one more time to compile the whole damn thing.
Memory stick transfter. Upload to deck. Press play. Game!
Almost twenty-four hours of frustrated tweaking and nudging and the game actually booted on my Steamdeck. Success, rigt?
Yeah. And I could have ended the story there.
But by mid-afternoon on Saturday, after enjoying an hour of gleeful playing around with my new portable game on the couch, I had come to the conclusion that my biggest mistake was that I was using the wrong operating system at the foundations of this effort: that is to say, I should be using Linux as my development computer, not Windows.
Either work. There are arguements in favour of either. But Linux has advantages that were weighing in its favour for my work going forward.
So. No time like the present to make the switch, huh?
Here I endured another twenty-four hours of sporadic effort of trying to build my computer into a dual-boot system split between Windows and Ubuntu Linux, first by trying to run it (very unsuccessfully) off a USB memory stick (toooooooo slow) and then off a hard drive partition. By late Sunday night I had duplicated all the functions of my slow twenty-year-old laptop into a fresh development environment on a cleaved off chunk of hard drive on my newer, faster desktop PC—and had not only managed to compile the code, but to do a couple of code commits to my git repository.
And now, as of writing this, I have been happily writing and digging back into the day-to-day coding and working on “tickets” fully in Linux, having added little more than a couple behind the scenes tweaks and enhancements to the game. But coding.
Having changed nothing, but simultaneously almost everything.
This is all interstitial stuff. Connective tissue of the actual code writing work that is so much more satisfying.
I had spent nearly forty-eight hours of effort and frustrations doing little more than nudging my code into a different part of the hard drive on my computer.
Yet, confirming that I could do exactly that.
When my wife was more awake I noted to her that if I could not have made the game run on the Steamdeck there was a notion in my head that my whole plan might need adjustment. What would have been the point? You know?
And as I wrote above, it feels like simultaneously so much progress and virtually none at all. Very important yet invisibly trivial. Everything and nothing.
Connective tissues.