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
- Ease of extending the code
- Accessibility to a wider audience
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.