1. A system for describing software components, comprising: a processor; one or more component descriptors, each component descriptor containing information about a corresponding software component of a plurality of software components; one or more aggregate descriptors, each aggregate descriptor containing information about a relationship between a particular software component and at least one other software component; a component hierarchy based upon hierarchical interrelationships among software components and aggregate components; and logic, executed on the processor, for managing software and aggregate component lifecycles, access controls, interrelationships and versioning to maintain the component hierarchy; wherein the information about a particular software component concerns a frequency with which the particular software component is employed in conjunction with software applications and a frequency with which the respective software components are employed in conjunction with each other.