I designed OpenGo to support Go engines in general. The idea is to share the following things (at least): + user interfaces, + program-to-program communication (go modem protocol, igs, etc), + common algorithms (e.g. zobrist hashing) + multiple-simultaneous games (multi-threading of engines & interfaces) + repeated play and evaluation of engines + machine learning support + reading & writing common go file formats (ishi, sgf, etc.) + common rule systems + common go opponents for testing (e.g. wally)