Why SOAP, CORBA, RMI, and all other RPC like creatures are doomed

Why SOAP, CORBA, RMI, and all other RPC like creatures are doomed

(It's ok, they're not useful anyway)

In this lecture I try to collect my thoughts, but they are still sort of random :(

Back when I was playing with my GI Joe (tm) with the kung fu grip, programmers were defining the progenitor of the Internet and the first net services: SMTP, HTTP, NNTP, etc... These have all survived (even if the original programs have not). why!? CORBA and its ilk have not really taken off. why not?!

The Problem

RPC is all about exposing your implementation not a service (no the method impl vs method interface is not what i'm talking about...that's super low level). RPC is way too low level for such loosely coupled boxes.

Methods are wrong level of abstraction since they typically deal with intermediate state not complete operations. You want to publish the big "do it" methods not the "incr an int on this box" methods. Do you really want to make a socket connection to another box to increment an integer? Do you really want GC issues across machines? ick.

Security: simple protocol that is not executing code is much better than runnig a method on somebody's box. IIS lets you run a popup window on the server's root window for gawds sake. Easier to handle a language than ensuring your programmers are careful with method calls.

Solution

Protocols (text-based) and service level abstractions

Make standards of communication for each class of problem like remote printing, getting an airline ticket and so on. Don't let every one make their own constantly changing set of methods (or do screen scraping! yikes), make a protocol and let everyone implement it as they want in whatever language they want.

Methods have all sorts of side effects and are incompletely specified. OTOH, Languages/protocols tend to be completely specified semantically as well as syntactically.

Pipes are best way to think of services. They all talk about binding services together as late as possible and then just glueing stuff together. Can you imagine claiming you can glue programs together via pipes if you had to hook the output method of one to the input method of the other?

a simple vertical protocol is much easier to implement than a method call based system because that requires that you be a compiler engineer also. Any idiot can implement basic NNTP server or client without having to know about language implementation stuff. Prevents proliferation of free and/or open source servers if your protocol is too complicated.

How many have http, nntp, smtp, clients/servers versus IIOP clients/servers? The difference is staggering. The people have spoken!