1. A method of providing a computing infrastructure based on virtual machines, said method comprising: providing a virtual machine provisioning system, as executed by a processor on a network, said virtual machine provisioning system: receiving a virtual machine request, as an input; retrieving a selected virtual machine image from a library of virtual machine images, to accommodate said virtual machine request; constructing an instantiated virtual machine from said selected virtual machine image by provisioning said selected virtual machine image, to accommodate said virtual machine request, and by at least one of removing and installing software systems, to accommodate said virtual machine request; and outputting said instantiated virtual machine in response to said input virtual machine request; and providing an image update system for determining an optimal timing for updating one of said selected virtual machine image and said instantiated virtual machine, based on comparing projected update costs of updating the selected virtual machine image and updating the instantiated virtual machine, wherein updates comprise one or more patches that at least one of correct bugs, correct security vulnerabilities, or introduce at least one new functionality; and updating the selected virtual machine image or updating the instantiated virtual machine, based on the determining an optimal timing for updating and the comparing projected update costs.