For example, one can conceivably implement PVM-like functionality [15] by writing a work engine that functions like a PVM daemon, and writing PVM-like programs or tasks as work data objects. The work data objects would depend on the work engine to provide message-passing and task-spawning capabilities. The work engine may implement message-passing directly (if it has no network restrictions), or it can forward the responsibility to the manager (if restricted applets are used). The manager can then route messages to the appropriate work engines and work data on other machines.
Of course, PVM is a bad example since it is not adaptive. However, we use it here as an extreme case - i.e., if you can implement PVM, then implementing other programming models (e.g., Linda, Cilk) is at least as easy, since PVM (and message-passing in general) can implement these.
Information can be encrypted between the engine and the advocate. This can prevent sabotage and spying attacks from external sources (i.e., non-volunteers). For certain applications, the process() method itself may also implement a true encrypted computation.
Since work data objects are polymorphic, we can also implement dynamic obfuscation by varying the the process() method between different instances of the work data object. However, currently this will probably not be efficient since it would involve downloading an entire class file for each work data object to be processed. If Java allowed partial downloading of code (e.g., a single method), then this may be feasible.
Volunteer servers are more difficult to implement. Conceivably, however, it is possible to treat a server's program object as an engine, and connect it to a manager on another server. In this way, we can get hierarchical systems where servers can be clients of higher-level servers. This idea remains to be tried, but seems plausible and promising.
Watcher clients can allow not only administrators, but users as well, to view results and statistics of the computation. By adding in the appropriate methods, these clients, or possibly separate wisher clients, may also be used to submit requests to the server.