The launcher may print it.
Using the error code is not that straight forward since you still need to convert the error code to a meaningful string, then we need to introduce a map shared between launcher and daemon for this error code, well, looks like a bit overdesigned. Actually the 'error message' here is not meant to be read by end-user but by developers. I can remove the error message and everything will be fine, the daemon is written by me and so do the launcher :)
Pleas consider these as internal protocol, it's not meant to provide the ability of some 3rd party to write a launcher, only used by ourselves. Just treat it as a cross-process LOG(INFO)  :-)