The aim of this chapter is to present three concrete examples of available SCM tools. It will not provide a depth-study of the mechanisms involved, but give an overall presentation of the state of practice related to some of the key
functionalities mentioned in 3.2. Over the years, a number of tools have become available, both through open source communities and industry. The three tools presented here do not by any means represent all concepts available through the vast collection of tools existing, but they represent important functionality in a build and release management process. The first tool, Gentoo is not an SCM tool in its right definition, but it contains functionalities which are important elements of an SCM tool. Second is Apache Maven, a tool developed under the Apache Software Foundation [14]. It was taken into account in AB/CO/AP’s decision of making an in-house solution. It was not chosen, but has inspired certain aspects of the section’s solution presented later. The last tool is a prototype presented by Andr´e van der Hoek and Alexander L. Wolf [24]. They introduce a tool aimed at supporting both developers and users in the process of software release management.
4.1 Gentoo
Gentoo is an open source software for distributing and installing packages on different Unix variants. Although Gentoo is not an SCM tool per se, there are many similarities in the tasks supported by Gentoo and the tasks of a typical Configuration Tool. The key functionality of the Gentoo system is to install packages on a local computer, keep the installed packages up-to-date as new releases are made available and to uninstall existing packages. A package, which is the atomic unit of the Gentoo system is typically a third-party OSS
application, like Java or Emacs.
The Gentoo package is comparable to a computer software configuration item, defined by [11] as:
An aggregation of software that is designated for configuration management and treated as a single entity in the configuration
21
22 Chapter 4. Existing Tools
management process.
The Gentoo system’s equivalent of a repository is the Portage tree. The portage tree is a centralized database, of which a computer running Gentoo keeps a local copy. The users copy of the portage tree is referred to as portage, and its functions include resolving dependencies between packages, downloading and unpacking source code, updating packages by deleting old versions and
installing new. While the portage tree can be seen as a repository, containing all artifacts available, the local portage contains functionality which would be managed by an SCM’s workspace tool [23].
4.2 Apache Maven
Apache Maven is a tool aimed to facilitate the build process of any Java-based project. The areas of concern that Maven tries to deal with includes:
• Making the build process easy
• Providing a uniform build system
• Providing quality project information
• Providing guidelines for best practices development
• Allowing transparent migration to new features
Maven defines a build lifecycle, which contains important tasks such as
compilation, test, package, install and deploy 1. The tasks in the build lifecycle are the actions that take place when a product is being built.
Maven also defines a Project Object Model, POM, which is the fundamental unit of work in Maven. It is an xml-file containing information about the project in addition to configuration details used by Maven when performing the build.
Examples are the build directory, the source directory, the test-source directory.
Maven supports two types of repositories, local and remote. A local repository refers to a local copy of the remote repository including temporary build artifacts not yet released. A remote repository refers to any other type of repository accessed through a variety of protocols, such as http and file. In general, the layout of the repository is completely transparent to the user.
Dependency management is one of the areas of Maven that is best known to its users. When dealing with multi-module projects and applications, consisting of tens or hundreds of modules, Maven claim to be able to help you a great deal in
1for a complete definition of the build lifecycle, I refer to the Maven documentation found at http://maven.apache.org
4.3. Software Release Manager 23
maintaining a high degree of control and stability. After the release of version 2.0, Maven supports transitive dependencies, meaning that is no longer
necessary for a user to discover and specify the libraries that your own dependencies rely on. Maven will include them automatically.
In addition Maven supports dependency scope, which is used to limit the transitivity of a dependency. A user can specify for what parts of the build, compilation, test or runtime, a dependency is applicable [19][29].
4.3 Software Release Manager
The emergence of component-based software has increased the level of complexity when it comes to the process of release management. Software is being constructed from pre-existing, independently used, independently developed and released components. Little attention has been paid to the question of how these components should be released, and how users of such components can obtain them in an effective and accurate manner. Hoek et. al.
term this problem Software Release Management, which has given the name to the prototype they are presenting, Software Release Manager, SRM [24].
SRM’s focus is on the activities taking place in between the moment a component is developed and when it is installed. SRM does not consider traditional SCM functionality like source code management and installation, but it instead tries to bridge the gap between authoring and releasing
components and assembling such components into an application.
The Release Database is the repository in which SRM stores both metadata explaining the components, as well as the release archives themselves. SRM provides location transparency meaning that for a user of SRM, it appears as one single database, while in reality the artifacts are stored in separate repositories spread across different sites.
SRM provides its users with a Release Interface where a user might release, withdraw or modify components. Modifying a release includes modifying its metadata, or even the underlying dependencies. Withdrawing, or removing, a released component from the repository is provided to make obsolete and non-supported components unavailable for download. Only components which are not serving as dependencies for other projects might be removed.
Once released, information about a component is made available through the Retrieve Interface of SRM. This interface is the main access point to the release database and presents information about the components.
Presented in this chapter were three tools covering different aspects of build and
24 Chapter 4. Existing Tools
release management. The following chapter will present the solution used by the AP/CO/AP section for supporting their development process of accelerator control software.