The world changed
Open source used to mean something clear: you publish code, people read it, talented contributors occasionally send a thoughtful patch, you review it together, and everyone benefits. That compact still holds in some corners of the internet, but something shifted when AI coding tools became widely accessible.
Today a significant portion of pull requests on any public repository are generated by language models. Not reviewed by their authors — generated, formatted to look legitimate, and submitted. The code compiles. The tests pass, if there are tests. The description sounds confident. And then you read it and realise the author does not understand what the function does, has not read the surrounding code, and introduced a subtle race condition or an injection vector because the model did not know about the invariant that the rest of the codebase depends on.
Reviewing a bad patch takes longer than writing the feature yourself. You have to reconstruct what the author thought they were solving, explain why it is wrong, and do that without being discouraging — because maybe they are learning, and that matters. AI-generated patches remove the “maybe they are learning” part. There is nobody on the other end to learn anything.
Issues are not free
The same dynamic applies to issue trackers. A public repository is a surface. People file issues that are support requests, duplicate reports, feature requests that directly contradict the project’s stated purpose, or complaints that amount to “I did not read the documentation.”
Each of these has a cost. Triaging takes time. Replying politely takes energy. Not replying feels rude and creates a thread that sits there making the project look abandoned. Closing without comment generates a reply asking why.
This is not a complaint about people. It is an observation about incentive structures. When filing an issue costs nothing and there is no accountability, the signal-to-noise ratio is what you would expect.
Focus is the actual product
annota is built by one person, in the hours that remain after a full-time job and a life outside software. That budget is not large. The question is not whether I want a community — it is what the realistic alternative to closed source looks like.
The realistic alternative is that a meaningful fraction of available development time goes to community management: reviewing submissions that cannot be merged, responding to issues that cannot be addressed, explaining decisions that were already explained in the documentation. The code that actually matters — the features, the fixes, the security work — gets less time, not more.
Closed source is not a statement about trust. The people using annota are not the problem. It is a statement about where attention goes. Attention directed at writing good software is more useful than attention directed at explaining to a bot’s author why their generated patch misses the point.
What you actually get
Self-hosters get a Docker image and a Helm chart. The software runs. You do not need the source to deploy it, and most people running self-hosted software never read the source anyway.
The design decisions are documented. The security model is described. The changelog is public. Bugs can still be reported — I read them, and I fix the ones that are real. The difference is that the issue tracker is not a public forum, and the repository is not a surface for unsolicited contributions.
One developer, one project, finite hours. Closed source is the honest choice for now.