Hello Developers!
In terms of a web app, how would you maintain a product that you want to offer a free, self-hosted, barebones version as well as a more robust, hosted, subscription version?
What structure would be best for maintainability so you don't need to split the app into a 'free version'/'subscription version', have the same code base, and open source only the free part?
I run a SaaS product that is open-source and can be self-hosted.
I do maintain a private repository with customizations on top of the open-source version. But these are mostly non-functional customizations: brand logo, "About Us" page, Privacy Policy, some billing related code. I do feature development in the open-source repo, and regularly merge changes into the private repo. The merging process is usually quick and painless with no merge conflicts.
I'm not planning to go the open-core route. All features are available in the open-source version. The SaaS value-add is the convenience:
If you're interested, the service is https://healthchecks.io and its source code is here: https://github.com/healthchecks/healthchecks
I've been following healthchecks for a while, it is a cool Django project to get inspiration from ;-)
May I ask about your license choice? Why BSD and not AGPL?
Thanks! :-)
I wanted a permissive license. One potential risk is a big company taking the source, offering it as hosted service and out-competing https://healthchecks.io. But then, the product is not that big or complex – the big company could throw their resources at the problem and re-implement everything from scratch anyway.
I really liked how Sentry (sentry.io) was built and operated. IIRC, when deciding on license I did look at what license Sentry were using – it was BSD. Ironically, they've recently switched away from BSD to a proprietary license (Business Source License).
I totally understand what you mean, and I'm glad you chose BSD! I just superficially know sentry, didn't know they had an open-source version!
I always have conflicting feelings when choosing licenses... Especially coming from an academic background, where licensing MIT may be enough (and even good), to building a company which needs to protect itself from competition, and thus GPL at least forces other's development to still be Open-Source...
I think it depends on the framework you use for developing. I have tried this with Python (for web would be Django/Flask, etc.) in which basically you can have an open-source package, which people can install/find on Github. And then, the paid version builds on it. Thus, improvements to the open-source get incorporated into the paid one immediately, and whatever you do in the private don't get pushed to the open-source.
I assume other frameworks would work in the same way. You just develop a package and release it, just as most packages you already use. Then you build the paid version on top of that package.
This is what I was thinking. I got this idea from Sidekiq, which I think does it this way.
And is that working out well for you commercially?
The project in which I'm involved is not for a software company, but a hardware company. We are building a microscope. And yes, it is working well, but it is the other way around. Drivers are proprietary, but the user interface is open source, this gives the users the possibility to build on what we do.
However, the question of OP was not whether it works commercially or no, but how to structure the code not to maintain two codebases simultaneously.
Thanks. And yes, I do understand that the OP's question was different, but I was interested in the commercial aspect so sidetracked a bit..
One possible way to do this is to create a dynamically loadable plugin architecture for all significant components (database access, instrumentation, extra features, etc.), open-source the system with necessary plugins, and keep the premium ones that you use in your SaaS in a private repo.
Not sure if this fits exactly what you're looking for. But thought it was worth sharing with you or whoever searches and finds this post:
https://www.producthunt.com/posts/xs-code
Checkout Feedbin.com, Ghost.com and Gitlab.com. They all have their codebases open while selling subscriptions.
I’d think about the value that the code alone has vs the hosted service. What is more valuable to people? For example, I could read the docs of Feedbin and host it myself. But I’d probably pay more for the infrastructure than I do now. Also, I don’t care about maintaining servers. I want to read interesting articles. So I pay the subscription.
The situation is probably quite similar with Ghost. People want to write a blog without having to worry about uptime and cost when their post ends up on the front page of Hacker News.
Personally, I’d be careful about just releasing a cut down version of your app. Unless you’re willing to take a risk and publish the valuable bits, it’s pretty unlikely that the community will notice anyway. There’s no shortage of cool open-source projects these days. In that case it’s better not to do it at all.
What constitutes the “free” part vs. the “subscription” part? Just the fact that it is hosted & managed for people?
You may be looking for more of a source-available (researchable term) approach rather than a complete open-source one.
Consider the option of tacking on the Commons Clause to an open-source license of your choice for starts. From what I understand of it, doing so basically gives you exclusive rights to commercial financial gain from the substance of the software, without limiting private, self-hosted usage of it. I would continue to explain, but I think that it’s probably best to just point you to the website ↝ https://commonsclause.com/