bob wrote:Tord Romstad wrote:You are mixing two entirely unrelated things here. How tasks are divided between the UI and the engine part of a chess program is a purely technical design decision by the author, and is completely irrelevant with regard to computer chess events. To what extent a program should be allowed to use code written by other people than the author(s) to select its moves is an entirely different question.
Tord
I'm not mixing things at all. This has been discussed ad nauseum in the past, with no real resolution. If a GUI is going to participate in the game itself, rather than just being a "User Interface" (the UI part) then only one such instance should be allowed in a tournament. Time allocation is a tricky and interesting part of the game. Programmers should not be able to use an existing piece of code to handle that. Ditto for opening book move selection which is another very tricky and complex issue.
GUI does _not_ imply all of those things. A user interface is simply an interface that sits between a user and some application, in this case a chess engine. The interface "connects" the two, no more, no less. Xboard/Winboard is a classic example. It does nothing but relay moves between the user and the engine, and display the board... That is a traditional GUI.
Right. There have been two issues brought up in this thread, which do not really seem related:
(1)
Credit for original work vs. clone engines. If you take code, opening books, etc. written by others for other chess engines and use it in your own engine, you end up with a bunch of engines that play the same (as Bob says, he doesn't want to play against 10 opponents that are all clones of each other). Also, there is the issue of how much credit the author deserves for creating his engine and for the quality of its play. If the style, strength, etc. of its play are largely influenced by code, opening books, etc. that were taken straight from other engines, in my view that diminishes the amount of credit deserved by the author, and might be reason enough to exclude that engine from competitions like tournaments (I'm no judge of that though). On the other hand, if you write it all yourself then I think you deserve all of the credit for producing a quality engine (even if you got a big head start by using the ideas that have been well-developed and demonstrated by others; share and share alike).
(2)
How to divide labor between engine and GUI. I think this is simple... Functionality for playing chess should be in the engine, and only User Interface things should be in the GUI. They should talk using a protocol such as the Winboard protocol, that is understood by other engines and other GUIs. Then we can mix and match them and do interesting things. I think there is no defensible reason, technical or political, for putting chess-playing functionality into the GUI part instead of the engine part. There's one clear right way of doing this, and a bunch of wrong ways. I believe strongly that Tord's way (the Shredder way) is the wrong way. I think it is less flexible for users and destroys the benefits of having the GUI and the engine be separate, modular components. I don't believe there are any benefits of doing that, which can not be had in better, cleaner ways.
To be clearer about (2): If there is something you would like the user to be able to do through the GUI, for example, fiddle with engine configuration settings, or request that it move immediately or that it analyse a position or play a position from the opening book, or behave according to a certain time control---those are all things that the
engine should do, after the user's request is passed along to it through the GUI.
This principle is used in other programming domains where the GUI is a separate program, as well. Some examples that come to mind are version control systems like Perforce, which have a bunch of command-line tools which do work, and a nice GUI which makes it easy to interact with the command line tools and draws them all together. There is nothing you can do with the GUI that can't be done by the command-line tools, though! They are the workhorse, and the GUI is just the container for the nice presentation and interaction. Another example is the debugger gdb, a command-line debugger for which various graphical front-ends have been made. These front ends might have some nifty features to make the presentation or interaction better, but ultimately everything they do is done by talking to the command-line gdb underneath. Thus you can always stop using the colorful GUI thing and just use the command-line program underneath, if you want. Or you can connect a different front-end program to it which can speak the same command-line protocol. Just like Winboard users can do with Winboard engines.
The GUI should exist only to give a nice presentation to users, and let the users interact with the engine--request actions or information, and see the results displayed, and see the game played out. I really wish SMK had never put a bunch of gameplay-related responsibilities into the Shredder GUI, I think he did the world of computer chess a major disservice by doing that. Sigh...