In this article, we will see a simple theoretical model for software deployment. We will focus on deploying software over the Web, but what is said here can be applied to other situations as well. For concreteness, we will use the Java platform as an example. Here, instead of providing practical advice, we will discuss some basic concepts in a simple intuitive way. A definition of software deployment is also provided.
By software deployment and related services, we mean a broad range of software services comprising the first installation, upgrades, and other maintenance facilities.
The ideas proposed here can be summarized as: (1) adopting an additional layer of specialized software services (deployment services) that programs can rely on. (2) Think of such services as based upon a cyclic deploymeny model.
The Internet and all its related technologies (mainly the Web) have not made the software deployment issue obsolete. On Web-enabled platforms, all-HTML clients are suitable for some kind of applications only. After all, similar "thin client" technologies in other contexts have turned out to be much less successful (for example, the WAP on wireless devices). This emphasizes the importance of sophisticated deployment and maintenance of software applications on client platforms. (This term refers to any suitable computing platform, such as PCs, sophisticated personal devices, etc.)
We start from a rather simple, high-level view of the software lifecycle, as shown in Figure 1.

Figure 1 The waterfall software lifecycle model.
After the software is developed and published, it is distributed to the target clients, is properly installed, and is ready to be used. This is the well-known waterfall model of the software lifecycle.
What we will see in the rest of this article is how this familiar situation has changed with the advent of the Internet, in particular for deployment.
Even a language such as Java, which has been expressly designed for the Internet age, does not have convenient mechanisms for deployment. The deployment issue has historically been a neglected one.
In the Internet age an average connection can support much more than a stack of CDs. Being interactive, it can enable more sophisticated deployment features that were not even thinkable before the Internet advent.
Deployment techniques were intended to support the installation of software in a once-and-for-all fashion. Things are changing because devices are increasingly connecting to each other, and deployment is becoming a kind of established service, in which software is released more often, maintained, customized, and even billed over the network. Deployment can be used as a marketing instrument, as a means to lower development costs, or as a way to add value and services to the software being deployed.
The lifecycle shown in Figure 1 is not realistic when it comes to the details of today's software deployment technology. We will now introduce a useful abstraction, general to the kinds of software deployment that comprise Figure 1.
Figure 2 below shows a high-level representation of the Deployment Circuit.
Figure 2 The Deployment Circuit.
We can individuate three main roles involved in this simple model:
In Figure 2, the journey of a set of resources bundled together as a software executable is defined in the following five stages:
The concept of a Deployment Circuit is similar to the steps of delivering a milk bottle to a house. After the production and the packaging, bottles are transported to consumer homes, happily emptied by customers, and left outside the door to find their way back to the factory. A whole organization with its costs and benefits is behind this service.
Another implicit concept is the "cycle-ness" inherent to the fact that updates will follow installations, just as empty milk bottles are followed by filled ones. Therefore, a Deployment Circuit must be set up by means of Web servers and then maintained. The period of these cycles has been shortened with the advent of new distribution channels (in other words, the Net in all its forms); and by the overall evolution of the software industry, which is heading toward integrated, up-to-date services rather than standalone, once-and-for-all installed applications. In addition, competition presses to shorten these cycles. If software vendors can rely on more effective Deployment Circuits, they can afford more releases with shorter time-to-market, and so on. We will discuss the potential benefits of Deployment Circuits shortly.
The interactivity between clients and distribution servers is also required (in its roughest form) in milk deliveries. For example, when the number of family members change, there's the need to adjust the number of delivered bottles. With software, appliances are much more critical because we must know exactly what is already installed on client machines, together with other data such as the identity of each end-user, the hardware platform they are using, and so on.
As an example, large software applications usually ship in CD-ROMs, and only after the first installation, next updates, and other services (such as license registration) can take place via the Internet.
As a result, we saw cycle-ness, interactivity, and the establishment and maintenance of the whole circuit related to the software deployment as a sophisticated service offered by a Distributor entity to both a Software Producer and an End-User.
Let's examine in detail what this concept entails.
A Deployment Circuit has a series of costs associated with it:
After the Deployment Circuit has been built, the next step is to add extra services that take advantage of the distribution channel or the application helper installed on the clients. These services could be more diverse, but we will focus on those closest to deployment.
The most common services (offered to client applications) are debugging, various types of management, offerings of a richer client environment, and customization. Advanced services include the need for particular clients, such as enhanced reliability.
Let's discuss two concrete examples for the Java platform:
Such software services can be implemented via public protocols (such as JNLP for J2SE) and proprietary mechanisms; or even through non-standard, ad-hoc implementations used for some particular applications only.
You may think that a new era is beginning. In the future, we will assist at the creation of a whole new generation of such services, taking advantage of the Internet and of the ubiquity of new generation computing devices.
Finally, we are ready to propose an original definition of software deployment that is closer to the new scenarios prompted by the Internet.
A simple definition of software deployment:
A technical facility consisting of the establishment and maintenance of a Deployment Circuit between a business service provider and a business service client.
A definition of a Deployment Circuit:
A virtual connection supporting the provider's business services by means of the delivery, assembly, and management of software resources and configurations on a client environment.
Connection policies are defined by the (software) business service provider. We refer to the Distributor as the Deployment Circuit supplier.
Note that the established circuit generally is an abstraction rather than something real; it can be implemented using different technologies. We used the term virtual circuit to describe this aspect.
In conclusion, our vision of software deployment is network-centric, service-minded, and focused on more articulate roles.
In this article, we discussed an approach to software deployment (an additional layer of specialized software services based upon a cyclic model of deployment) and related software services that can be provided to client programs.
For feedback please contact me here
.