Large enterprises typically own and operate a large number of software applications either of the shelf, developed in-house or inherited through mergers and acquisitions. Applications can be of heterogeneous e.g. they are written in the same language(s) or they use the same data storage mechanisms and formats. They may also run on the same operating