1. A computer implemented method comprising: defining, in metadata, dependencies between a software product and associated dependency assets that are associated with the software product, wherein the software product comprises a plurality of software product assets; receiving a request for the software product from a computer; and downloading to the computer the software product assets and associated dependency assets identified in the metadata for the computer based on an operating system and one or more capabilities of the computer.