Metacomputing is the seamless application of geographically separated distributed computing resources to user applications. We consider the scheduling of meta applications; applications consisting of multiple components that may communicate and interact over the course of the application. Components may be schedulable computations, remote servers or databases, remote instruments, humans in the loop, etc. We divide applications into three categories-concurrent, parallel, and pipeline. Concurrent is the classic meta application in which a set of components each running in a single site are executing concurrently and exchanging data. Parallel is a special case of concurrent in which a component is replicated and distributed across multiple sites. Pipeline applications consist of components connected in a chain like fashion.