Some thoughts and lessons learned on the web’s client-server model, interoperability, and standards:
Long tail of servers is much more important to the clients with lots of users than the long tail of clients is to the servers with lots of users. That is, users and their servers of choice are important, software is not.
The incentive for servers is to work with clients that have lots of users. Interoperability between servers is not critical (until they start talking to each other, but then one of them becomes a client). That is, servers do not need to output the same thing, what is important is that they work.
The incentive for clients with lots of users is to work with all servers since users have diverse interests. Interoperability is critical. That is, outputting the same thing is important and accepting all the varied server output is too, since otherwise some servers will not work.
Users will replace their client that does not work for a given server, as they cannot switch servers. This again forces clients towards interoperability, but puts no such pressure on servers.
For clients, only mandated canonicalized or mandated randomized output will work long term standards-wise. Anything else will slowly converge towards the client market leader.
In other words, the robustness principle most certainly applies to clients, whereas servers have more freedom to be strict (or broken, if you will) both ways. This model also applies if you look at the individual subsystems, e.g., JavaScript language implementations versus deployed JavaScript code and HTML implementations versus deployed HTML. We have found time and again that minor divergence between client implementations leads to broken behavior for a given server, whereas the reverse does not apply.