OpenGo
    Version 5 Release Notes
                                           September 2001
Copyright (c) 1998-2001 Jeffrey Greenberg
<<This section to be updated...  Other pages on the site describe the changes to this version, but this page consolidates much of it and is more technical.
Most of the following is correct, but we have changed the license, removing restrictions.  OpenGo Public License Version 2.>>

   Version 4 Release Notes

                                           February 5, 2000
Copyright (c) 1998-2000 Jeffrey Greenberg

Brief Introduction

OpenGo is an architecture for plugging in Go engines and testing them.  It might also facilitate developing the engines themselves.  There is a paper describing the architecture and classes at http://www.inventivity.com/OpenGo.

OpenGo is currently implemented only in C++.  It is designed to be portable across operating systems.  It is not tied to any one GUI, but it does not attempt to abstract any GUI either.

OpenGo's classes can also be used in implementing a Go engine.  There is a simple interface for compiling in engines or communicating with them using the Go Modem Protocol.  OpenGo allows your Go Engine to receive recieve a coherent, legal board and a legal move, and the means to respond to that move.

This architecture could be generalized further for multiplayer games of most any sort.

Full source is included in an opensource arrangment (see important restrictions below).

Organization

These are the core files of the data model OpenGo
 
base fundamental types, os abstractions, abstract modem, i/o abstraction.  Some OS/GUI specific implementations.
players player abstraction and a few simple players
remote simplified go modem protocol, could add internet nngs, igs here too
doc documentation. 
db contains code to read and write various go database formats.
These directories contain players that you can uses to play against, or as examples for plugging in your go playing code.
 
wally the wally weak go player.  It has been modified to support playing multiple instances.  This program is often used as a benchmark in the literature
gondo gondo is an improved wally added by don wagner@optimal.com
playrand a random player
These directories contain the GUI / OS specific files.
 
Windows This is Windows MFC based code.  The main Visual C++ 6.0 workspace/project files are here.
console This is a console/keyboard based interface.  It works on Windows 95/NT and under Linux.  It is purely based on stdio/streams and the C-runtime, so it should/could work anywhere.
Unix Files specific to Unix / linux.

Supported Environments

OS
Compiler
Comments
Windows NT 4.x
Visual C++ 5.x The current release is now VC6.
"
Visual C++ 6.x Current release.
Windows95
VC5 & VC6 Executable runs.
Windows2000 Windows98
? ?
Solaris & SunOS
gcc Should work - any volunteers?
AIX
Visual Age
"
Linux
gcc Works.
HPUX
?
"
JAVA It's C++ for now.  Might do a Java port, but it won't be soon.

Features & Possibilities

Feature
Comment
Portable Designed to run on modern operating systems and GUIs
Go DB formats Can load ISHI format.  Can save out in a partial SGF.
Go Modem Protocol Supported
Encapsulation Clean separation of the game playing infrastructure from the game engine / algorithm code.  Put in your own engine.
Standard engines to test with. Wally, random, go modem.  Others can be added in a clean way.
Multiple rules and board sizes Japanese & Chinese. Proper hoshi too.
Windows GUI The Windows implementation has an MDI, splitter-window GUI.
Multiple simultaneous games. Many games can be played at once.  Could be elaborated into a gaming server.
Console GUI Simple, command-line scrolling interface for development and debugging on most platforms.
Simple Scoring For automated testing and evaluation
"Common" Go classes Points, Boards, Strings, Enclosures.  Get liberty counts, Kill captured groups, make legal moves, detect ko...

 Defects & Limitations

The ones I can remember are:
 
Defect Type
Comment
Multiple Languages No effort has been made to support wide or unicode characters for language portablility.  Generally, strings are char *.  As constructed, this can be easily corrected.
Go Modem Protocol The pipe-based GMP works.  It may need enhancements to supports the quirks of each program that uses it...
Unix Support Linux works. Solaris untried.
Scoring The referee can only score a board that has 'stabilized'.  This means playing it to the bitter end, something suitable perhaps only for go programs.  To say that it is unsuitable for humans would be to understate it.  It likely needs work dealing with seki.  (The entire scheme needs to be redone.)
Rules It makes available Ko & SuperKo rules, as well as suicide allow/prevent. 
Wally Wally works fine. But it only supports simple Ko and with suicide allowed.  Otherwise, it will make a move that is rejected by the referee, or it will recieve a move that it thinks is illegal but isn't.
Handicaps It will place handicaps properly using chinese placement. It doesn't support random placing of handicaps (ala japanese rules).
Computer opponents play forever on console version This needs to change to so that a certain number of games are played in a row.  This would facilitate learning programs.
None of these are fundamental to the design.  They require the appropriate work or contribution to fix them.

The code is pretty solid as far as crashing goes.  It might have some difficulty if you are playing random players against each other and just close the applications.  There is a race condition that might cause a crash.

In general, you should check the file "log" which is in the same directory as the running program and which will detail what is going on.  In addition you can turn on debubbing flags that will add more to the log.  Wally has one, and there is one in the referee to watch the messages going by, and there is one in the modem/go-modem protocol.

Support

Main Repository

I will maintain the 'official' code repository at:

Open Go Mailing List

An OpenGo mailing list (reflector) will be at: Where discussions and code about OpenGo fixes, shortcomings, changes, etc. should be made.
 

History

Some of this code dates from 1995.  It has been used for my personal purposes in working on machine learning and genetic programming using Go as the problem.

During this time, I have had access to different machines, operating systems, compilers, and GUIs.  Lately, I've been working in Windows NT and while I also have SunOS and Solaris on my desk, NT is the only active port at this time.  Hopefully, those of you in the community can remedy this now, and reactivate the relevant environments.

There are some other bodies of Go code that have portions of what is in OpenGo.  I chose to implement my own because I wanted certain functions, architectural features, speed, portability in combinations which others didn't seem to have.  Still you should be aware of cgoban, gnugo, pubgo, nngs, jago at least.

Copyrights & License etc.

This code is Copyright (C) 1995-2000 Jeffrey Greenberg. I will integrate in contributions, and contributors will join the copyright. I will serve as the editor for contributions at this time.  The code is licensed under an open source license, the OpenGo Public License version 1 which is enclosed in the release.
 



Jeffrey Greenberg    jeffg@inventivity.com
San Francisco, California