jcrenshaw.dev
john
writing / I Built My Own Door

no.17 · cosmic

I Built My Own Door

I pulled my applets out of the COSMIC store and started hosting them myself. People keep asking why. Here it is once, so I can stop retyping it in DMs and threads.

I left GitHub last year and I wrote down why. Microsoft trains its models on the code people host there, mine included, under licenses it ignores while it sells the result back at nineteen dollars a month. They hold a contract with ICE. They took an open, distributed tool and bolted a proprietary platform on top of it, so your issues and your history and your stars live on their servers and not yours. None of that was a close call.

But leaving is never as clean as the post makes it sound. One thread stayed connected. COSMIC applets get listed through a flatpak repository that lives on GitHub, and if you want your app in front of COSMIC users, opening a pull request there is the price of admission. One repo. A delivery path, not a home. I could live with that, and for a while I did.

I should say up front that I'm the last person who argues against gates. I spent four decades shipping other people's critical systems, including the payment providers that move debit, credit, and ACH, where a mistake doesn't come back as a one-star review, it comes back as someone's money in the wrong account. I believe in standards. I run a row of them on my own code. So when I tell you the problem here wasn't that the maintainers wanted a standard, take it seriously. The problem was the standard they reached for, and what watching them apply it told me.

It hardened in stages.

First it showed up in the core COSMIC repositories, as a line on every pull request. Disclose any AI-generated code in your commit messages. And underneath it, the part with teeth: AI authored or partially authored PRs "may be closed without comment." They called it disclosure, but a pull request closed without a word isn't disclosure, it's a door with a sign on it.

I want to be fair about where this started, because the first place it appeared is the one place I don't argue with. The core COSMIC repositories are the desktop itself, the code that becomes the operating system the second a user logs in. If the maintainers want to say no AI goes into that, it's their house and their name on the result, and I'd make the same call from their seat. The people who have to live inside that codebase for the next decade get to decide what lands in it. I have no quarrel with that line. It's everything that came after it.

Then came the reasoning, out in their chat, plainer than any policy page. A COSMIC maintainer laid out the legal theory: "all code generated by a LLM is public domain and cannot be copyrighted," and you are "legally required to disclose which lines of code were generated else you will legally forfeit all copyright of all code in your project." Another drew the line at the tooling itself: "If you know what you're doing, you won't need LLM code generation. IDE support from rust-analyzer is all you need to autocomplete and get API tooltips as you type." The attitude is the part that traveled.

The same checkbox showed up on the flatpak repo, the third-party one, the pointer list, the one tie I still had to GitHub and the delivery path I'd agreed to live with, now carrying the attestation gate too.

I don't have to characterize the attitude that came with it, because it's sitting on that repo in public. A developer submitted a COSMIC panel applet to it, the same pointer list, the channel they'd been told to use because Flathub won't take COSMIC applets at all. They'd built the thing, tested it, and asked a maintainer to approve the CI run. The reply was one line, and it closed the request: "The git repository referenced is not public. I'd prefer not to waste my time fixing your LLMs issues." The first half is a fair technical reason. The second half is the tell.

Because that repo doesn't hold anyone's code. It holds pointers to other people's applications, manifests that say where to go find them. A maintainer admitted as much, about a third-party applet: "if they are doing AI nonsense in their own applet, and the manifest is okay, I really don't have a reason to not allow it." They were right. What lives inside those apps was never theirs to police. They put an AI gate on it anyway, the one place that, by a maintainer's own account, had the least business with one. And the one time I watched it enforced in the open, it didn't read like a rule applied evenly. It read like a person deciding whether you were worth the trouble. That's my read of it, and it's why I stopped trusting it: a policy that runs on a mood isn't a policy, it's a person you have to keep on your good side.

I'd have let the legal theory go if it had stayed a chat opinion, but it was part of the case for a policy that closes AI-assisted pull requests without comment, so it's worth setting straight, and it took me an afternoon with the actual sources. Start with what's true, because some of it is. In the United States, material a machine generates entirely on its own, with no human shaping the expression, isn't copyrightable. The Copyright Office has said so and the courts have backed it. That part is real.

Everything stacked on top of it is not. "All LLM code is public domain" stops being true the instant a human selects, arranges, or edits what the model produced, which is what actually using one of these tools looks like. The Copyright Office's 2023 guidance and its 2025 report both say the human-authored part is protected. The one case everyone points at, Thaler, says it out loud: it refused a copyright to a machine listed as sole author, and went out of its way to state that the rule "does not prohibit copyrighting works made by or with the assistance of" AI. Source code is a literary work. Section 102 of the Copyright Act protects it the moment it's written down, with no registration and no disclosure required for the copyright to exist.

