Here are some suggested expansions to discuss:2. Each program must be the original work of the entering developers. Programming teams whose code is derived from or including game-playing code written by others must name all other authors, or the source of such code, in their submission details. Programs which are discovered to be close derivatives of others (e.g., by playing nearly all moves the same), may be declared invalid by the Tournament Director after seeking expert advice. For this purpose a listing of all game-related code running on the system must be available on demand to the Tournament Director.
2a. One can not copy and translate an existing program and call the result original. Examples include copying a mailbox program and converting it to bit boards, but keeping the same search strategy, same evaluation components, etc, with the only difference being the basic board representation; copying a program written in language X and converting it to language Y, keeping the basic search, evaluation and such unchanged except for the new language; taking an existing program in one window and rewriting on the fly in another window, but keeping the same overall features and organization as the original. There are issues to discuss here. For example, what if you copy and translate, but then over time modify the code so that it is significantly different. How different must it be, and MOST IMPORTANTLY, how can the rule be written so that it can actually be objectively enforced?
2b. One can not copy a significant part of one program and use that in another, except for exceptions enumerated below.
2c. Parts of a program that may NOT be copied include the search, move generation, move ordering, evaluation, hashing, book move selection code, any learning code, pondering code, etc. The intent here is to exclude any code, expressed as y=f(x) where f() is the function being copied, and for any value x, it is possible to write f() such that it produces different values given the same input. Things like SEE do NOT fit in here because there are lots of options within SEE. Deal with pins or not? Exclude illegal moves or not? Detect pieces attacking behind an attacking piece. Etc.
2d. Given the same y=f(x) notation, Ii y is derived from x, where there is only one possible y for a give value of x, then copying is acceptable. Examples of this include egtb probe code. For a given position, you get a given score that will not change unless the position changes; the most significant bit of a value is constant for a specific input; A random number generator also fits here since for a starting seed, the string of PRNs will be constant;
2e. Exceptions. Certain pieces of code have been developed independently and have universally become accepted and do not fall under the copying/originality rule. These include (a) endgame database probe code where the original author has either made the code public domain, or has given a participant explicit permission to use that code and data. (b) magic move generation code, but ONLY the part that actually produces a set of squares that are attacked. Anything beyond that is considered part of a program's move generator and copying that does violate this rule; (c) S. Edwards' EPD kit for those wanting to include EPD support in their program (this does not actually play chess anyway, but is included here for completeness). (d) miscellaneous bits and pieces of code, often written in inline assembly language, to handle things like spin locks, bit counts, find LSB/MSB set, and such Note that ALL of these fall under 2d above since they all have a specific output for any specific input.
I would hardly call that all-inclusive yet, but it gives a starting point. I do NOT think a "public domain source" can be copied and modified and then used. Supposedly Ippolit was made "public domain" and I do NOT believe we want 10 copies of that in a chess tournament.
Comments and suggestions welcome. Please keep the complaining, Rybka stuff, and such elsewhere. It would be nice to put something together and pass it on to the ICGA for consideration...