In computational grids, performance-hungry applications need to simultaneously tap the computational power of multiple, dynamically available sites. The crux of designing grid programming environments stems exactly from the dynamic availability of compute cycles: grid programming environments (a) need to be  portable  to run on as many sites as possible, (b) they need to be  flexible  to cope with different network protocols and dynamically changing groups of compute nodes, while (c) they need to provide  efficient  (local) communication that enables high-performance computing in the first place.
['Rob V. van Nieuwpoort', 'Jason Maassen', 'Rutger F. H. Hofman', 'Thilo Kielmann', 'Henri E. Bal']
Ibis: an efficient Java-based grid programming environment