A small group of early adopters have positioned themselves as stewards of Bitcoin. They like the fact that Bitcoin Core is a complicated messy codebase, and only they can be trusted to patch it. If anyone tries to make a Bitcoin implementation using modern practices or languages that didn’t exist when Satoshi created Bitcoin, they will warn everyone that every other client better be “bug for bug” compatible with Bitcoin Core or else it isn’t the real Bitcoin.

By contrast, in Ethereum for example, there is a reference specification that all of the developers agree on. Then, developers can implement a client in whatever language they want. The most popular implementations are written in Rust and Golang.

Excerpt from Ethereum Yellow Paper EIP-150 (http://gavwood.com/paper.pdf)

In Bitcoin, there is a Golang implementation, but again, Core developers will warn everyone that this can never truly be Bitcoin. If you use it, you better pray that it is “bug for bug” compatible with Bitcoin Core.

Myth 1: Go ahead and make your own Bitcoin client. No one is stopping you. Convince the community it is better.

Reality:

Core is actively stopping anyone from trusting other clients by refusing to create a reference specification.

You have no idea how deep that rabbit hole goes. Bitcoin Core is referred to as a “reference implementation”, which means “you should implement all bugs referenced by Bitcoin Core in transaction verification, or you have your choice of being kicked off the Bitcoin consensus immediately, which is bad, or at any point of an attacker’s choosing, which is catastrophic.” — Patio11 on hackernews

Myth 2: Bitcoin Core is the best code by the best developers

Reality:

There are several people we can rule out as being Satoshi because his code quality was so shitty — Bram Cohen

I have heard several other other Bitcoin Core developers echo the sentiment that Bitcoin Core is not the highest quality codebase.

I personally have contributed to the test suite which was very much lacking in coverage at the time. Additionally, when I created Zclassic, I learned that whatever code Satoshi used to mine the initial Bitcoin Genesis block is simply gone and no one knows what it was.

Myth 3: Bitcoin Core is a “reference implementation”

Reality:

Bitcoin Core is the reference implementation… except when it isn’t:

On August 15 2010, it was discovered that … two addresses received 92.2 billion bitcoins each. A new version of the client was published within five hours of the discovery The bad transaction no longer exists for people using the longest chain. — Value overflow incident

Truth: A more diverse set of implementations can result in a fragemented network on error conditions

A tradeoff to consider is that a more diverse set of implementations is likely to fragment the network when bugs are exploited in particular implementations rather than simply halting the entire Bitcoin network if a bug happens to be exploited in Core. Of course, we also have people using different versions of Core, so the network could also become fragmented across versions.

Conclusion

If Bitcoin Core is truly the best software written by the best developers, why don’t they give us a reference specification and allow everyone to compete on equal terms? Maybe people can write a more efficient implementation that isn’t in C++. Maybe it’s possible that people who don’t speak English, or don’t work at Blockstream, or don’t have a neckbeard might also be able to build a Bitcoin Client.

The current state of things would be like the Apache Foundation telling everyone that an HTTP server is whatever Apache does. If you want to write a different HTTP server, it better be “bug for bug” compatible with Apache. Apache is an open project… there’s a mailing list… just participate and do things the way they like and gain their approval. These guys are the best in the world at making web servers, after all. What are you jealous that you’re not an Apache developer?