In the past five years, this situation has been notably improved by the development of general-purpose and cross-platform parallel processing systems such as Parallel Virtual Machine (PVM)  and Message Passing Interface (MPI) .In such systems, the amount of manual work required is reduced significantly by the runtime system, which takes care of such things as automatically executing the appropriate code on each of the processors involved, keeping track of existing processors, routing and delivering messages, etc. At the same time, programming is made much easier by a general-purpose applications programming interface (API) which hides most of the details of the runtime system, and allows the user to write parallel programs for NOWs using a relatively simple high-level message-passing model. All this allows programmers to concentrate on writing applications instead of worrying about low-level details.
Although systems like PVM and MPI make programming and setting-up NOWs significantly easier than in earlier ad hoc systems, setup requirements still impose practical limits on the size of NOWs that can be used with these systems. To perform a parallel computation using PVM, for example, one must:
Clearly, this process not only requires a lot of effort on the part of the system administrator, but also requires a lot of trust between the involved machines, and consequently, a lot of prior human communication between the administrators of different machines. For this reason, the use of PVM and MPI has mostly been restricted to internal use within research institutions, where such close coordination is possible.