1. A method for maintaining software components comprising: storing one or more of a plurality of software components on a computer; recording a first set of usage data for the one or more of a plurality of software components; automatically removing at least one of the plurality of software components from the computer based on the first set of usage data of the at least one software component meeting usage criteria specified in an expiration policy; transmitting the removed software component to a remote server; providing access to the removed software component through the remote server; recording a second set of usage data for the removed software component; and automatically reinstalling the removed software component on the computer based on the second set of usage data meeting usage criteria specified in a re-instatement policy.