Ok perhaps not all transactions would have fees but the free ones would immediately be used up by the hasher spam so effectively all transactions would need fees.
This
might be a valid attack at the moment, but it's not like it can't be handled by real people should the need arise. There is nothing that says that a particular generating client can't be set to ignore transactions based on certian parameters beyond the current Bitcoin settings. One particular client that ignores transactions over half a meg in size, for example, does nothing; but as other generating clients take take a similar approach that kind of attack becomes progressively less successful. It's not like the rules are set in stone, this is a community. The majority will rule.
That said, it's not a particular problem
now because there is nothing that says that the spamming agent is the one to benefit from his efforts. Classic game theory, so I don't think that it's
ever going to be an issue, as that would imply collusion, or at least that one particular generator has begun to monopolize the network.
The point I was making about buying something expensive urgently is the following:
Suppose I have 90 BTC. My friend is in desperate need of 50 BTC so I send it to him without including a fee. All the "free" transactions in the block are taken and, as it doesn't include a fee it's not included in the block. I realize my mistake and would like to cancel the transaction and am willing to reissue it with a 10BTC fee payment to get it in the next block for sure. However, I don't think I can do that as I've already spent the 50BTC and I only have 40 left. There may be a workaround for this. What is it?
There is no way to cancel a transaction, nor should there be.
More fundamentally, let's say someone for whatever reason spams the network with lots of transactions with no fee at 1MB per second. Most of the transactions don't get into blocks because they don't have the necessary fee, but they are not forgotten! They have to persist in all the clients to try to get into the next block. Are they stored on disc? If they are stored in memory then the client consumes memory at 3.6 GB every hour! If they are stored on disc then it's the same problem as if they were hashed in the block chain.
Transactions are not persistent per se. The client can be modified to clear the transactions older than an arbitrary time limit, or simply rebooted.
Unless there is a scheme for forgetting transactions that have insufficient fee then it's still a big problem. I said that Bitcoin doesn't have effective countermeasures against spamming. I think I have shown that fees are not effective and that the current fee schedule make the problem worse, not better.
Bitcoin doesn't have many countermeasure against spamming, because there is little real evidence of what kinds of attacks are effective against it. Try and break it, you will help future users.