Satoshi is exactly right about alternate implementations. They are hard to do right, and can cause a hell of a mess when done wrong.
But, it comes down to which of the two bad options do we like least. Virtually no one currently active on the project wants a monoculture. We are willing to take on the challenges and risks of multiple implementations because we feel that the risks of having just a single client are even worse.
Perhaps he'll turn out to have been right about this too, in the long run. We should be able to answer that question fairly well in another 10 or 20 years.
Talk to us about the kind of mess it could potentially cause. Satoshi's "menace to the network" statement was maybe a bit vague.
Each node validates network messages. If some nodes think that a block or transaction is valid, while other nodes think it is invalid, you can have a fork. This is what happened when the BDB bug hit a while back.
In the case of the BDB bug, the people running the network (aka, "us") decided that we'd invalidate one fork to re-merge the network. This option is not likely to be possible or practical for all such forks in the future. In particular, as more implementations start up, the fraction of the network hurt by any given fork will grow smaller and smaller and at some point the majority will refuse to insert bug compatibility.
In practice, this will cause accidental or intentional forks at small numbers of nodes. As in, someone may be able to carefully craft a transaction or block that will knock one node out of sync, with the intention of doing mischief to that node. Equally possible will be that such things will just happen by chance, and some times they will go unexploited, but other times people will lose money because of it.
The only real safety is to be running the exact same software as the majority, and in the exact same environment. Note that the BDB thing didn't hit all nodes that it potentially could have hit, because it depended partially on the environment.*
The monoculture carries different risks, but it is largely resistant to these sorts of problems.
Are you familiar with the
Brown M&Ms thing from rock history? It was parodied in
Wayne's World II. But it was there for a reason. Van Halen put on a huge show, and to do it safely, they had a list of detailed technical requirements they presented to the local promoter. The brown M&Ms were a canary. If the promoter forgot that step, it was assumed that the other things in the contract had also been neglected, so they had to check everything personally. If the promoter presented the M&Ms correctly, it was likely that they were careful with everything else too.
In a similar way, the people that are most familiar with the software have a sort of list of likely forks points in the code, where if someone gets it wrong, their node will (or at least
can) eventually fork from the rest of the network. When someone posts a new implementation, they can check a few of those, and if they aren't done right, the devs are pretty safe saying "Your code has big obvious flaws. It probably has other more subtle flaws too. Please do not let anyone use this code until you can show that you really understand the reference software."
*
I run one ancient node for amusement. By some quirk of fate, it was not hit by the BDB thing, even though it really should have. I think that all of my nodes that are merely old did get hit by it.