What is Software deployment?Software deployment may be defined to be the processes between the acquisition and execution of software. This process is performed by a software deployer who is the agent that acquires software, prepares it for execution, and possibly executes the software [1]. Thus deployment is a post-production activity that is performed for or by the customer of a piece of software. It is at this point in time that all customer centric customization and configuration takes place. Software deployment may be considered to be a process consisting of a number of inter-related activities including the release of software at the end of the development cycle; the configuration of the software, the installation of software into the execution environment, and the activation of the software [2]. It also includes post installation activities including the monitoring, deactivation, updating, reconfiguration, adaptation, redeploying and undeploying of the software. We briefly expand on each of these activities in Section 1.2 below.
Concepts/TerminologyIn this section we introduce common terminology and concepts which apply to many software deployment systems.Most deployment systems incorporate the concept of a component which is defined in the UML2 specification [3] to be a modular part of a system that encapsulates its contents and whose manifestation is replaceable within its environment. In [4] a component is defined to be a unit of composition with contractually specified interfaces and explicit context dependencies only. A component defines its behavior in terms of provided and required interfaces. In this context, an assembly is a set of interconnected components. An assembly can itself be viewed as a component made up of subcomponents and offering and requiring interfaces. This concept has been developed to its logical conclusion in the Fractal Component Model [5]. The required interfaces of the components in an assembly may be satisfied either by other components in the assembly or be required from the environment in which the assembly is deployed. The term resource is commonly used to refer to any artefact (both hardware, software and system artefacts) which a component requires in order to function. An application is simply a collection of components which performs some function. In order to deploy a component it must be instantiated, supplied with instances of components on which it depends and configured. A version of a component refers to time ordered revisions of a component or application and to platform-specific and/or functional variants [1].Some systems provide the notion of a component package containing metadata and assemblies. The package may contain multiple implementations of components to satisfy the needs of different hardware and software environments. Thus when a package is deployed, the deployment system may need to choose the components that are most suitable for the environment. To do this appropriate and adequate