As I've been working on testing legacy features, I've been struck by the fact that the legacy UO client is remarkably backwards compatible. The 6.x.x.x clients still will gladly disable features that were added to the server/client/protocol years before the 6.x.x.x release.
The protocol, likewise, has been incredibly stable. Only two packets have changed - the addition of 2 bytes to the feature packet and 1 byte to the addsingleitem packet - since 1997. Sure, there have been additions, but no existing packets have been modified.
Based on interviews I've read, EA believes that shutting down what they call the "grey servers" would cost much more (in enforcement and legal dollars) than they would make by driving users back to the official servers.
But there are so many inexpensive ways that EA could have made playing on "grey servers" more difficult. Changing up the client to be slightly but not entirely incompatible every so often would certainly do that.
Instead, the client remains backwards compatible.
Even more interesting, the UO team has never tried to make a packet with id 0xF0 - the packet id that is used by razor/uoam/uoassist to negotiate features with RunUO.
One wonders if they're specifically trying not to make their client incompatible with those tools.
Maybe! And it could be that they're being ultra-conservative with their changes because they don't have the manpower to do anything but bolt on new code running on top of the old code, so nothing ever gets changed. But it has the net effect of not inconveniencing people who are playing UO and not paying for the privilege.