I've been thinking of a backgammon protocol the whole day now. Here are some of my viewpoints.
As Guido says, both UCI and xboard are terrible, and I think they have some weaknesses, yes. It is really hard to define a perfect protocol and it cannot be perfect on the first attempt anyway. I think it is important that we find the right balance. We don't want too much done in the GUI and we don't want too much at the engine side either. I think the state of a match can be handled by the GUI. The engine should hence be "stateless" and able to answer to the following commands:
evaluate
find_best_cube_action
find_best_move
rollout_move
rollout_cube
In addition there should be some options exchanging keywords and some handshaking and initialisation instructions. The options description can be defined better later, but make sure that engine takes care of how to find moves and evaluate at different settings. I strongly believe that such things should be handled by the engine and not the GUI.
I actually disagree with Guido when it comes to raw sockets. I think raw sockets are good. With raw sockets a engine programmer can just write directly to stdout and never even think of XML, JSON, Protobuf, or what ever next will be the retired data exchange format. It works fine over ssh and it is easy for an engine developer to debug.
-Øystein