Nostr is a giant shit show. The fact that our software interoperates at all is a miracle and probably just a temporary anomaly. Given enough time, the relentless breaking changes being made to published NIPs will eventually break everything.

Linux succeeded because "WE DO NOT BREAK USERSPACE". For nostr to succeed, changes must "NOT BREAK EXISTING IMPLEMENTATIONS". There shouldn't be any exceptions to that EVEN IF THE IMPLEMENTATION WAS NON-COMPLIANT.

Pay close attention to Linus right here:

> Are you saying that pulseaudio is entering on some weird loop if the

> returned value is not -EINVAL? That seems a bug at pulseaudio.

Mauro, SHUT THE FUCK UP!

It's a bug alright - in the kernel. How long have you been a

maintainer? And you *still* haven't learnt the first rule of kernel

maintenance?

If a change results in user programs breaking, it's a bug in the

kernel. We never EVER blame the user programs. How hard can this be to

understand?

Linus doesn't want to break pulseaudio EVEN THOUGH pulseaudio was doing the wrong thing.

It seems like every week I find a NIP that I've coded for has changed. This last week I think it happened three times already. Sometimes it's a small change and I quickly update my code. But I can't read all the PRs, and I'm afraid dozens of small changes have slipped past my notice. Gossip is probably now incompatible with multiple other implementations which happen to have implemented different versions of the same NIPs (some older, some newer).

Even if we didn't have any breaking changes, the simple fact that different software implements different optional NIPs itself presents to end users like broken software. Why does it work in Damus but not Amethyst? Why does it work in Amethyst but not Coracle? That is an even harder problem to solve.

But let's at least solve the easier problem and stop changing NIPs. If you don't like a NIP make a new one, don't break the current one. Even if you think the current one sucks balls and should have never happened. Even if you think there aren't many implementations out there.

You mean a NIP (which is a specification in my understanding) changes over time? Is there no change management like versioning of NIPs?

Reply to this note

Please Login to reply.

Discussion

Unlike IETF RFCs, yes NIPs change. But they are in a git repo so you can track their history. Most of the changes are fixing typos or better wording, which I don't mind.

Nostr has had numerous breaking changes in the past because fiatjaf could get everybody to agree to make the change, and without the change we were kinda screwed in one way or another. So an occasional breaking change is sometimes worth it. We changed 'p' tag conventions (although the old way is still supportable), nostr: urls versus # [ 0 ] notation (without the spaces, it might be turned into a link), and probably half a dozen more at least.

In reading recent PRs I got the impression that people were just breaking shit left and right, that breaking changes were accelerating. But I overstated the case. I looked into the git history and what was actually merged wasn't that bad.

I just want a list of them somewhere so I can keep up, and I want people proposing NIPs to be keenly aware that they shouldn't be breaking things.