DEV Community

Rafal Manka
Rafal Manka

Posted on

Why Featherboard is AGPL-3.0, single, self-contained binary

Phase 1 is now complete. The submit -> vote -> comment -> status-tag -> filter path is done. Before moving to Phase 2, I'd like to reflect on a big fundamental decision I've made and the reasoning behind it. I never really contemplated what the real-world consequences of choosing the right license are, but now I get it.

Why I chose AGPL-3.0 and not MIT or Apache-2.0. The business model is open-core: anyone can host a copy of the app and run it on their own infrastructure. But if you don't want to run it yourself, you can always pay me to do it. Everyone wins.

If I'd chosen MIT or Apache 2.0, anyone could just fork my repository, run it as a hosted SaaS with their own extensions on top, and never have to share their changes with anyone. Not even plain GPL closes this gap, since its copyleft only kicks in when you distribute the software, and running a modified version as a web service isn't distribution. That is what they call the "SaaS loophole" and it's the reason why the AGPL license was created.

Why a single, self-contained binary? Because the target audience is someone who wants this to work fast with minimal setup and little infrastructure - not someone who wants to run their own Postgres database, Docker infrastructure, and expensive AWS hosting solutions, then resolve a whole bunch of dependencies just to load the page after hours of struggling. I chose SQLite and rust-embed for static assets and Askama baked-in templates. That allowed me to package the entire web server into one 6.8MB executable file.

Additionally, htmx is bundled with the binary so no CDN dependency is needed - one less thing to worry about, and you don't even need internet access. Self-hosting is supposed to be all about removing external dependencies, so htmx.min.js is baked into the binary and VENDOR.md is attached to respect licensing requirements.

The effect? All my decisions point in the same direction - minimize hassle for the hoster and make the install as easy as possible.

Code's here if you want to follow along or try it yourself ;-) https://github.com/RafalManka/Featherboard

Top comments (0)