setjmp() - another one

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

User avatar
tiger
Posts: 819
Joined: Sat Mar 11, 2006 3:15 am
Location: Guadeloupe (french caribbean island)

Re: setjmp() - another one

Post by tiger »

chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?



// Christophe
chrisw

Re: setjmp() - another one

Post by chrisw »

tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.
User avatar
tiger
Posts: 819
Joined: Sat Mar 11, 2006 3:15 am
Location: Guadeloupe (french caribbean island)

Re: setjmp() - another one

Post by tiger »

chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.



// Christophe
chrisw

Re: setjmp() - another one

Post by chrisw »

tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.

// Christophe
Arrogant.

How about: "I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".

Shouldn't be too difficult given its allegedly only UCI GPL infringements you're interested in.
Terry McCracken
Posts: 16465
Joined: Wed Aug 01, 2007 4:16 am
Location: Canada

Re: setjmp() - another one

Post by Terry McCracken »

chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.

// Christophe
Arrogant.

How about: "I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".

Shouldn't be too difficult given its allegedly only UCI GPL infringements you're interested in.
Pot..Kettle
Tony

Re: setjmp() - another one

Post by Tony »

chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.

// Christophe
Arrogant.

How about: "I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".

Shouldn't be too difficult given its allegedly only UCI GPL infringements you're interested in.
How about:

"I Chris W,

declare Rybka is Vas his own work,

because if there is a part that isn't, then I declare that part not important enough to change my opinion."

Tony
chrisw

Re: setjmp() - another one

Post by chrisw »

Tony wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.

// Christophe
Arrogant.

How about: "I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".

Shouldn't be too difficult given its allegedly only UCI GPL infringements you're interested in.
How about:

"I Chris W,

declare Rybka is Vas his own work,

because if there is a part that isn't, then I declare that part not important enough to change my opinion."

Tony
I've seen absolutely no evidence that the Rybka engine AI isn't entirely Vas own work, hence I believe it is entirely Vas own work.

I've not seen any convincing evidence that the UCI isn't his own work either. The evidence, such as it is, has been considered by three programmers here, all of whom have publicly stated that the shown code can be explained as use of ideas and not code copying.
The material relating to the alleged unique nature of setjmp() is discredited because several other programs use it as well.
The material relating to memset has been withdrawn as incorrect.

All that appears to be problematical so far is the go parser code in the UCI. Hence I see no problem or 'risk' in making the statement that the engine AI is above suspicion.
User avatar
tiger
Posts: 819
Joined: Sat Mar 11, 2006 3:15 am
Location: Guadeloupe (french caribbean island)

Re: setjmp() - another one

Post by tiger »

chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.

// Christophe
Arrogant.

How about: "I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".

Shouldn't be too difficult given its allegedly only UCI GPL infringements you're interested in.


You are going to dismiss every evidence shown with the following line of thinking:
- if I can find another program with a setjmp, setjmp in Rybka proves nothing.
- if I can find another program with a strtok, strtok in Rybka proves nothing.
- if I can find another program with a variable affectation, a variable affectation in Rybka proves nothing.
- if I can find another program with a variable incremented, a variable incremented in Rybka proves nothing.
- if I can find another program with a function call, a function call in Rybka proves nothing.
....
That's how you will dismiss all the code that will be presented to you, line by line.

Another line of thinking will be: as any line of code is an implementation of an idea, and implementing an idea cannot violate the GPL, then it follows that no line of code can violate the GPL (Uri's favorite).

Another one: one line of code alone cannot breach the GPL. Let's look at this 4000 lines program. Line 1: cannot breach the GPL. OK check this one. Line 2: cannot breach the GPL. OK fine. Line 3: cannot breach... And so on.

Finally you will get your 1000000 monkeys off your hat.

You are (were) a programmer and deliberately play the smart idiot here. This is what I would call arrogant, because it would be better to tell me directly that you are not interested in looking at the evidence and that all you want is that people stop posting it and go directly to the FSF.



// Christophe
chrisw

Re: setjmp() - another one

Post by chrisw »

tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:
tiger wrote:
chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.

Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.

I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.

However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.

There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().

I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.

Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.


It can if it is used in the context of a routine that has not only setjmp but also a number of other identical/equivalent code.

Here we have an example of source code comparison (thanks to Norman) in which you could say that the use of strtok is not unique to Fruit 2.1 or Rybka 1.0. However the way they are used shows troubling similarities:

http://pagesperso-orange.fr/ct_chess/Fr ... rt_go.html

// Christophe
You're probably not going to like this Christophe, but I take no interest at all in the UCI parsing side of the programs.

a) I don't understand that stuff, always having used support programmers to do that kind of work. strtok() - what does that do? I have no idea, it's not engine code.

b) for me, Rybka is only going to be a Fruit derivative if there is engine code correspondence. What they each do and how they do it with parameters passed from the interface is of no concern at all.

