I wrote this post in October 2026 and dated it to 20 October, the day I took the decision it describes.
I make two mandala apps: Mandala Generator for macOS and Dahlia – Mandala Maker for Android, which started as a port of the Mac app. Both are open source under the GNU General Public License, version 3. Both are also sold, or will be: Dahlia is free on Google Play with a one-time Pro unlock, the Mac app may follow later. This is the reasoning as I recorded it when I made the decision.
What you pay for
You do not pay for access to the code. The code is public, and anyone may read it, change it and build it. You pay for a ready app: signed, installed through the store, updated when I ship a new version, with the Pro features unlocked by a purchase instead of a build step.
Why the GPL and not MIT
I want this work to stay open. With MIT, anyone could take the code, add a feature and sell the result as a closed app. The GPL does not allow that: a copy must stay open under the same terms.
I was the only contributor to both repositories when I decided this. So I could pick the licence freely and can change it for later versions. Contributions from others come in under the same terms; there is no separate contributor agreement for now.
Why not keep the Android app closed
The Android repository was private at first, while the Mac app had always been public. Keeping it that way would have protected almost nothing: new features are built in the Mac app first and then ported, so the public code already showed how the app works.
The extra permission for app stores
The GPL alone does not sit well with app stores. The Google Play Billing Library is proprietary, and the App Store’s terms add restrictions on use and copying. As the only author I can ship my own builds either way; anyone else could not legally distribute a build with those libraries. So the licence comes with an additional permission under GPL section 7: you may combine the program with the Play Billing Library and the system libraries of Android, macOS or iOS, and you may convey it through app stores whose terms add restrictions. The LICENSE file is the unmodified GPL-3.0; the permission stands next to it in the repository’s README.
What I accept
- Anyone may build the app from source, Pro features included. A debuggable build already counts as Pro. The store build is the convenient way, and that is what I sell.
- Someone may publish a copy in a store, as long as it stays under the GPL. My answer to that is the app’s name and regular updates, not a licence trick. A trademark only if it ever matters.
- None of this is legal advice. For a larger commercial launch, a short check by a lawyer is cheap.
One repository, after a secret check
The second decision of the same day was to merge the private Android repository into the public Mac repository. Most changes touch both apps; one change, one review and one decision record now cover both. The Mac repository already had the public URL, the releases and its star.
Before anything went public I searched the whole Android history, 29 commits and 448 blobs, for key files, signing settings, API keys, credentials, e-mail addresses and local paths. Nothing of the kind had ever been committed; the only thing the old history exposes is an earlier quote collection that was already public in the Mac repository.
Both histories were kept without a rewrite: each app moved into its own folder, mac/ and android/, then the two histories were merged. Commit hashes, tags and releases of the Mac app stay valid, and no public branch had to be force-pushed. The private Android repository was deleted afterwards; its whole history lives in the shared one.
For buyers and for builders
If you buy Pro, you get the signed store build with Pro unlocked, and the updates.
If you build from source, clone morja/mandala-generator, build the Mac app in mac/ or the Android app in android/, and you have the full app, Pro included. You may change it and pass it on under the GPL with the same permission, and contributions come back in under the same terms.