Don wrote:hgm wrote:"Best" is an ill-defined concept. There are people that would consider a protocol "best" because it adhers to some elegant mathematical concept, like being stateless, even if it would be absolutely inadequate to do anything useful at all. (Such people tend to prefer UCI.

) I belong to the more pragmatic group, that puts capabilities before efficiency, and efficiency before beauty.
I think stateless is more than just beauty. Suppose I wanted to build a user interface that didn't JUST play a game from start to finish? Maybe it is designed to allow a single executable to play a simultaneous exhibition? (Not that we would ever do that, but anything is possible.) Sure it's possible with either protocol, but with UCI the abstraction for that is more natural.
The reason stateless is more elegant is that it doesn't assume anything about what it is being used for. Winboard assumes you are playing a game from start to finish and requires both the engine and the interface to track the same state and stay synchronized.
But truth be told - I actually think this is rather a dumb thing to argue about because they are both more than sufficient and both do a good job. You can easily simulate statelessness using the winboard protocol by just making a bunch of move. I assume there is a command for making many moves simultaneously.
I will say that in the real world UCI is much easier to implement and it was specifically designed to let the chess author focus on playing chess. That can be a good thing or a bad thing according to your point of view.
WinBoard gives the program author a bit more control over things but at a price, and those things are not things that really make a big difference. For instance I couldn't care less if Komodo doesn't know how to resign, I think that should be a setting in the user interface which can be customized for each program.
Almost every argument in favor of one over the other is pretty hollow as you can simulate just about any behavior in either (such as simulating stateless behavior in winboard.) One argument against UCI is that it's easiness for implementing pondering also takes flexibility away from the program author. This is nonsense too because you can still ignore the mechanism and implement your own way if you enjoy the extra complexity. However I don't know of any program that implements ponder in a non-standard way. You give the program the ponder move and you start searching it. Standard for all programs (as far as I know.)
I just looked at the IPON list and the top 7 programs all use the UCI protocol and the ones below it I don't know for sure, but I think 8 or 9 of the top 10 do. There may be one or two of those programs that also use xboard in addition to UCI, I think Spike is one of these if I remember correctly.
But the point is that UCI could not be as inferior as you say that the very best programmers are too stupid to know better.
Based on those creteria WinBoard proctocol is objectively highly superior to UCI, a matter that can be decided by a poll in the same sense a poll can decide whether 1+1 equals 2 or 3: basically it is just a circumspect way to ask: "how many of you are idiots?".
Some of the things that UCI fails to do:
I have a comment or two on your list
*) provide unambiguos specifications for itself.
*) allow engines to offer or accept draws.
who cares?
*) make the engine aware of the upcoming session of the TC (e.g. how long should it best think on "movestogo 1 wtime 300000 btime 300000")?
This is not a big deal but I admit that it might be useful. I doubt that many people really care or that it will add more than 1 or 2 ELO to the playing strength but it is information that UCI does not provide.
*) let the GUI know if a string option is a file, a path, or just text.
That is an annoyance and of all things you mentioned that is only one that I personally even care about.
*) allow advanced time-controls in node-based play.
winoard has a few more features that nobody cares about but that is not what defines the quality of a protocol. I you added 1000 features that UCI does not have would that make everyone want to spend the next 10 years working on the protocol instead of actually improving the engine?
WinBoard protocol in general is more versatile at handling engine-defined options.
You forget xml support. Add that to winboard and you will have a winner. All data passed back and forth should be in XML so that it is buzzword compliant.