* Simple case: execute one command: Run() returns when the command completes return structure including the stdout safety built-in: self-terminate if there is no response within some time * More complex case: AsyncRun() command takes more time: asynchronous execution with a completion callback callbacks for stdout and stderr can terminate execution from another thread: Terminate()