1. A system for describing software components, comprising: 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 for managing software and aggregate component lifecycles, access controls, interrelationships and versioning to maintain the component hierarchy.