Answers.Body: <p>I don't think it's possible to create a GUI or engine as separate apps in iOS. iOS prevents one app from invoking another as part of its security setup. An engine author has to write the GUI, and integrate it with the engine before he can apply to Apple for approval for release on the App Store.  This may be true of Windows RT as well.  Android has GUIs and engines.</p>
  
  <p>Also apart from UCI and CECP (Chess Engine Communication Protocol, i.e. winboard/xboard), Chessbase has its own proprietary protocol. Many of the strongest engines use UCI, while beginning programmers quite commonly use CECP.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2015-09-22T00:22:35.200Z
Answers.Text: It's also true for Windows phone.
Answers.UserDisplayName: SmallChess
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2015-09-21T09:54:26.827Z
Answers.LastActivityDate: 2015-09-21T10:08:44.233Z
Answers.LastEditDate: 2015-09-21T10:08:44.233Z
Answers.UserDisplayName: A passerby
Answers.Body: <p>Most GUI support engines either in UCI or Winboard, UCI becoming more of a standard and popular these days. But, typically if you want your engine to be easily pluggable to any GUI (in Windows or Linux), then you should have an "exe" or executable which can be pointed to by these GUI programs. If you are building the engine using Java, then I am unsure how you would be able to convert this to an executable to be used by the GUI. The same thing applies to be able to play online tournaments. Even if you are planning to provide a web-service kind of interface for your engine, I don't think it can participate in engine competitions.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-08-18T06:43:54.627Z
Answers.Text: No. Java can be natively built for on .exe. Java doesn't always have to be run on a virtual machine.
Answers.UserDisplayName: SmallChess
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-08-18T06:44:43.820Z
Answers.Text: The .exe file you're talking about is a engine file. The engine must support either UCI or Winboard. Otherwise, no chess GUI can read from it. Your statement makes no sense.
Answers.UserDisplayName: SmallChess
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-08-18T07:13:24.280Z
Answers.Text: I cannot but laugh at your comments. Try running a java program without the JRE installed.
Answers.UserDisplayName: Keshav
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-08-18T07:21:10.570Z
Answers.Text: If you did some programming, you'll laugh at yourself. Java can be compiled to a native program.
Answers.UserDisplayName: SmallChess
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-08-18T05:58:59.333Z
Answers.LastActivityDate: 2014-08-18T05:58:59.333Z
Answers.UserDisplayName: Keshav
Answers.Body: <p>There're only two protocols - UCI and Winboard. Winboard is an old protocol and not really being used nowadays. Crafty is the only major engine still supporting the Winboard protocol, but it's only because the engine is also very old. UCI is a newer protocol developed by Shredder, and is used everywhere - Windows, Macs, Linux, Android, iOS etc. UCI is really the only protocol you should consider.</p>
  
  <ol>
  <li>UCI is supported everywhere</li>
  <li>Every chess GUI other than xboard supports UCI, such as, Chessbase, Scid, Arena etc. Even xboard can connect to a UCI engine by something known as Polyglot.</li>
  <li>UCI documentation is at <a href="http://wbec-ridderkerk.nl/html/UCIProtocol.html" rel="nofollow noreferrer">http://wbec-ridderkerk.nl/html/UCIProtocol.html</a></li>
  </ol>
  
  <p>Winboard has more or less obsoleted because the protocol is more complicated than the cleaner UCI. Winboard is a stated protocol, it means the engine state depends on the previous iterations, whereas UCI is easier to deal with as you only have to supply with your current FEN or a move-list.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2015-07-19T16:44:11.120Z
Answers.Text: A minor correction on the above -- chess GUIs such as Arena typically don't use FEN for communicating game states with UCI.  They use move lists from the start of the game.  This allows the engine to correctly deal with the fifty move rule and other game features that often aren't adequately communicated with FEN.  The protocol does use FEN however for setting up arbitrary game positions, and positions where the entire move list is unknown.  However the poster is correct in all other particulars.
Answers.UserDisplayName: johnwbyrd
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2015-07-20T01:24:39.163Z
Answers.Text: @johnwbyrd I've edited my answer. Thanks.
Answers.UserDisplayName: SmallChess
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-01-19T01:26:04.040Z
Answers.Text: FEN works fine for the fifty move rule. It's the threefold repetition rule that causes problems.
Answers.UserDisplayName: Kef Schecter
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-08-17T13:22:03.000Z
Answers.LastActivityDate: 2018-01-31T05:39:19.380Z
Answers.LastEditDate: 2018-01-31T05:39:19.380Z
Answers.UserDisplayName: SmallChess
Body: <p>I am writing a chess engine in C++ <a href="https://github.com/RomainGoussault/Deepov" rel="noreferrer">https://github.com/RomainGoussault/Deepov</a>.</p>
  
  <p>I know there are several interface protocols out there (UCI, Winboard protocol, etc) and I don't know which to implement. I would like one that:</p>
  
  <ul>
  <li>enables my engine to play online tournaments</li>
  <li>has several GUI for Linux, Windows and iOS</li>
  <li>has some sort of documentation</li>
  </ul>
  
  <p>Thanks</p>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2014-08-18T11:45:03.527Z
