This is a text-only version of the following page on https://raymii.org:
---
Title       :   Selling my own GPL software, part 1: a lot of hurdles
Author      :   Remy van Elst
Date        :   24-12-2021
URL         :   https://raymii.org/s/blog/Selling_GPL_Software_part_1_lots_of_hurdles.html
Format      :   Markdown/HTML
---




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.<br><br>
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.<br><br>
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.<br><br>
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:

![profit][1]


<p class="ad"> <b>Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:</b><br><br> <a href="https://leafnode.nl">I'm developing an open source monitoring app called  Leaf Node Monitoring, for windows, linux & android. Go check it out!</a><br><br> <a href="https://github.com/sponsors/RaymiiOrg/">Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.</a><br><br> <a href="https://www.digitalocean.com/?refcode=7435ae6b8212">You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $100 credit for 60 days. </a><br><br> </p>



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](https://raymii.org/s/blog/Selling_GPL_Software_part_1_lots_of_hurdles.html)
- [Part 2: Embed the source code directly in your Qt app with qmake and qrc, for GPL compliance](https://raymii.org/s/articles/Embed_the_source_code_directly_in_your_Qt_app.html)
- [Part 3: Existing GPL software for sale](https://raymii.org/s/blog/Existing_GPL_software_for_sale.html)





### Leaf Node Monitoring

![leaf node monitoring][2]

> 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.

### Technical hurdles

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][6] 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][4] and at work have
handled a GPL request for the Linux kernel used in our coffee machines.


Quoting the [Free Software Foundation website][3] 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][5] has a bit more information on this topic regarding the difference
between distributing the source along with the application and the `Written offer`.

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]
[5] 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.

### Business hurdles

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
- Marketing
- 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.

[1]: /s/inc/img/profit.png
[2]: /s/inc/img/lfm-1.png
[3]: https://web.archive.org/web/20211224093348/https://www.gnu.org/philosophy/selling.en.html
[4]: /s/blog/I_enforced_the_AGPL_on_my_code_heres_how_it_went.html
[5]: https://web.archive.org/web/20211224094040/https://www.gnu.org/licenses/gpl-faq.html#DoesTheGPLAllowMoney
[6]: https://leafnode.nl

---

License:
All the text on this website is free as in freedom unless stated otherwise.
This means you can use it in any way you want, you can copy it, change it
the way you like and republish it, as long as you release the (modified)
content under the same license to give others the same freedoms you've got
and place my name and a link to this site with the article as source.

This site uses Google Analytics for statistics and Google Adwords for
advertisements. You are tracked and Google knows everything about you.
Use an adblocker like ublock-origin if you don't want it.

All the code on this website is licensed under the GNU GPL v3 license
unless already licensed under a license which does not allows this form
of licensing or if another license is stated on that page / in that software:

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   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.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

Just to be clear, the information on this website is for meant for educational
purposes and you use it at your own risk. I do not take responsibility if you
screw something up. Use common sense, do not 'rm -rf /' as root for example.
If you have any questions then do not hesitate to contact me.

See https://raymii.org/s/static/About.html for details.