The decision
Last week I made some of our repositories private.
I didn't want to. I still don't.
Not all of them. We publish our models, weights and all, and most of our code is still public. That part isn't changing.
But a handful of repos that used to be open aren't going back, and I've felt worse about this than about anything else I've decided this year.
If the models hadn't got this good at finding security holes, I would have published all of it. The way I always have.
That's the honest version. The principle didn't move. The world underneath it did.
The thing that actually changed my mind
It wasn't a paper. It wasn't a policy debate. Nobody talked me into it.
It was a bitcoin wallet company, and a bug they shipped in 2021.
I'm not going to name them, because they don't deserve to be the villain of my newsletter and because the specific company isn't the point.
Here's what happened.
They make the careful option. Hardware wallets, the little devices that look a bit like a calculator, the ones you buy precisely because you don't want your money sitting on the internet.
Cold storage. Offline. The thing every guide tells you to do if you're serious.
Their code was public the entire time. You could read it. You could rebuild it yourself and check that what you'd built matched what they'd shipped. That was a feature, not an accident, and it was a real one.
The bug went in around March 2021.
Nobody found it for five years.
Then last month somebody did.
On July 30 an attacker emptied 1,196 addresses in 41 minutes. About $70 million, out of wallets that were sitting offline in people's drawers.
Three more waves followed. 4,585 addresses in the end, and about $88 million.
Nobody laid a finger on a single device.
The part I can't put down
I've read a lot about it and I keep skipping past the company.
What I keep landing on is the people.
They did everything right. That's what gets me.
They chose the cautious product over the convenient one. They kept their money offline. They followed every piece of advice anybody gives you about this, including the advice that the code being public makes it safer.
And the thing that took it was a line of code that had been sitting in the open since 2021, waiting for somebody to show up with better tools.
Nobody was careless. The careful path was the one that failed.
I've thought about that every day since I read it.
What I'm actually afraid of
I want to be precise here, because it would be easy to dress this up as a strategic decision and it isn't one.
I'm not worried about being embarrassed. I'm not worried about competitors. I'm not worried about a bad news cycle.
What I can't sit with is the idea of somebody who trusted us losing something real, because I put something in public that made it easier to hurt them.
Not a customer of ours, necessarily. Anyone downstream. Anyone in the same ecosystem who happens to use the same pattern we published.
That is a genuinely painful thing to imagine, and I've found it doesn't get less painful the longer I sit with it.
For most of the last decade that risk was theoretical enough to ignore. Publishing meant a handful of people might read your code, and most of them were on your side.
That's the assumption that broke. Not the ethics of open source. The arithmetic underneath it.
What we're actually doing
So here is what changed, stated plainly, because I'd rather say it myself than have somebody notice.
We're still open source. The models still go up publicly. That's the part I care most about and it isn't up for discussion - a model you can download and run is a model you own, and I'm not walking that back.
Most of our code stays public.
But we've stopped publishing everything by reflex. 'Open by default' was never a decision I sat down and made. I inherited it from a quieter time and never revisited it.
A few of our repositories describe a live system that has people's work sitting inside it. Those are private now, and I'm not going to explain which ones or why, because that explanation is itself a hint.
And there's a second change that I think matters more than the first.
Where we do publish, we're going to say what the risks are.
Not a licence file. Not a disclaimer nobody reads. An actual plain-language note about what this code does, what it touches, and what you should think about before you run it in front of your users.
Because the thing that bothers me most about the wallet story isn't the bug. It's that everybody involved believed public meant reviewed.
I believed that too. For years. I was wrong about it, and I don't think I'm the only one still carrying that assumption around.
If you build anything
I don't have advice, exactly. I have the question I've been asking myself, which you can have.
It isn't 'should I open source this'.
It's 'do I still know what I'm handing over when I do'.
Five years ago, publishing a repository meant a few interested humans might read it on a good week. That was the deal, and it was a good deal, and an enormous amount of what exists got built on it.
The deal changed and most of us haven't renegotiated. I hadn't.
Open source isn't what it was. I want to be careful not to overstate that, because I owe basically everything to it - three of us can run an AI lab in Toronto only because thousands of people gave their work away first, and I don't take that lightly.
I still believe in it. I'm still doing it.
It just costs something now.
And the people who end up paying that cost aren't always the ones who chose to.
|