How can you take a computer program that runs on one computer and make it run correctly on another computer? This is the problem of software deployment and the topic of this thesis. It is a problem that we run into frequently in daily computer use. Installing, updating and uninstalling programs are all examples of deployment tasks. Deployment is an issue for both users and developers of computer software. After installing a program on a computer a user expects the program to work as intended and that the other programs installed on the computer works the same as before. The problem for the software developer is to ensure that the program he or she has written will run correctly in the complex environment that a computer system can be.
Software deployment has been a topic of research since the late 1990s. The deployment tools in use today are mostly a product of the computer industry or communities formed around open source operating systems. These tools have been built because of the need to reduce complexity of software deployment. Most available deployment tools do however nothing more than automating the deployment process.
This thesis describes two deployment systems that address some of the problems in software deployment. As software deployment is a large topic to cover completely this thesis is focused on the following topics:
Software as components. A piece of software is not a stand-alone entity, but a part of a system. It can use or be used by other pieces of software as a software component. Many of the challenges in deployments is the result of software components being dependent on other software components.
Component storage. When packages are distributed, they are usually represented as a single entity, but during the installation the package is pulverized, i.e. its content will often be placed in different location in the filesystem and the package will no longer consist of a single unit. We want to explore different ways of storing components to preserve the component structure and investigate how this affect the management of software components.