Comments.Text: Why Java? Believe me, you'll regret it when you're optimizing your engine for speed.
Comments.UserDisplayName: Rafiek
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2014-08-18T11:47:51.217Z
Comments.Text: Because I know Java well. I also know that Java is really slow compared to other languages. I may port it to C++ afterwards.
Comments.UserDisplayName: Romain
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2014-08-18T11:50:25.007Z
Comments.Text: Ok, but I recommend porting as soon as possible ;)
Comments.UserDisplayName: Rafiek
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-07-24T07:46:40.740Z
Comments.Text: Porting to C++ done ;)
Comments.UserDisplayName: Romain
Tags: <engines><software><programming>
Title: Which interface protocol should I implement for my chess engine?
ThreadText: # Which interface protocol should I implement for my chess engine?
  
  (Asked by: username_0 on 2014-08-17)
  
  I am writing a chess engine in C++ <https://github.com/RomainGoussault/Deepov>.
  
  I know there are several interface protocols out there (UCI, Winboard protocol, etc) and I don't know which to implement. I would like one that:
  
  * enables my engine to play online tournaments
  * has several GUI for Linux, Windows and iOS
  * has some sort of documentation
  
  Thanks
  
  **Tags:** engines, software, programming
  
  > **Comments:**
  > **username_1**: Why Java? Believe me, you'll regret it when you're optimizing your engine for speed.  
  > **username_0**: Because I know Java well. I also know that Java is really slow compared to other languages. I may port it to C++ afterwards.  
  > **username_1**: Ok, but I recommend porting as soon as possible ;)  
  > **username_0**: Porting to C++ done ;)  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_3 on 2014-08-17. Score: 12 | Accepted answer
  
  There're only two protocols - UCI and Winboard. Winboard is an old protocol and not really being used nowadays. Crafty is the only major engine still supporting the Winboard protocol, but it's only because the engine is also very old. UCI is a newer protocol developed by Shredder, and is used everywhere - Windows, Macs, Linux, Android, iOS etc. UCI is really the only protocol you should consider.
  
  1. UCI is supported everywhere
  2. Every chess GUI other than xboard supports UCI, such as, Chessbase, Scid, Arena etc. Even xboard can connect to a UCI engine by something known as Polyglot.
  3. UCI documentation is at <http://wbec-ridderkerk.nl/html/UCIProtocol.html>
  
  Winboard has more or less obsoleted because the protocol is more complicated than the cleaner UCI. Winboard is a stated protocol, it means the engine state depends on the previous iterations, whereas UCI is easier to deal with as you only have to supply with your current FEN or a move-list.
  
  > **Comments:**
  > **username_5**: A minor correction on the above -- chess GUIs such as Arena typically don't use FEN for communicating game states with UCI.  They use move lists from the start of the game.  This allows the engine to correctly deal with the fifty move rule and other game features that often aren't adequately communicated with FEN.  The protocol does use FEN however for setting up arbitrary game positions, and positions where the entire move list is unknown.  However the poster is correct in all other particulars.  
  > **username_3**: @username_5 I've edited my answer. Thanks.  
  > **username_6**: FEN works fine for the fifty move rule. It's the threefold repetition rule that causes problems.  
  
  ---
  
  ### Answer by username_2 on 2015-09-21. Score: 1
  
  I don't think it's possible to create a GUI or engine as separate apps in iOS. iOS prevents one app from invoking another as part of its security setup. An engine author has to write the GUI, and integrate it with the engine before he can apply to Apple for approval for release on the App Store. This may be true of Windows RT as well. Android has GUIs and engines.
  
  Also apart from UCI and CECP (Chess Engine Communication Protocol, i.e. winboard/xboard), Chessbase has its own proprietary protocol. Many of the strongest engines use UCI, while beginning programmers quite commonly use CECP.
  
  > **Comments:**
  > **username_3**: It's also true for Windows phone.  
  
  ---
  
  ### Answer by username_4 on 2014-08-18. Score: -3
  
  Most GUI support engines either in UCI or Winboard, UCI becoming more of a standard and popular these days. But, typically if you want your engine to be easily pluggable to any GUI (in Windows or Linux), then you should have an "exe" or executable which can be pointed to by these GUI programs. If you are building the engine using Java, then I am unsure how you would be able to convert this to an executable to be used by the GUI. The same thing applies to be able to play online tournaments. Even if you are planning to provide a web-service kind of interface for your engine, I don't think it can participate in engine competitions.
  
  > **Comments:**
  > **username_3**: No. Java can be natively built for on .exe. Java doesn't always have to be run on a virtual machine.  
  > **username_3**: The .exe file you're talking about is a engine file. The engine must support either UCI or Winboard. Otherwise, no chess GUI can read from it. Your statement makes no sense.  
  > **username_4**: I cannot but laugh at your comments. Try running a java program without the JRE installed.  
  > **username_3**: If you did some programming, you'll laugh at yourself. Java can be compiled to a native program.  
  
  ---
  
  