Since there are some applications out there which still use GTP
version 1, it may be useful with a short guide on how to convert to
version 2.
On the controller side the following changes are needed:
1. (Optional) Use "protocol_version" to check which version the engine
is talking. I don't consider it important to continue supporting
GTP version 1 but if you already have the code it should be easy to
support both. It may be useful to issue a warning if the engine
says it talks version 3 or higher.
2. "boardsize" is no longer required to clear the board. Use
"clear_board" for this. You need to do this also before starting
the first game.
3. Replace the "black" and "white" commands with "play" commands. In
practice this means prepending "play " to what you previously sent.
4. Replace "genmove_black" and "genmove_white" with "genmove black"
and "genmove white".
5. Be prepared that "genmove" can also return "resign" if the engine
wishes to resign.
6. (Optional) If applicable, use the "time_settings" and "time_left"
commands to send timing information to the engine.
7. (Optional) Use the "list_commands" or "known_command" commands to
find out which non-required commands the engine has implemented to
avoid sending commands it doesn't understand anyway.
For testing I recommend to use Brown (linked from the GTP web page),
which is intentionally implemented to do many of the unusual things
that the specification allows, e.g. starting with a non-empty board.
On the engine side the following changes are needed:
1. Implement "clear_board" to clear the board.
2. Implement "play" to do the work previously done by "black" and
"white".
3. Implement "genmove" to do the work previously done by
"genmove_black" and "genmove_white".
4. If any of the remaining required commands "protocol_version",
"name", "version", "known_command", "list_commands", "quit",
"boardsize", and "komi" are missing, implement those.
5. (Optional) Implement any other GTP v2 commands you want to
support. While this is not required for GTP v2 compliance it
increases the number of controller applications you can use.
I think this should cover everything. Of course it is a good idea to
read through the specification (well, the draft) and check that your
code follows it.
/Gunnar