The sjavac client/server protocol should be hidden behind an interface so that (a) the compilation is clearly separated from the serialization and deserialization of arguments and results and (b) the client can choose between a local and a remote server.