I've been reading the GTP (Go Text Protocol) spec (version 2, draft 1, July 2002). It's a tool that everyone seems to use to communicate with computer-go engines, whether it's GUIs communicating with engines, servers communicating with engines or scripts that play engines against each other (twogtp and friends).
I've been thinking about why it's done so well and is so widely implemented:
- It has a clear objective (communication between a master and a computer-go engine)
- It does what it needs and as little as possible else (unnecessary commands in the reference implementation as namespaced out)
- It is as simple as possible
- It leaves out the issue of haggling over rules (Chinese/Japanese/New Zealand/etc), komi and handicapping.
- It leaves out the issue of arranging who is to play
- There is a widely available, high quality reference implementation (GNU Go) which is useful in itself
- It is clearly better than the protocol it replaced (GMP)
These appear have completely outweighed the fact that the sections seven and nine of the spec are completely empty and the last six commands are completely undocumented. It also doesn't handle boards above 25x25, to be fair, few if any other programs do either, mainly because the standard notation breaks down when the letters A-H and J-Z are all taken (I is not used).
This got me to thinking whether it might not be possible to define a protocol that covered a broader range of problems.