The platform idea
One of the most pervasive concepts in information technologies today is the notion of a ‘platform’ (see this article in Wikipedia for a description of examples of this in computing). This article defines what platforms are, and how experience from such platforms can be applied to other software-intensive design and integration problems.
The platform concept has countless implementations in practice, but is particularly evident in the so-called LAMP (software bundle) implementation, which includes Linux, an operating system; the Apache HTTP Server, a collection of software used to build Web servers; MySQL, a database; and PHP, a programming language. The LAMP platform (collectively sometimes referred to as a ‘solution stack’) is itself further leveraged by other platforms, such as Drupal, for more application-specific purposes such as content management systems.
Each of the LAMP components is a software platform in its own right, and each builds upon the previous items in the LAMP stack, essentially providing higher and higher levels of functionality that others can then build upon and extend. For example, Apache depends upon the Linux server to run on, in order to ‘serve up’ those web pages on the internet. While there are many such Linux distributions, Apache remains neutral to which one you use, and essentially insulates you from that choice. PhP provides functionality which directly interfaces with on, builds upon, and of course, depends upon, that Apache functionality to effectively provide intrinsic programming language support for displaying and accessing data from web pages on the internet. As a result, a common features of platforms – that of interoperability – is demonstrated.
MySQL is also written in PhP, and provides a place to store the data used in and received from web pages such as those served up by web servers such as Apache persistently across web page sessions. Finally, Drupal (also written in PhP, and dependent upon a database like MySQL to perform it’s work) provides extensible functionality to render web pages and manage content for an entire web site.
When a new computer system enters the marketplace, this entire LAMP capability, offered by this collection of software, all written independently by many different producers, can be quickly be ported onto a new computer system (which is itself a platform) by making minor changes to the Linux kernel (where all hardware-dependent features are isolated), and the code generation capabilities of PhP. The rest of the migration to the new hardware platform is just accomplished with recompilation, rather than having to rewrite large amounts of code to get similar functionality. This can insulate user communities of platforms from some types of changes, though typically these are only changes that platform designers were able to previously anticipate.
A platform is an architecture that weaves together these key concepts:
- A repository that provides the authoritative information sources of the platform itself, such as details of the platform components, configuration descriptions of the various versions of components and how they are assembled in various collections of development builds and releases, and issues associated with these collections or versions of the components themselves
- A distributed development, user and support community (sometimes called an ‘ecosystem’) that leverages the other concepts to enable members of the community to self-organize, sustain, and build new content on top of the platform, and evolve the underlying components of the platform itself.
- A set of protocols that govern how the platform components are expected to interact, and how changes to the platform are to be managed
- A set of commitments that the platform development community establishes and uses as guiding principles for the overall development effort. These commitments are typically overseen by a subset of the development community to assure that collective community goals are achieved. An example of such a commitment for the LAMP communities is portability.
- A set of well-formed interfaces which expose the underlying functionality of the platform and components to the world, while hiding the details of the underlying implementation of these components
Platforms are important because they enable highly complex implementations to be managed and evolved in parallel, while minimizing undesirable interdependencies across these layers. Without such platform ‘packaging’ (which essentially breaks down what would otherwise be an overly complex system into a system of systems), a development effort for equivalent functionality can often struggle to ‘get traction’ and achieve the necessary momentum required for efficient operation. By crafting well-formed interfaces between these respective platforms, and allowing substitutions of platform implementations, you can broaden the applicability of applications considerably.
Platforms basically ‘take off’ when they achieve a ‘critical mass’ in the number of users that are able to function effectively in using them, and when the platforms themselves interoperate to achieve a whole that is greater than the sum of the parts. Often, this is achieved through one or more careful decisions regarding platform openness within the marketplace. When this occurs, the natural benefits of synergy, commonality, and learning occur, and higher and higher ‘abstractions’ of functionality typically are suggested and begin to be offered by the community, following the patterns outlined in Wikinomics and The Spider and the Starfish. When this occurs, an exponential growth in performance and efficiency can often be achieved (though only once the platforms themselves are sufficiently mature).
- Bryan Pflug's blog
- Login or register to post comments
