I was just reading over an article that gives a very high level overview of GXA, which, like so many others, makes the fundamental mistake of talking about HTTP as a “transport protocol”. Of course, one only need look at the HTTP spec to see that it’s not, it’s a transfer protocol, which is a very different beast; a coordination language dealing in state.

But after writing about coordination languages last night, something occurred to me; that the more general a transfer protocol, the easier it is to mistake it for a transport protocol. HTTP, effectively, has only two methods; GET and POST, and they are commonly confused with the semantics of send() and recv(). Other transfer protocols, like SMTP, or IM protocols, are also often confused with transport protocols, for the same reason.

Coordination languages come in very general and very specific flavours. WS-Transaction is very specific, for example, as it deals only in “transactions”; any task which can be modelled as a transaction, can be accomplished with WS-Transaction.

An example of a very general coordination language, would be tuple space based systems such as Linda or Javaspaces. These are general because they both deal in an abstraction known as a “space”. A space is a more general abstraction than a “transaction”, because more things can be modelled as spaces. But not every thing. For example, modelling a lightbulb as a space leaves one no way, without additional agreement, to check if the bulb is on or off.

Of all the coordination languages that exist though, I suggest that there is one that is the most general, and it is REST’s “uniform interface”; it deals in “resources”, which includes every thing.