@natecull @jauntywunderkind420 @enkiv2 @byron CORBA failed for several reasons. I can think of a few:
First and foremost, they never defined a wire protocol initially. It took a while before IIOP was standardised.
Secondly, designing a security model took even longer. In fact, I don't think they got a security model until CORBA was already practically dead.
Then there is the complexity of the solution. Just setting up a small test program that calls a method on a remote object was a nightmare, even when using the same implementation on both sides. There were just too many steps involved and it was never clear what part of of the process was specific to your implementation and what was part of CORBA.
It also enforced a strict mapping of names between the CORBA concepts and the symbol names in the implementations. That meant that while all the methods were the same, they didn't follow the conventions of the host language.
Finally, I think that the CORBA naming service was really messy, and wasn't compatible with any other naming service (like DNS).
In comparison, we have basic REST-based services where the wire protocol was very simple, the security model was already there (just do whatever you were already doing on the web), making a REST call was as simple as a plain HTTP request, implementations could be made to integrate smoothly with the existing framworks and the naming service was just plain DNS.
Of course, there were things people wanted to do with CORBA, such as transactions, but the benefits simply wasn't enough to warrant the complexity.