A computer-implemented method for providing parallel processing in a heterogeneous personal computing environment, the method comprising: determining one or more computing resources in the computing environment that are available for performing distributed parallel processing by sending a network query to identify computing resources in the personal computing environment and by receiving one or more responses from available computing resources, wherein a response to said network query indicates that a respective computing resource is available for distributed computing and includes times when the respective computing resource is outside of the personal computing environment, wherein determining one or more available computing resources comprises electing not to use resources that are currently in use by a user or that may soon leave the environment; running one or more benchmarks on the determined available computing resources to determine available capabilities that can be used for distributed computing, wherein running one or more benchmarks comprises querying an operating system on each computing resource to identify static and dynamic properties of the resource; receiving a job from an originating computing resource for execution on one or more other computing resources; determining a schedule of one or more tasks for completing the job, wherein the determined schedule satisfies one or more performance criteria, wherein the tasks can be distributed to various available computing resources in the computing environment and the determined schedule selects a resource for each task; sending information describing each task to an available computing resource to perform the task; managing each task to completion and gathering individual task results for the job; and reporting the job results to the originating computing resource, wherein the preceding steps are performed by at least one processor. determining one or more computing resources in the computing environment that are available for performing distributed parallel processing by sending a network query to identify computing resources in the personal computing environment and by receiving one or more responses from available computing resources, wherein a response to said network query indicates that a respective computing resource is available for distributed computing and includes times when the respective computing resource is outside of the personal computing environment, wherein determining one or more available computing resources comprises electing not to use resources that are currently in use by a user or that may soon leave the environment; running one or more benchmarks on the determined available computing resources to determine available capabilities that can be used for distributed computing, wherein running one or more benchmarks comprises querying an operating system on each computing resource to identify static and dynamic properties of the resource; receiving a job from an originating computing resource for execution on one or more other computing resources; determining a schedule of one or more tasks for completing the job, wherein the determined schedule satisfies one or more performance criteria, wherein the tasks can be distributed to various available computing resources in the computing environment and the determined schedule selects a resource for each task; sending information describing each task to an available computing resource to perform the task; managing each task to completion and gathering individual task results for the job; and reporting the job results to the originating computing resource, wherein the preceding steps are performed by at least one processor.