And the threat, disclose your lines or "forfeit all copyright of all code in your project," isn't a law at all. It describes a registration form, and somewhere along the way the form got mistaken for the thing it records. Copyright exists automatically; registration is a separate, optional step, and the duty to flag AI content lives there, on the application, not on the code. Skip it and the worst case is the registration gets corrected, not that your copyright evaporates. When the Copyright Office actually ran into this, with the comic Zarya of the Dawn, it canceled the original registration and issued a new one covering the human's work, which stayed protected the entire time. No one's project has ever dropped into the public domain over an undisclosed line. There's no mechanism for it to. And the Developer Certificate of Origin they cite two lines down in the same checklist says nothing about AI at all. It's about whether you have the right to submit the code. It never mentioned models, and it still doesn't.

Step outside the US and the flat claim falls over completely. The UK has had a statute since 1988, section 9(3), that hands the copyright in a computer-generated work to the person who arranged for it to be made. New Zealand does the same. So does Hong Kong. India registered one with the AI named as co-author. "It's all public domain" isn't even true on one continent.

What gets me is that the all-or-nothing reflex was never the only option, and the proof was sitting in the most security-critical codebase on the planet. The Linux kernel takes more AI slop in a week than COSMIC will see in a year. Torvalds said this spring the security list had gone almost completely unmanageable under it, and he started reverting the machine-generated junk on sight. And the kernel still didn't ban the tool. After months of fighting about it, the maintainers put the rule in writing instead. AI-assisted code is allowed. It just can't ride in under a Signed-off-by, because only a human can stand behind the Developer Certificate of Origin, so it carries an Assisted-by tag that names the model, and the human who submits it owns every line and every bug that falls out of it. Set that next to the COSMIC checklist, which staples an AI question onto the DCO as if that certificate had ever been about machines. The kernel understood its own document better than that. The tool is permitted, the accountability is mandatory, and the most exposed project on earth managed to write that down while drowning in worse than it will ever face.

Flathub did the identical thing at the end of that same month, and I wrote about that one on its own. Same reflex, same disease. Ban the tool, skip the judgment, because a one-line prohibition is easier than reading a submission and deciding whether the person understood what they sent. All-or-nothing is the lazy setting, and it always lands on the wrong people: the ones who disclose, never the ones who hide.

And the "if you were any good you wouldn't need it" line, the one about rust-analyzer being all a real developer needs, I've heard before, almost word for word, aimed at the tool making it. I sat through the IntelliSense version of it: if the editor remembers the API for you, you don't really know it, a real programmer keeps it all in their head. Before that the IDE itself was the rot, you were supposed to live in a text editor and a compiler. Before that, high-level languages were making programmers soft, the assembly hands were certain a compiler could never write code as tight as theirs, and if you go back far enough somebody swore the assembler would be the end of the craft. Every rung up the ladder the same crowd lines up to call it the death of real engineering, and every time the work just gets built on top of it, usually by the same people once they stop sulking. The tool was never what made the code good or bad. The hand on it was. A careless engineer shipped garbage with a text editor in 1995, a careful one ships reviewed code with a model now, and a rule that can only see the tool is staring at the one variable that was never the problem.

I want to be careful here, because the people I'm quoting are real and so is their work. COSMIC is a genuine achievement and it's running on this machine as I type. I'm not questioning anyone's competence or their right to make rules in their own house. What I'm describing is the gap between the standard they claimed and the way I watched them apply it, and that gap is the whole reason I left. The sharpest piece of it is sitting on a public pull request for anyone who wants to go read it.

So I stopped depending on them. I pulled my applets out of the COSMIC store and off that flatpak repo.

My first move, though, was a knee-jerk, and it was the wrong one. I marked Tempest end-of-life. Marking it dead didn't land where I aimed it, it landed on the users, the people running it on their own machines who'd done nothing but install my software and trust it to keep working. Quitting isn't in me anyway, it never has been, but that isn't what turned me around. They did. Taking a fight that was never theirs out on the people who depend on my work was backwards, and if you were one of them, you have my apology. So I un-retired it, and I changed how it ships.

It goes out now through the AUR and through a Flatpak repository I run myself, one signing key as the trust root for everything under my name. After GitHub I'd landed on Codeberg, and it was fine, but it didn't have the room to run the whole operation, the pipelines and the store and the release plumbing, the way I wanted to own it end to end. So the canonical home is GitLab now, where I can host all of it myself. Self-hosting was always where this was going. I built my first machine and ran a BBS over an acoustic coupler, and the instinct to hold my own keys never went anywhere.

Here's the rule I took out of it. When you ship through someone else's gate, you are never the only one standing on it. Everyone who trusts your work is standing there with you, and the day the rules change, or the mood does, they are the ones who fall through.

The maintainers can run their store however they want. It's theirs, and I don't begrudge them a line of it. I just won't put the people who count on me on ground I don't control. My name is on my applets, my key signs them, and the last gate between my code and the person who installs it is one I hold.

I stopped asking for the door. I built my own.

← index ← previous: Say Their Names