Many, if not most, open source Java software projects use Ant instead of make as their build tool. When Ant was first introduced it offered only a subset of the features of make, and even now it is still behind in some areas. So, how come it took off so dramatically? Perhaps "The Innovator's Dilemma" by Clayton M. Christensen offers some useful insight.
Personal experience. I've actually constructed a complete build system for a commercial Java project using make and then turned round and redone the whole thing using Ant because it made some Java specific tasks so much easier on Windows platforms. I hope that this lets me comment on both systems from the basis of at least some experience.
The Dilemma. The Innovator's Dilemma identifies three key concepts that help to explain why and how an existing successful "product", such as make, can be rapidly replaced by a newcomer that initially has far fewer features. These are
- Disruptive technology.
- Existing product's available feature set outstrips actual needed feature set.
- Investing in disruptive technologies in not initially profitable for existing product's developers.
Disruptive technology. To quote from the book "Disruptive technologies bring to market a very different value proposition than had been available previously. Generally, disruptive technologies underperform established products in mainstream markets. But they have other features that a few fringe (and generally new) customers value."
This is clearly the case with Ant where I would point to the ease with which Java compilation can be done, the simplicity of building war and ear files and the lack of additional software needed to run on Windows platforms as some of the more disruptive values. Though Ant lacks features that make has, such as being able to dynamically generate rules by pattern matching, it is so simple to get Ant to do something when you are working on a Java project that you can get started much sooner than if you have to use make. Anyone can put together a simple Ant build.xml file to compile some code they have written because they already have most of the knowledge and software they need. Getting make set up to do the same thing may well include installing cygwin if you are working on Windows, and learing the syntax of make files.
Feature set.Because of the rapid rate of progess and the general ease with which features can be added any software product rapidy acquires far more features than customers need or are willing to pay for. In the context of make or Ant the currency of the payment is the time taken to understand either product and work out how to accomplish the task you have. Once a disruptive product reaches a certain level of "feature completeness" users will swap from the existing product to the new one at a dramatic rate as they trade some features they currently don't use for some ease of use or other benefit they want.
I would say that because make has so many more features, and to a great extent so much more capability, it is a more difficult product to get started with. For many projects Ant provides enough functionality even though it does not provide the same amount as make. Even if both continue to add features at the same rate the features that make adds will necessarily be of use to a smaller number of non make users, (those people who have a build problem but can't use make as it doesn't have some feature X) as most needs are already addressed by make. However, those features added to Ant will satisify a larger number of non Ant users as there are more of them.
Clearly existing projects are "locked in", at least to some extent, to their existing build system, but as new projects start they pick they can pick something new to use. If people don't already understand make, or are intimidated by it then they will start with something else if they can, and Ant picks up another user.
Investing. For open source products the investment being made is the time and effort people put into developing the product, including developing addons and surrounding infrastructure.
I think the hint here is that existing projects will seldom spawn their disruptive replacements. People working on an existing project have too much invested too easily throw it all overboard for a less functional alternative. You do see projects embarking on major rewrites, but almost always to provide a more functional, better architected solution, not to provide a simpler alternative that satisfies fewer of their "customers" than the current system.
Future. As Ant adds more features and becomes more complex will it be possible for it to remain easy to pick up and work with or will it start to approach make, leaving an opportunity for another replacement? A more "global" question, is it possible to design a system from the startbodybe a disruptive technology and so take over a market in that way.
Posted by Alex at December 10, 2001 09:36 AM