I don't think so, unless the GUI would detect by itself that these moves are actually illegal. In the normal case, since the UCI spec does not talk about illegal moves, an UCI GUI would have to forward these moves to the opponent which would obviously break something. On the other hand the GUI should not forward "0000" to the opponent, knowing that the null move would always be illegal.mcostalba wrote:Extending your reasoning we could also say that in mate position the engine can send also "bestmove a2a4" or "bestmove d2d8" and the effect is the same.
As I already wrote, I can agree on your preferences here, even though I don't quite believe that anyone could see "0000" as a pseudolegal move.mcostalba wrote:But nevertheless although the final effect is the same I think is more appropriate to _not_ send a random move (also 0000 is a move) that, given the current position, turns out to be illegal and so discarded. I think is more appropriate to send something that could not be interpreted as a move and so is discarded early on, on a pure semantic level, without requiring a validation against the current position's state.
The reason why I prefer to explicitly state that no move is possible through the use of a string like, for instance, "bestmove (none)" is because it is more clear and less ambiguous especially in the eye of the casual reader. If you read the posts of this thread you can easily spot how "bestmove 0000" could lead to misunderstandings on _why_ the GUI reacts in the correct way (but for the wrong reason) and for many people it is difficult to grasp the difference between a pseudolegal move that turns out to be illegal and a string that is not a pseudolegal move like "(none)", and they incorrectly conclude that "bestmove 0000" is the _correct_ way for the engine to answerer the GUI in case of stalemate.
Sven