hyatt wrote:User923005 wrote:lmader wrote:User923005 wrote:
Further:
I would like to add that Rybka 1.0 has never participated in an ICGA event.
I would like to add that Rybka 1.6.1 has never participated in an ICGA event.
Any information used to convict Vas of violations in an ICGA event should come from programs that actually participated in one.
I would like to addresshttp://
www.open-chess.org/posting.php?mode=quote&f=5&p=16322 this. The point of including the _fact_ that Vas copied _literal _ code from Crafty in Rybka 1.6.1 and lied about it was included in the ICGA report to show a pattern of behavior. This is similar to the legal precedent in actual court cases in the US for the prosecution to be allowed, under some circumstances, to use previous crimes and activity to show a pattern of behavior. So even though 1.6.1 didn't compete and is not _directly_ under the purvue of the ICGA, it is still relevant to the case, and reasonable for the ICGA to consider.
I agree that this is :
1. Circumstantial evidence against Vas
2. Evidence of a serious character flaw
However, in the documents I read, it was used as direct evidence that Vas violated the ICGA contest rules and so in the role in which it was purveyed, it was used improperly.
In this case, the story looks like this: Vas releases Rybka 1.6.1 to testers. We now know that it has literal code copied from Crafty and he lied about it. Then he releases a radically new Rybka that looks nothing like Crafty and very much like Fruit. An investigation ensues and it turns out that there are huge areas of creative art in common. Additionally node counts are obfuscated (making it look like he's trying to avoid detection), he claims that he "lost" the source to the 2.x versions (like he doesn't want anyone to inspect it), there are smoking gun weirdnesses (PST tables, 0.0), etc.
It was released to a single beta tester (according to my understanding).
I agree that Robert Hyatt may have a legitimate complaint against Vas in this instance and that the beta tester may have a legitimate complaint against Vas in this instance. However, to use the evidence in the way in which it was used is simply wrong.
Does this constitute perfect proof? No. But given the history of this, are we to reasonably assume that the Rybka rewrite was a clean reimplementation of Fruit algorithms, as opposed to a work that started with and derived directly from Fruit?
This is not evidence for or against that notion. My guess is that Vas was testing out some ideas with crafty as a base and was simply too lazy to perform the testing himself.
No matter how dislike-able Vas may appear in this instance, and no matter how his other behaviors may put a bad taste in the mouth, it does not excuse the misuse of the evidence.
At that point I don't see how a reasonable person in the ICGA would not "get the subpoena" for Vas to explain, and with his lack of cooperation, convict.
I am not a reasonable person, then, because the Rybka 1.6.1 Beta should not have been used against Vas in the way in which it was used.
There are logical reasons why in a real court there are rules of evidence. In this jumble of a mess that was thrown against Vas, rules of evidence were obviously not obeyed by any reasonable definition.
Again, I do NOT acquit Vas and have never claimed he was innocent. However, the process was bad, the evidence was bad, the conclusions were bad and the outcome was bad. The penalties were absurd and the press release was way, way, way over the top.
IMO-YMMV
Can you cite WHERE it was used as direct evidence? From the ICGA final report:
Rybka-Crafty evidence. The wiki documents analysis by Mark Watkins, Zach Wegner
and Robert Hyatt on pre-Rybka 1.6.1 may be found at
http://icga.wikispaces.com/
Rybka-Crafty+evidence.
Summary: Pre-Rybka 1.6.1 contains much identical code to Crafty, even including large
blocks of code with obsolete code inside them, and code that performs tests that make
no sense today (code that was left in Crafty by accident, by Robert Hyatt, also shows
up in Rybka 1.6.1). It is inconceivable that a second author could duplicate this code
purely by chance. At least hundreds of lines of code appear to be copied. These lines
of code appear in Crafty in the functions iterate.c, evaluate.c, next.c, bench.c, option.c
and others. Note that the first three modules are the basic “engine” including search,
move ordering, and evaluation. Rybka also uses Crafty's method of rotated bitboards
for the board representation and, given the above evidence, it seems quite likely that
there would be code “borrowing” in this aspect also. The rotated bitboard appears in all
early versions of Rybka until being replaced in Rybka 4 with freely available code from
Pradu Kannan.
Rybka-Crafty evidence
Edit 10 6…
Home * Pre-Fruit Rybka and Crafty * Rybka-Crafty Evidence
Next >
by Mark Watkins
Code to avoid en passant when using obsolete Edwards tablebases
Crafty 19.0 iterate.c
TB_use_ok=1;
if (TotalWhitePawns && TotalBlackPawns) {
wpawn=FirstOne(WhitePawns);
bpawn=FirstOne(BlackPawns);
if (FileDistance(wpawn,bpawn) == 1) {
if(((Rank(wpawn)==RANK2) && (Rank(bpawn)>RANK3)) ||
((Rank(bpawn)==RANK7) && (Rank(wpawn)<RANK6)) ||
EnPassant(1)) TB_use_ok=0;
}
}
Note that the above code is quite particular to KP vs KP (it will fail for KPP vs KP due to FirstOne usage) and avoiding en passant troubles.
Here is disassembly from a pre-Beta Rybka by Mark Watkins, as a file, or here directly
0x0044cad2: mov 0x6b8d54,%eax # global pointer
0x0044cad7: mov 0xb10(%eax),%cl # load TotalWhitePawns
0x0044cadd: add $0x4,%esp
0x0044cae2* movl $0x1,-0x1c(%ebp) # set TB_use_OK to 1
0x0044cae0: test %cl,%cl # if TotalWhitePawns
0x0044cae9: je 0x44cbab
0x0044caef: mov 0xb11(%eax),%cl # && TotalBlackPawns
0x0044caf5: test %cl,%cl
0x0044caf7: je 0x44cbab
0x0044cafd: mov 0xa78(%eax),%edx # load WhitePawns (32 bits)
0x0044cb03: mov 0xa7c(%eax),%eax # load WhitePawns (other 32)
0x0044cb09: mov %edx,-0x8(%ebp)
0x0044cb0c: mov %eax,-0x4(%ebp)
0x0044cb0f: bsf -0x8(%ebp),%edx # FirstOne for WhitePawns
0x0044cb13: mov $0x0,%eax
0x0044cb18: jne 0x44cb2a
0x0044cb1a: bsf -0x4(%ebp),%edx
0x0044cb1e: mov $0x20,%eax
0x0044cb23: jne 0x44cb2a
0x0044cb25: mov $0x20,%edx
0x0044cb2a: add %edx,%eax
0x0044cb2c: mov %eax,%ebx # store FirstOne in ebx (wpawn)
0x0044cb2e: mov 0x6b8d54,%eax # reload global pointer
0x0044cb33: mov 0xa80(%eax),%ecx # load Black Pawns (32 bits)
0x0044cb39: mov 0xa84(%eax),%edx # load Black Pawns (other 32)
0x0044cb3f: mov %ecx,-0x8(%ebp)
0x0044cb42: mov %edx,-0x4(%ebp)
0x0044cb45: bsf -0x8(%ebp),%edx # FirstOne for BlackPawns
0x0044cb49: mov $0x0,%eax
0x0044cb4e: jne 0x44cb60
0x0044cb50: bsf -0x4(%ebp),%edx
0x0044cb54: mov $0x20,%eax
0x0044cb59: jne 0x44cb60
0x0044cb5b: mov $0x20,%edx
0x0044cb60: add %edx,%eax
0x0044cb62: mov %eax,%ecx # store FirstOne in ecx (bpawn)
0x0044cb64: mov %ecx,%edx
0x0044cb66: and $0x7,%edx # file of bpawn
0x0044cb69: mov %ebx,%eax
0x0044cb6b: and $0x7,%eax # file of wpawn
0x0044cb6e: sub %edx,%eax # compute distance
0x0044cb70: cltd
0x0044cb71: xor %edx,%eax
0x0044cb73: sub %edx,%eax # absolute value of distance
0x0044cb75: cmp $0x1,%eax # if FileDistance is 1
0x0044cb78: mov 0x6b8d54,%eax [rereload global pointer]
0x0044cb7d: jne 0x44cbab
0x0044cb7f: sar $0x3,%ebx # get Rank of wpawn
0x0044cb82: cmp $0x1,%ebx # if rank is RANK2
0x0044cb85: jne 0x44cb91
0x0044cb87: mov %ecx,%edx # copy bpawn to edx
0x0044cb89: and $0xfffffff8,%edx # get the rank of it
0x0044cb8c: cmp $0x10,%edx # if the rank exceeds RANK3
0x0044cb8f: jg 0x44cba8 # set TB_use_ok = 0 (@0x44cba8)
0x0044cb91: and $0xfffffff8,%ecx # get Rank of bpawn
0x0044cb94: cmp $0x30,%ecx # if rank is RANK7
0x0044cb97: jne 0x44cb9e
0x0044cb99: cmp $0x5,%ebx # and Rank(wpawn) is < RANK6
0x0044cb9c: jl 0x44cba8 # set TB_use_ok = 0 (@0x44cba8)
0x0044cb9e: mov 0x10b(%eax),%cl # load EnPassant(1) [1 is the ply]
0x0044cba4: test %cl,%cl # if there is no ep target
0x0044cba6: je 0x44cbab # skip the next instruction
0x0044cba8: mov %esi,-0x1c(%ebp) # [sets TB_use_ok = 0]
0x0044cbab: mov 0x6b0951,%cl
Mark Uniacke:
“It is clear to me that significant parts of Rybka's code were derived and copied
firstly from Crafty in early Rybka versions and later from Fruit in later versions
of Rybka. These actions altered the natural and fair course of computer chess
tournaments and deprived authors of original programs of the success they had
deserved.
I think the copying of first Crafty and later Fruit, both of which were among
the strongest open source programs at the time, shows a clear pattern of
behaviour and furthermore disrespect for the authors of those programs, the
computer chess community and all the authors of original programs who entered
tournaments along with Rybka.
Given this pattern of behaviour I believe later Rybka versions are also strongly
implicated and will very probably also have derived or copied code from other
programs within them. It is unlikely anyone will have the time to check every
single Rybka version for fragments of code from the multitude of open source
programs available today but I think the pattern of evidence strongly suggests all
Rybka versions should be considered tainted.
None of the ICGA Tournament entry forms submitted by Vasik Rajlich indicated that
much of Rybka’s code was based on Fruit 2.1 (and earlier versions on Crafty). This is
in violation of the ICGA Tournament Rules. Suitable punishment is:
● to strip Rajlich of all ICGA Tournament Titles and,
● force the return of trophies and prize funds to the ICGA and,
● ban his programs from future competitions until he can satisfy the ICGA that they
are no longer derivatives and that he has satisfied the conditions of any other
penalties the ICGA imposes.
● encourage other tournaments (Leiden, Paderborn, CCT, TACCL, etc.) to disallow
the entry of Rybka until it is proven “clean”.
There is also an ongoing investigation regarding pre-Beta Rybkas. There appears to be no direct Fruit link here, but the evidence is still relevant as it shows a pattern of improper code re-use by the Rybka author.
So this was not claimed to be "direct evidence" but simply shows prior copying by the author, which refuted his claim that the pre-fruit Rybka versions were 100% original...
BTW, these versions of Rybka were entered in multiple events, not just on a single rating list. One played in a CCT event that used ICGA rule 2...
In that case, those CCT events may have been harmed in some way if in fact those versions were infringing. However, the ICGA findings should be related to versions that participated in ICGA events.
CCT findings should be related to versions that participate in CCT events. I do not think that the ICGA should punish Vas for something he did in a CCT event or in someone's basement contest.