Naturalization is defined as the process of "adapting or acclimating (a plant or animal) to a new environment; introducing and establishing as if native". The Naturalization Service is a service for automatically naturalizing user applications to grid resources. The execution environment for an application on a given resource consists of the software existing on that resource and the settings of the environment variables when the application runs. For each execution operation in a given job, the function of the Naturalization Service is to:
A list of dependencies is associated with each execution operation. A dependency consists of basic requirements including a type, a name, a version range, and a feature list as well as information gathered during processing including a source host and path, a target path, and an "analyzed flag" to indicate its analysis status. The Naturalization Service currently supports five software types: executables, shared libraries, Java classes, and Perl and Python programs. The dependency name holds the canonical name for the software depending on its type (e.g. ls, libc, java.util.List, File::Basename, xml.sax.xmlreader, etc.). The version range consists of a minimum and/or maximum version required. The feature list contains features that the dependency must support. For example, the application might require the w3m browser compiled with SSL support.
The source host and path, target path, and analyzed flag are used to store information as processing proceeds. Stages are only executed if the information they provide has not already been gathered. Thus, a job for which the execution environment has already been fully established can be sent through the Naturalization Service without effect. This allows the user to have complete control of job processing. A user can execute stages individually, can specify dependencies manually, can turn analysis off, can specify an exact source for software, can specify a location where software already exists, or any combination thereof. The Naturalization Service will fill in any gaps in the environment left by the user or return the job unchanged if no modifications are necessary.