Joost Buijs wrote:It is very difficult to distinguish between what is a clone, a derivative or not.
Most search techniques have been known for many years now, with the latest addition probably being LMR. I think using these techniques is fine, but plain copying of code, or parameters is not.
I think there are various degrees of cloning/copying/reusing.
1) renaming a binary program to your own and selling it/playing with it in a tournament (plain fraud/theft)
2) recompiling a program's source code with your own optimized compiler settings (this is what Jim Ablett provides as a valuable service to chess program authors, basically like an automobile tune-up)
3) copying a substantial portion of a strong open source program (data structures, search, eval, egdb drivers, opening book) and fitting it into your own program. Some authors (Ed, Ronald/Jeroen in chess) even provide such portions (egdb, opening book) as freely usable plugins.
4) reading source code / journal articles about new ideas / techniques and implementing these from scratch
I think that in practice there is little difference between 3/4, or at the very least that they form a very broad and grey spectrum. Sure, 4 is more noble, and you'll certainly learn more, but is 3 really that bad? For some techniques there is very little discretion for an individual programmer (OK, some people will even find a dozen ways to locate 1-bits in a bitboard), for others it greatly matters. In all cases, you need lots of finetuning.
Also, where to draw the line? I am a big fan of using (C++) libraries such as the Standard Library and Boost. Some data structures and algorithms from these libraries are very sophisticated and can for some parts of a chess program give substantial performance benefit, simplify your program, or both. Why write your own sorting routine instead of std::sort from the C++ STL? Why implement your own hash table instead of std::unordered_map, or an optimized one from Boost?
My own (still pre-alpha) DCTL library (tomorrow 4 years ago!, see
viewtopic.php?t=3910) aims to provide general usable data structures and algorithms for draughts engines. It's open source because a) I don't care if someone copies my stuff and b) if they do, I hope they find it useful.
For instance the SMP routine in my chess program resembles YBWC because that is one of the easiest ways to do this, but the whole implementation and coding is done by me without looking at other programs how to do this.
This took me 2 to 3 months (mainly working during weekends) before I found out how to do it and to have all the nasty race-conditions and bugs resolved, and in the end it gave me a lot of satisfaction because I developed everything myself.
That's very impressive!
I don't think that using the YBW concept is cloning, but more or less using the implementation from another program is.
The same holds for many other techniques, using a technique or an idea is fine, but copying code or using the same implementation or parameters is not. At least this is my feeling about it.
At the moment you will find many chess programs using exact the same LMR reduction-tables as stockfish does, and there are several using the same evaluation function and parameters, this is a very unhealthy trend.
A few years ago, I studied the Stockfish code very thoroughly. It's basically the cleanest open source program, so very readable. Still, even if I could, copying the raw weights (eval, LMR) to any other program is not going to give the same performance. It all depends on the relative speeds of eval/search, the complex interactions between different reductions etc. Maybe as a starting point they work OK, but it's never going to be a global maximum for any program optimization.
Anyway, the draughts community is so small, that the "shame" factor is enough to keep fraudsters out. Plus there is no money involved.