This post recounts my journey of developing a side project as closed source, diverging from my usual open source approach, and why I eventually opted for dual licensing.
A few (or many? who counts…) months ago, I started developing an AI desktop app and platform (https://github.com/singulatron/singulatron). Prior to this, pretty much every side project I undertook was open source from the first line of code. But that recently changed…
Feeling Scammed
By Big Corporations
Around the time of the Amazon Elasticsearch controversy, I began to feel somewhat foolish. I often question my core beliefs and wondered: is the open-source ethos merely a ploy to get people to write software for free? Do we conduct the R&D ourselves, only for a larger, well-funded entity to take over the idea and make substantial profits?
Is it about laying the foundations for free, on which giants can stand? To solve the hiring problem for free, to work for free? To suppress wages? To build something awesome that those with the cloud capacity can then take and sell?
Software is all labor and almost no capital. And there is nothing capital (Alphabet, Meta, Amazon) hates more than expensive labor. So why not promote open source? Get the fools to do the labor for free—only you have the capital to deliver it as a service anyway.
By AI Tools
While pondering the above, the icing on the cake was seeing AI tools spit out open-source code verbatim. Now we are getting into the territory of almost outright disrespecting licenses—and potentially the wholesale automation of our profession itself. I know, it’s rich coming from someone whose entire livelihood is made possible by automating away other professions. Still, as much as I try to be a nice guy, I still need to eat.
Of course, I’m mostly joking about the automation part—but not entirely. The sword of Damocles definitely hangs above all of us. How long until it drops is anyone’s guess.
By Bad Actors
To further elaborate on the previous point about respecting licenses… I was born shortly before the Soviet Union fell. In the Soviet Union, intellectual property was not a thing, or if it was, it was only on paper. In the West, we respect IP, but the further east you go, the less concern there is for it.
With China becoming an ever more prominent superpower, the idea of respecting IP seems to be in serious decline. For this reason, I’m incredibly sad to see the West heading in a similar direction.
A Bad Mindset
So I decided, after decade(s) of open source, I’m just going to hack in a closed repo. What’s the worst that can happen, really? I can be messy in private without the prying eyes of the public or coworkers. Great!
And so it went for a few weeks, months, but something felt off…
Boredom
After a while, I started to notice the silence. Nothing was happening! I fixed bug after bug, feature after feature. I figured it was fine because once I’m done, it will be all good. I’ll release, people will see the result of my work, and everyone (or at least I) will be happy.
The problem is, as anyone who has done software development knows, software always takes longer than you planned. Or imagined. Even in your vivid and wild imagination. And when it’s done, it takes even more time.
So the cycle continued. Bugs. Features. Bugs. Features. And intrusive thoughts.
Greed
I started going out of my way to conceal the technical solutions to problems from the end user. Why would I leak technical details when I’m closed source? There is a reason I’m doing closed source, right? What I’m doing must be valuable—at least to me—since I sacrifice so much for it without anything to show for.
When doing open-source development, greed manifests itself as wanting to be first or famous. When doing closed-source development, greed manifests itself as the desire to gatekeep knowledge, to be the only one with the edge.
The first mindset is obviously way more beneficial for the collective knowledge of humanity. But ideology aside, there were more immediate annoying things too.
Practical Annoyances
If emotional traps leading me astray weren’t bad enough I also had to tackle a ton of practical annoyances.
Builds
When doing open source development, builds are not just free but they also run in a fresh VM each time. Using GitHub hosted runners looked to be prohibitively expensive when I often pumped out a hundred commits a day. But since I have my own bare metal servers that should not be a problem right?
So I did that. Initially it was awesome—things were building much faster! I had a full gigabit connection for myself, and caching between runs was easy.
But my software actually installs and uninstalls stuff on the OS—like the docker daemon. Not having a fresh VM each time made me not able to test this startup sequence.
Private Access
Having to access the same codebase from many different machines and VMs becomes tedious in a fast paced environment. Obviously it’s not an overly big deal, but I can’t tell you how many times I rolled my eyes thinking—”Man. I wish this stuff was just open source”.
Couple that with having to invite people when you want to show them something and quickly you will wish you had a well kept open source repo ready to link.
A Closed Desktop App
I quickly realized I picked the worst time to go closed source—when working on my first desktop app, especially a closed Node.js desktop app.
Node.js
Unfortunately, code obfuscation can be undone pretty easily. The hardest parts of my codebase to get right—shell scripts to set up the user’s environment—were the easiest to understand, even when looking at the obfuscated code. They were just simple strings.
Compiling to a binary doesn’t always help either. After the first prototype, I switched the backend from Node.js to Go because I feel more at home with it. Electron became a very thin wrapper without any business logic. However, the shell script strings baked into the binary are still easily viewed in the appropriate editors.
User Trust
Another reason this was probably the worst time to go closed source is because shipping server software is one thing—your users interact with it through the safe confines of their browser. Asking users to install a binary that will install a bunch of things on their computer is entirely different.
This is especially true when you’re starting out and might not even have your binaries signed, which costs around $500 a year and involves a lot of hassle.
The Solution
So this was the journey I took to end up going back to open source, but with a twist. I dual licensed Singulatron, it’s free for personal use but not for commercial use.
I should and probably will find an existing license later that words my actual intentions clearer than this current commercial license I have: to make well funded companies pay. I’m definitely not after the small company hustlers similar to me. I know their pain all too well.