About Moyoman

About Moyoman


The purpose of the Moyoman project is to build a 19x19 Go playing program using open standards, and use an open source and open design philosophy. It is also intended that strong Go players who are novice computer users can participate in the development of the program.

The main focus of the Moyoman project is the move generating software. It is open source, which means that anyone can download the source and submit changes. It is open design, which means that anyone can design their own module and submit it. This is discussed in more detail elsewhere, but basically, for a given module such as life and death, anyone that extends the Module class and implements the LifeAndDeath interface can submit that module as part of the system. If there are multiple implementations of the same module, then the best one(s) are part of the official release. Anyone can submit a new type of module, but the interface for that module has to be approved by the developers of the project. This would include peer review by the entire Moyoman community.

A client has also been written. It is necessary to have a special purpose client in order to display the debugging information which the Moyoman server generates. No assumptions have been made about the front end, so that the move generation engine can work with a Java Swing application, servlets, or through standard protocols such as the Go Text Protocol (GTP), or Go Modem Protocol (GMP).

Why not GNU Go?

It is reasonable to ask at this point why a new open source Go playing program is needed, when the GNU Go program is available, and plays competitively with other Go playing programs. There are a number of reasons for this.

Ease of understanding the code

The GNU Go program has over 40,000 executable lines of C code. It is a high quality program, but C is not as flexible a language as object oriented languages such as C++ or Java. It is worthwhile having a program designed using objects from scratch. Since each Java package would correspond to a type of analysis, such as life and death, it is much easier for the outside developer to find and understand the relevant code, and how the different types of analysis fit together.

Ease of extending the code

It would be difficult for an outsider to incorporate significant new functionality into the GNU Go program, let alone multiple outsiders developing new functionality simultaneously, since it was not designed with that type of flexibility in mind. In the Moyoman program, to write an entirely new version of an existing module such as Life and Death requires only extending the Module class and implementing the LifeAndDeath interface. It can use the public interfaces to classes such as Board and Group to get the information that it needs as a starting point for doing its work. If a Life and Death interface has not yet been defined, then the project members would define the interface, and then the work is the same as above. For developers who are not interested in digging into the bowels of the code, this makes their task much simpler. Additionally, adding a new Life and Death module does not break any existing code. All implementations of the Life and Death module would be included in the distribution, with a configuration file which determines which one is actually executed for any particular release. Of course, people can examine existing code, and submit bug fixes or enhancements without having to write a complete module. It is intended that Moyoman will be a framework within which a great deal of experimentation can occur. Thus, computer science students could write a module as a one semester course project without having to waste any time on features that Moyoman already provides. It is also the case that once a number of low-level modules have been implemented, higher-level modules can put them together to perform more sophisticated types of analysis.

Accessibility to a wider audience

It is the case that many strong software developers are not top Go players, and most top Go players are not software developers at all. It would be nice to provide a way for the non-technical players to contribute to this project. After the program has reached a certain level of maturity, most problems will not be bugs per se, but rather the modules producing suboptimal results and the developers are not sure which part of the results are incorrect. If you are a 1 dan player, you may not see which subset of the output of your module is preventing it from playing like a 4 dan player. A 4 dan player would have the ability to contribute in evaluating positions. A graphical means of debugging is provided, so for example for a shape module, the debugging output would rate possible moves with good and bad shape. The strong player could then examine this output, and submit bug reports which would indicate which of the good or bad shape moves reported was incorrect.


The Apache Software License, version 2.0 will be used for the Moyoman project. The reason for this is to allow the results of this project to be used by the widest possible group of people. If companies feel that they can make money off of this project, they are welcome to do so, since this will result in the wider use of this program, and the spreading of Go playing among a wider group of people. That is the whole point of this project.