Current Grid enabling technologies consist of stand-alone architectures. A typical architecture provides middleware access to various services at different hierarchical levels. Services exposed at these levels may be leveraged by the application programmer. However, the level at which the service appears in the hierarchy determines both its richness and the complexity of its use. Thus, benefits gained by using these services are defined by the manner in which they are accessed. Generally, choosing to use a particular service inclines the application programmer to use the associated middleware suite as it is difficult to cherry-pick services across middlewares. Interoperability and independent service access are not easily facilitated in current middlewares.If it is accepted that Grid computing will be an important technology in the near to long term (indeed it can be credibly argued that it is already a very important technology to a select few), then wide spread acceptance will depend on making that technology easily accessible to general exploitation. In practice, this will not only involve interoperability and inclusiveness of key features, but, most importantly, it will require that non specialists be facilitated in constructing grid independent applications that run efficiently on the dynamic architecture that constitutes the Grid. The original problems of programming parallel and distributed systems still hold true: they are notoriously hard to program, since programmers usually have responsibility for synchronizing processes and for resource management. Solutions must be developed to free programmers from the low level details whose consideration gives rise to these problems. In effect, grid programming environments must evolve to a point where grid (and, in general, parallel) programs are freed from architecture details such as data locality, machine availability, inter-task synchronisation, communication topologies, task load-balancing, and fault tolerance -in the same manner as present day sequential programmers are freed from explicit memory management, disk access protocols and process scheduling. At that point in the evolution of the Grid, the grid middleware will adopt the character of a grid operating system and many, if not all, of the issues that make grid programming difficult will migrate out of grid application programs. When this is achieved, the vision of hiding the Grid will have been realised and exploitation of the technology can begin in earnest.