Having multiple implementations of Bitcoin is dangerous.
Not having multiple implementations of Bitcoin is dangerous.
So should you run something other than Bitcoin Core?
(NOTE: many of you probably know all this, but I had to write it out to figure it out for myself, and I think the question is genuinely interesting. I'd love to hear where you stand. I think it makes sense to encourage multiple implementations even though there are risks--see the bottom of the post for reasons).
Although you may not have heard of all of them, there are several implementations of the Bitcoin consensus protocol.
The most popular by far is Bitcoin Core.
Something called Coin Dance sees 13k nodes, 96% running BitcoinCore.
Some of the other Bitcoin implementations that are still actively maintained are:
-Bitcoin Knots
-Libbitcoin
-nix-bitcoin
-Gocoin
-BTCD
@lopp maintains an excellent page with links to all of them.
Why aren't they popular?
The dominance of Bitcoin Core goes back to Satoshi.
Not only is Core the direct descendant of Satoshi's original code, he also wrote:
"I don't believe a second, compatible implementation of Bitcoin will ever be a good idea."
The reason he gave was that "So much of the design depends on all nodes getting exactly identical results in lockstep that a second implementation would be a menace to the network."
Menace? What's the big deal?
The big deal is a chainsplit.
You've probably heard that the chain with the most proof of work is the true chain.
when two different miners find a block at the same time, the chain splits and other miners start building on whichever block they heard about first.
As soon as a new block is added to one side of the split, most nodes and miners accept that as the new true chain and abandon the other side of the split (these blocks are referred to as stale blocks, some people call them orphans).
Since the average time between blocks in Bitcoin is ten minutes, it is likely the whole network will learn about this new block before one is added to the losing side of the split, and the chain with the most work wins.
"Nodes will follow the valid chain with the most work...The key word here is valid. If the node receives a block that it determines invalid, it doesn't matter how much work is done on top of that block, the node will not accept that chain."
Like @achow101 says above, the key word is valid. The menace shows up when a miner finds a block that some other miners and nodes think isn't valid.
Miners who think it is valid will try to build new blocks on that chain. Miners who think it isn't valid will try to build on the last valid block they know about: Two chains and no way to know which is true.
How in the world would such a thing come to pass?
Well, if there is a bug in one implementation of Bitcoin that is not in other implementations, it could lead to a lack of consensus about whether a block is valid or not.
Bitcoin does not have a mechanism for fixing this. The community outside of the protocol has to decide what happens next. It sounds very unpleasant.
So much so, that @peterktodd has said other implementations need to match Bitcoin Core Bug-for-bug.
There you go: multiple implementations are dangerous!
But hang on a second, isn't Bitcoin the permissionless protocol of our FOSS dreams where everyone gets to put on blue facepaint and yell FREEDOOOOOOOOOM!!?
Bitcoin is permissionless.
Anyone can download the chain.
Anyone can interact with the network.
And nobody can stop you from coding or running an alternate implementation.
But this is about if you SHOULD.
A catastrophic chainsplit, where a significant portion of nodes and miners accidentally forked off, would not be good for Bitcoin (certainly not it's price). But it wouldn't threaten Bitcoin's permissionless nature.
A centralized development environment where everyone only builds Bitcoin Core could threaten permissionlessness.
It seems to me that the risk of a fork is less than the risk of increased centralization.
Therefore, I like the idea of running alternate implementations. For it to matter, though, I've probably got to use it to verify coins I receive and broadcast my own transactions. And I have to admit, that makes me nervous.
As @ODELL says, it's about trade-offs.
There is a great (though from 2016) article about this debate by @AaronvanW in Bitcoin Magazine.
You can also read an informative thread on BitcoinTalk from summer 2022 about it.
Implementation follows specification.