The large scale application of reuse to support software development is not a new concept. Over twenty years ago, M. D. McIlroy expressed the need for: “… standard catalogues of routines, classified by precision, robustness, time-space performance, size limits, and binding time of parameters.” [McIlroy 68] He also provided insight that is still valid into: “… the kinds of variability necessary in software components, ways of producing useful inventories, types of components that are ripe for such standardization, and methods of instituting pilot production.”McIlroy emphasized the importance of abstraction of common principles in developing these routines, the need for automatic generators, and uniformity of engineering. He also enumerated the degree of parameterization needed for successful reusable software: Choice of precisionChoice of robustness, trading off reliability and time-space performanceChoice of time-space behaviorChoice of algorithmChoice of interfaces with standards for types of error conditionsChoice of storage accessing methodChoice of data structures within a given algorithm or within different related algorithmsIn the utility and tool area, these concerns have been met with stable, understandable and supported reusable software subsystems to support applications development. Examples of this software are collections of abstract data structures, data base management systems, development environments, and network managers. Requirements for new applications that depend on reuse of such general subsystems software are specified in light of the existence of that software. The development can achieve significant productivity gains when the software subsystems are reused.Except in reusing these subsystems, reusable software practice has not had the same level of success in specific application areas, with few exceptions. For domains such as command and control, communications, avionics, and shipboard systems, reusable software must address specific application requirements particular to the given domain. The development of a reusable air traffic control architecture by Thomson-CSF is an example of reuse that addresses the requirements of a specific application. [Andribet 90] The details of the architectures and components developed by Thomson-CSF remain within the company, and may have limited applicability for other organizations that develop similar systems but use alternate design strategies. The Common Ada Missile Packages (CAMP) project has also produced reusable software components, primarily for missile operational software, but this software has seen only limited application. [McNicholl 88]