Daniel Berlinger wrote OK. But I think what Dave just did was open up the path for extensibility.
Absolutely. Dave blasted a rather large hole through a small number of APIs. And did it in exactly the right way - one that matches parameters by name. And tells implementors to ignore what they don't understand. Bravo.
There have been some discussions about style (how much struct is enough? One implmentation uses a single param -- a struct -- that contains everything else, the method call, the params etc.
I personally don't believe that there is one right style. My preferred approach would be to design a clean XML message. One that would be easy for multiple vendors to map to the styles that make the most sense to their users. Truth be told, for interop purposes, I don't care how you chose to present an interface to your users, I only care what you chose to send across the wire.
I don't understand how you can say "orchestrating the upgrade of all clients and servers across the internet each time this occurs" will be eliminated. In your example, you add a param to a call, and as is the general rule, servers ignore anything they don't understand. So if I add the param to my client it's either ignored by the server or the server gets an upgrade. How is this real world different?
They don't have to all have to be changed at once.
Let me repeat. Dave did exactly the right thing. As he undisputably has done countless times before and will continue to do for the forseeable future. However, at some point there will be a collective "AHA!". And I plan to be there when that occurs.