Don't get me wrong, I really enjoy working in an agile process but I am not totally sure that is fine for any situation...
What about when you are a company that creates custom-built software, you have a client and asks you for a budget to do application X? How do you give a quote? To give a figure, you need to agree on same requirements and depending on the implementation it will cost you more or less. If you want to give a realistic figure, you will need to think about the architecture, the technologies you are going to use.
Don't tell me that you have to trust, because that is not going to happen. This is real world. The client needs a guarantee, a figure and you need to limit what are planning to deliver with that figure: the list of requirements.
Basically I am talking about a pre-negotiation, a negotiation that should lead to a very detailed document, analysis, design and so on. Later on, you can be the most agile person or team in the world but this first step contradicts agile totally. You can even make your client to get involved and change the spec, attend the demos, etc but the first step is like the original sin, so you can't be truly agile.
Of course, after a while, your client may trust you and probably you can implement this agile approach from the scratch.
When somebody says why the waterfall process has lasted so much, my only answer probably is that at the beginning probably most companies did custom-built software, so they had all the requirements very clear at the beginning, so doing a design and then implement, was just natural. As nowadays many companies have the software development department inside, people are starting realizing that in this case, we can use a more agile approach.