Conspiracy theories are fun, but the "real" reason is in one of the several articles floating around HN that past few days. Mainly, it was a disorganized mess that no one was going to build tools for. Then IBM got hold of it, then...
[0] Previously it was, "we don't care if it makes money as long as it supports the Windows platform", hence the "developers, developers, developers" from Ballmer that folks like to dunk on. I was a grunt in DevDiv, so take it all with a grain of salt.
> stand ready to sell you the tool
There are a few - they've never been from MSFT
The real reason that UML died is that it was a solution in search of a problem that it could actually solve. It was one that had a lot of appeal for people, so it took longer to die than it should have. But it died because in practice, it was largely useless.
UML is awesome IMHO and I've used it on every CRUD app that I've built. I am saddened about it's lack of widespread use.
Today there are a zillion CRUD generator tools, most of which don't use UML. It's not difficult. Many people who've worked on CRUD apps have probably written some autogeneration thing themselves at some point. Automating some boilerplate code generation doesn't solve any challenging problem in software development.
I know, I used to work on one such MDA tool. It first started with the assumption that you want to generate a J2EE application. By the time the code generation was "good" Spring and Hibernate came along and simplified things to the point that it was easier and faster to "just code."
Turning UML into executable code could be done in one of two ways. Transform one high-level model into an implementation-specific model and generate code from that, or, create a UML VM that could run the models directly.
The latter would have been the correct solution, and still would be more complicated than it's worth.
Use UML for communication. It's still good at that.