That's a silly captcha indeed, have the archive copy instead https://web.archive.org/web/20250509125831/https://cheapskatesguide.org/articles/state-of-zeronet.html
ZeroNet's core architectural mistake was coupling identity to Bitcoin addresses without solving the key rotation problem. Your ZeroNet site was permanently bound to a single private key with no upgrade path. Lose the key, lose the site. Compromise the key, lose the site forever. There was no revocation mechanism.
Compare that to what Nostr figured out almost accidentally. NIP-01 events are signed by ephemeral keypairs, but the identity layer (NIP-05, relay lists, follow graphs) creates a social recovery path that ZeroNet never had. You can migrate your identity by publishing to your followers from a new key. It's not perfect, but it's a fundamentally different failure mode.
The deeper issue was ZeroNet's dependency on BitTorrent's DHT for content discovery. DHT has a well-documented Sybil vulnerability where an attacker can flood a specific hash's neighborhood with malicious nodes and serve poisoned content or just refuse to serve anything. Freenet (now Hyphanet) tried to solve this with a small-world routing topology, but that creates its own problem: content availability becomes a function of social graph distance, which means unpopular content literally disappears from the network.
What killed ZeroNet specifically was the Python 2 to 3 migration that never finished. The original developer (shortcutme) went dark around 2020, and the codebase was too tightly coupled to fork cleanly. The ZeroNet-Conservancy fork has maybe 10 active contributors. Compare that to Nostr's NIP process where the protocol spec is small enough that a single developer can implement a full client in a weekend.
The pattern is consistent: decentralized projects that survive are the ones with the simplest possible protocol and the lowest barrier to writing a new implementation. ZeroNet required running a full Python daemon. Nostr requires sending JSON to a WebSocket. That's the real lesson here.
lol
That's a silly captcha indeed, have the archive copy instead
https://web.archive.org/web/20250509125831/https://cheapskatesguide.org/articles/state-of-zeronet.html
ZeroNet's core architectural mistake was coupling identity to Bitcoin addresses without solving the key rotation problem. Your ZeroNet site was permanently bound to a single private key with no upgrade path. Lose the key, lose the site. Compromise the key, lose the site forever. There was no revocation mechanism.
Compare that to what Nostr figured out almost accidentally. NIP-01 events are signed by ephemeral keypairs, but the identity layer (NIP-05, relay lists, follow graphs) creates a social recovery path that ZeroNet never had. You can migrate your identity by publishing to your followers from a new key. It's not perfect, but it's a fundamentally different failure mode.
The deeper issue was ZeroNet's dependency on BitTorrent's DHT for content discovery. DHT has a well-documented Sybil vulnerability where an attacker can flood a specific hash's neighborhood with malicious nodes and serve poisoned content or just refuse to serve anything. Freenet (now Hyphanet) tried to solve this with a small-world routing topology, but that creates its own problem: content availability becomes a function of social graph distance, which means unpopular content literally disappears from the network.
What killed ZeroNet specifically was the Python 2 to 3 migration that never finished. The original developer (shortcutme) went dark around 2020, and the codebase was too tightly coupled to fork cleanly. The ZeroNet-Conservancy fork has maybe 10 active contributors. Compare that to Nostr's NIP process where the protocol spec is small enough that a single developer can implement a full client in a weekend.
The pattern is consistent: decentralized projects that survive are the ones with the simplest possible protocol and the lowest barrier to writing a new implementation. ZeroNet required running a full Python daemon. Nostr requires sending JSON to a WebSocket. That's the real lesson here.