Anyway, I asked Zach if he'll produce your best case of engine code correspondence for both sides to consider ......


setjmp() to break search .....
Fruit, Rybka, an old OS chess program, early Movei, TSCP, hardly a scientific but unlikely to be an exhaustive list.


I'm sorry to hear that you can't understand parts of the C code that has been shown. It's going to be hard for you to follow what will come next, but maybe you can take advice from someone who has some expertise.

I'm interested in GPL infringement and I can already see some in the code that has been posted.

Remember: the GPL does not say that it's fair game to copy some parts and not others. The GPL says that you are not welcome to use any part of this code for a non-GPL program.

// Christophe
I'm interested in the comment "Rybka is a derivative of Fruit", which, to me at least, implies that Vas didn't program substantial chunks of engine.

I'm interested in comments like "should be banned for life from icga tournaments"

The UCI side is quite irrevelent to that. A GPL 'infringement' of the UCI is of no interest at all to the icga tournament coming up and quite probably of no great interest to the mass of comp chess people, who want to know one thing and one thing only. Is the engine a copy containing chunks of other people's work? Are there examples of cut 'n paste in the engine code?

All this talk of UCI GPL infringement is just prissy prissy stuff. If there is any, in reality, it could just be whizzed out by support engineers tomorrow, if it hasn't already been, if it ever existed. Get real and find some engine correspondence if there is any.


OK. So the code comparison that has been posted has been brushed aside by ChrisW.

Congratulations for this brilliant refutation.

Next please?

// Christophe
Well, I read gerd saying setjmp() by itself proves nothing and the code descriptions shown can also be explained by implemention of ideas rather than code copying.

Uri has also stated it can be explained by implementation of ideas.

Why don't you show some real engine code correspondences? Let's see your best case .... if you have one.


1000000 monkeys here also.

// Christophe
Arrogant.

How about: "I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".

Shouldn't be too difficult given its allegedly only UCI GPL infringements you're interested in.


You are going to dismiss every evidence shown with the following line of thinking:
- if I can find another program with a setjmp, setjmp in Rybka proves nothing.
- if I can find another program with a strtok, strtok in Rybka proves nothing.
- if I can find another program with a variable affectation, a variable affectation in Rybka proves nothing.
- if I can find another program with a variable incremented, a variable incremented in Rybka proves nothing.
....
That's how all the lines of code that will be presented will, in your opinion, mean nothing.

Another line of thinking will be: as any line of code is an implementation of an idea, and implementing an idea cannot violate the GPL, then it follows that no line of code can violate the GPL (Uri's favorite).

Another one: one line of code alone cannot breach the GPL. Let's look at this 4000 lines program. Line 1: cannot breach the GPL. OK check this one. Line 2: cannot breach the GPL. OK fine. Line 3: cannot breach... And so on.

Finally you will get your 1000000 monkeys off your hat.

You are (were) a programmer an deliberately play the smart idiot here. This is what I would call arrogant, because it would be better to tell me directly that you are not interested in looking at the evidence and that all you want is that people stop posting it and go directly to the FSF.



// Christophe
a non-exhaustive and casual search found three other progams with a setjmp() when Bob claimed unique status fcor two. Now there are five. Should I remain silent?

your other three examples haven't even been mentioned. You need to do better than invent criticisms that haven't been made. Why don't you stick to actual fact and what has actually been said? Readers will draw their own conclusions.

If you need to tell me what I'm going to do to before I've done it, if at all, readers will draw their own conclusions. Why don't you stick to actual fact and what has actually been said?

If you're unable to distinguish between an implementation of an idea and a cut 'n paste copy, readers will question how valid any of your critique will be and is.

If you need to call people monkeys or smart idiots then again readers will draw their own conclusions as to the actual power of your other arguments.

If you tell me I am not interested in looking at the evidence, you're wrong. Show me some engine code similarities, I keep asking for them .....

Meanwhile, and in the absence of engine AI similarities, and given the amount of damage your writings must have done by now, why is it "risky" to state ....

"I, Christophe Theron, absolutely reject any implication that the engine AI of Rybka is anything other than Vas own work".
Uri Blass
Posts: 10420
Joined: Thu Mar 09, 2006 12:37 am
Location: Tel-Aviv Israel

Re: setjmp() - another one

Post by Uri Blass »

<snipped>
Another line of thinking will be: as any line of code is an implementation of an idea, and implementing an idea cannot violate the GPL, then it follows that no line of code can violate the GPL (Uri's favorite).

// Christophe
Note that I do not claim that it is impossible to break the GPL
I simply disagree with you about the meaning of breaking the GPL and I think that you include too many cases.

Toga is clearly a derivative of Fruit and somebody who release toga as his own clearly break the gpl.

I can add that I think that your opinion clearly discourage people
to develop strong commercial programs even if they never planned to break the gpl.

Uri