Daniel Gultsch has shipped Conversations, his XMPP client for Android, since March 2014. For most of that time it was his primary income, and Play Store sales were the one revenue line that arrived on a predictable schedule — “it pays my rent.” This post is his account of what the platform relationship actually cost, and the announcement that the app is now free because grants made the dependency optional.
What the 15% cut bought:
- More than €1,000 a year — roughly 1.5x his annual internet bill, and about what his notebook costs him per year
- Update rejections “more times than I can count,” for reasons that were never explained
- Two removals from the store, one of them on a false accusation that he was uploading users’ contacts
- A 14-day wait on a pending update at the time of writing
The comparison he draws is not about price. When his internet breaks, someone drives to his house and fixes it. When his notebook breaks, the same happens. At that price, Google offers no channel at all — “not the privilege to talk to a fucking human for five minutes once per year.”
The sharper argument is about review latency:
- Google makes no distinction between feature updates and security updates — both queue in the same pile
- Delaying a security fix by days or weeks is a risk, not an inconvenience
- His hypothesis for the slowdown is an avalanche of AI-generated slop apps, a problem the platform helped create
- Which is why he argues a store should be able to prioritise long-standing, non-generated apps with infrequent updates
The exit was prepared before it was needed:
- Income shifted to grants — repeated NLnet project funding and the European Commission via mobifree — secured through the end of 2029
- Conversations was always on F-Droid, but deliberately unadvertised at first; he steered users toward the paid build
- F-Droid is now the primary distribution channel, the APK reproducibly built and signed with his own key
The fee was never really the cost. €1,000 a year is the quantifiable part; arbitrary enforcement with no appeal path is the rest, and it is the part no invoice shows.
That makes this worth reading next to any app-store policy argument. A platform that cannot tell a feature update from a security update is a supply-chain dependency, and the migration only worked because the pieces were already in place — an alternative channel, reproducible builds, a signing key he controls — long before he needed to use them.