The main drawback to this approach is that programs must be specifically re-written to use GASS. One must find all of the instances of open in a program and replace them with globus_gass_open. Although this is not a difficult problem for the technically minded, it would be laborious to re-build each program that wishes to use GASS. Furthermore, one must find all subroutines and libraries called by the program and replaces instances of open there as well. The red dots in the diagram above indicate all of these places.
A simple solution to this problem is to use Bypass to replace all calls to open and close with their counterparts in the GASS library. This allows us to GASS-ify any dynamically linked program, large or small.
Here is a simple example. First, the library must be loaded into the environment using the LD_PRELOAD feature. Now, any dynamically-linked program may run, and the Automatic GASS agent will be inserted. Below, grep is used to search through a web page for a string. tail is used to extract part of a document. Finally, cp is used to copy it to a local disk.
(Each of these examples simply uses HTTP because this is currently the only protocol deployed by GASS. Later versions will include Grid-specific transfer protocols.)
The Automatic GASS module is distributed in the examples directory of the standard Bypass distribution.