How the component broker works


liby2 is the library which does all the stuff

in Y2ProgramComponent.cc the server/client is started
(launchExternalProgram) by connecting pipes for stdin/stdout
and starting the program via fork/execve.

The program is searched via pathsearch.cc and must reside
in a sub-directory "clients" or "servers".
The $HOME directory is a special case, as a sub-dir $HOME/.yast2
must exists.

Every program starts via main() genericfrontend.cc

The main() function parses argv and starts
the client (Y2ComponentBroker::createClient) and the
server (Y2ComponentBroker::createServer) for the component


Expressions are 'commands' to the server and sent via
"...Component::evaluate (const YCPValue& command)"

evaluate() starts the 'real' component if it is not already
running.

For the serial and remote components, evaluate()
passes the command via "sendToExternal(command)".

The it waits for the answer via "receiveFromExternal()"

-> the protocol between WFM and the component is synchronous.
   For every sendToExternal there is a corresponding receiveFromExternal.

-> doActualWork() is used for client components

-> result() is used to finish server components
