No, there are cases where other people can suffer from chain splitting bugs too. Let's say you're a high volume merchant or payment processor that runs an alternative implementation. I can make a transaction which it believes is invalid but the rest of the network believes is valid, for whatever reason. Once that gets included into a block, your business will grind to a halt because it'll split off onto a chain that no longer gets extended, or only gets extended very slowly, meaning you can't process payments anymore until the problem is noticed and you find and fix the conformance bug.
If this causes you to lose X coins per hour of business, then I can try to anonymously extort you for a bit less than X by claiming I know of such a bug in your software. It's very hard to prove it's not there. You'd have to have a lot of confidence in the robustness of the testing of your implementation.
What about if you accept invalid transactions? If you're providing a good or service in return for unconfirmed transactions then this obviously can undermine your risk model because you'll receive a transaction that you believe is valid, not a double spend, you don't see any double spend alerts or conflicting transactions - but it'll never confirm and I can still spend the money. I don't have to wait and mine a block any more like I would if doing a Finney attack, so it's much cheaper.
You're arguing that financial software should be developed and tested carefully to which I agree. I find nothing in what you say that validates the "a specification document is a bad idea" point.
Such a document would end up being nearly as long as the source code,
So what ?
and not much easier to read.
You can't possibly be serious.
I'm all for adding more detailed comments to the source, though.
That's a good idea obviously but it's not what's being argued here.
Unfortunately, what you've got is the latter and it's not really easy to fix. We keep discovering new odd edge cases where what the software does, isn't what you'd actually expect given a description of how it's meant to work.
I never said it would be easy, I never said anyone has to do anything about it, we're all scratching our own itches after all.
I'm just saying we'd be better off with a complete spec, because it would decouple the protocol from its implementation.
Just because something is hard doesn't make it less necessary.
I think the Satoshi client is quite straightforward to read, for the most part. A few parts are somewhat inscrutable because they're written very tightly, but unfortunately there is no substitute for just puzzling it out - if you write a description of what you think the code does it may not match reality. We have seen this demonstrated several times, like with the merkle tree calculation. What people thought it did, wasn't quite what it actually did. If you simply duplicated Satoshis algorithm, you would duplicate his bug too so no chain-split attack would have been present. If you re-implemented it based on an English description, you'd have introduced an exploit.
Here you're simply saying that the job is a hard one, but just because some folks have failed in the past doesn't mean it's not a necessary and useful thing to do.