1. A method of uninstalling a patch applied to a software product installed on a computer, the method comprising: identifying a current state of a software product; applying a patch to the software product, said patch being specific to the software product; determining a desired state of the software product, the desired state of the software product representing a state of the software product when the patch is removed from the software product with the software product remaining installed on the computer; removing the applied patch from the software product; and transitioning the software product from the identified current state to the determined desired state, said removing comprises at least one of the following: determining a desired state of a resource of the software product that has been affected by the applied patch, and modifying the resource to the determined desired state of the resource, said modifying the resource of the software product comprises accessing the resource from a cache of the computer to modify the resource of the software product, said cache being created and updated by the patch when the patch is applied to the computer, wherein the resource is stored in the cache when the patch was applied to the software product, wherein said cache is a copy-on-write cache with respect to original files of the software product and stores files limited to those that are affected by the patch such that the stored files can be restored from the cache during removal of the applied patch.