Selling my own GPL software, part 1: a lot of hurdles
Published: 24-12-2021 | Author: Remy van Elst | Text only version of this article
For as long as I can remember I've got this dream of a passive income software project. At first I thought of it as a hosted service, probably something monitoring related, or high-available cloud hosting-ish. That's the kind of stuff a sysadmin dreams of.
Now that I'm a developer for a couple of years, exposed to a few different languages, design patterns and software architectures, that idea is still lingering around, but no longer focused on a hosted piece of software. The web is just too fast paced, bloated and way too much work compared to a piece of cross platform software.
In my spare time I've been chugging along on a piece of software, which I'm contemplating selling. In my case the commercial aspect is made more difficult because I also want to release the software with a GPL license.
This post describes the initial hurdles I'm encountering, next to just programming the software.
Which is to say, that's a lot more than I expected. I, naively, assumed the process was more like the below image:
I'm developing a desktop monitoring app, Leaf Node Monitoring, open source, but paid. For Windows, Linux & Android, go check it out.
Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.
You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $100 credit for 60 days.
Let's first start off with the actual software I'm writing, then continue on with the business aspects and hurdles.
This is part 1 in my series on selling GPL software. You can find the other parts here:
- Part 1: Selling my own GPL software, part 1: a lot of hurdles
- Part 2: Embed the source code directly in your Qt app with qmake and qrc, for GPL compliance
- Part 3: Existing GPL software for sale
Leaf Node Monitoring
Screenshot, very much in beta
The software I've been writing in my spare time is a desktop / mobile monitoring client. You install it, add a few hosts, it checks to see which services are running and adds relevant checks. It's written in C++ using the Qt framework, because of that it runs on Windows, Mac, Linux, IOS and Android.
Target audience are sysadmins and regular users who want to monitor one or a few site's. It has a notification system and a task tray icon, start it up and leave it running in the background, that's the general idea.
The program started out as a learning exercise for me on a multi-threaded queue with a concurrency limit. There are at max 5 checks per host running at once and at most 5 hosts checked at once, to not overload the host and network, all using that queuing system.
At first I wanted to just release this for free, but later on in the process I thought, why not sell it. It adds value, since it's not as complicated as Nagios, Icinga, Zabbix or other monitoring systems, it runs on your own system (unlike web services like pingdom) so you can check internal systems and it has no check or host or check interval limit. You don't have to pay to run a check every minute instead of every 5 minutes so to say.
This could be a nice source of passive income. Buy once, get lifetime updates, that sort of thing.
As of writing this article I've programmed in a few checks, like ping, TCP ports and HTTP. I want to add a few more, like HTTPS, Certificate Expiry and maybe SSH. Notifications work, as does vibration on Android whenever you press a button.
But, as of now, I'm hitting the wall on the other aspects, next to just programming. I've split the hurdles up into technical and business, so you can skip whichever you dislike.
Here's my list of things to do on the technical side, next to making working software:
- Automated builds
- Installer for Windows
- Some sort of package for Linux
- Compiling Qt from source to allow static builds
- Android Play store .aab bundles / certificates
- Website with payment processor and downloads
- Distributing the source code along with the application
- New version checks
- OS X / iOS???
I'm not going to cover all points in detail, that might just be material for another article in this series. One aspect I do want to discuss early on is how to sell GPL software.
I've built installers for Windows before, even automated that entire process at work, static Qt builds are no secret to me, building a website also not an issue, but they are all steps next to the fun part (programming).
Package management on Linux is a mess nowadays (snaps, appimage, etc), I'm not familiar with the Play store and OS X / iOS is a whole league of its own. I currently do not have Mac hardware to test / deploy on.
Selling GPL software
Selling free software is a hot topic, and not often done. Most of the time people provide the software for free and charge for services around it, like support or a hosted instance. In my case, I'm a firm believer in free software, and have been for years. I've even enforced the AGPL on my own code and at work have handled a GPL request for the Linux kernel used in our coffee machines.
Quoting the Free Software Foundation website on this topic:
Many people believe that the spirit of the GNU Project is that you should not charge money for distributing copies of software, or that you should charge as little as possible--just enough to cover the cost. This is a misunderstanding. Actually, we encourage people who redistribute free software to charge as much as they wish or can.
The FAQ has a bit more information on this topic regarding the difference
between distributing the source along with the application and the
An example of this is if you manufacturer a hardware device with free software on it. The best thing to do is to provide the free software source along with the device on purchase, but if you cannot or are not willing to do so you must include a written offer. That written offer is valid for anyone anywhere, instead of just the customer who bought the device. The FAQ explains this and the reasoning behind it:
If you commercially distribute binaries not accompanied with source code, the GPL says you must provide a written offer to distribute the source code later. When users non-commercially redistribute the binaries they received from you, they must pass along a copy of this written offer. This means that people who did not get the binaries directly from you can still receive copies of the source code, along with the written offer. The reason we require the offer to be valid for any third party is so that people who receive the binaries indirectly in that way can order the source code from you.
In my case I think I'm okay with just providing the source code along with the program when you download it. On Android, this would be a bit of a hassle with the play store, but when I have a website with payment and downloads setup this would be simple, put both the installer and the source in the zip file the user downloads. For the play store, I might be able to embed the source code in the program itself, one other hurdle to look in to.
People have asked me what I think of the fact that other people can then also redistribute the source code, or compile a binary and provide that for free. I'm fine with that, as said, I'm a firm believer in open source / free software.
The list of business hurdles overlaps a bit with the technical side. Business topics fall under the classification, 'I can't solve them with software myself'. Think of a business bank account, payment processor, warranty, support.
- Business registration without exposing my personal details
- Business bank account
- Payment processing
- Bookkeeping / invoices
- Insurance / warranty / terms of service
- Qt licensing
The business registration in the Netherlands is handled by the KvK, Kamer van Koophandel, Chamber of Commerce. The UK has the Companies House and almost every country has their own equivalent. One disadvantage in the Netherlands is that if you're a one-person company (or a few other company forms like VOF) you're private address is published next to your company address. For most single-person companies these will be the same, but you could also rent an office somewhere and use that as a company address. Except that your private address will still be publicly available.
The phone and email address parts are not a big issue, I can use a separate domain and a prepaid cellphone, but the address part stinks. Not because I fear all my unhappy customers will come over with torches and pitchforks, but because of all the spam you receive. The rules for marketing to consumers are very different from the rules regarding business to business marketing, which results in you getting enormous amounts of unwanted calls, emails and physical mail.
The other points fall in the category annoying but required. Payment providers wont do business with private (personal) accounts, so you need a business bank account. Probably also some sort of bookkeeping software and a tool to generate invoices from that. I've had a semester of business economics / bookkeeping at school so that shouldn't be too hard to do myself either.
Insurance warranty or terms of service are also a part to consider. The GPL header that you include in your source code states:
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Section 15 of the GPLv3 states:
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE
EXTENT PERMITTED BY APPLICABLE LAW.
In the case of software, there is much grey area or unclear. I'm planning to offer a no questions asked 30 day refund, but as far as warranty goes? Unsure.
Qt licensing should be fine since I'm releasing the program as open source. If I would keep it closed source, I would have to get a license or go trough more hurdles to use the LGPL variant.
This concludes part 1 in this series, including an overview of my program, the technical aspects, specifically selling GPL software and business aspects, mostly regarding the privacy aspect of the business registry.Tags: android , blog , business , c++ , leaf-node-monitoring , qt , sysadmin