If you ever look at the ColdFusion 9 End User License Agreement, you'll see that there's a whole lot more to ColdFusion that just ColdFusion. Skim the agreement and you'll find that under the ColdFusion covers, the application platform contains the following 3rd party libraries:
- Open Office XML Support
- Something from Apache Foundation
- Something from DataDirect Technologies
- Something from Google
- Something from GreenPoint
- Servlet Libraries
- WebChart3D Enterprise
- Parser Libraries
- Java DOM libraries
- Something from ImageMagik
- Something from International Business Machines Corp
- Something from Intrinsyc Software
- Something from JNBridge
- Something from Logica Mobile Networks
- Something from ObjectWeb Consortium
- Something from RSA Data Security
- Something from SUN Micro Systems
- Something from the W3C
- Something from Yahoo!
NOTE: When I say "something from", it's because the EULA doesn't state what specific piece of software was being provided from the given organization.
That's a lot of stuff! There's no doubt that Allaire, Macromedia, and Adobe built the vast majority of the ColdFusion application platform; but, when you look at the 3rd party list of software, it's clear that a lot of functionality in the language comes from different packages that have been pieced together. Add to that the fact that ColdFusion is built on top of Java and you quickly realize that what you get is waaaaay more than what you actually see.
Now, no one would look at ColdFusion and think of it as a, "roll your own," solution. Anyone who uses ColdFusion knows just how powerful and comprehensive it is. In fact, with more than 125,000 ColdFusion servers deployed, ColdFusion is one of the most widely adopted web technologies in the industry.
So, how can ColdFusion be both an enterprise platform and a composition of so many different libraries? I think it comes down to encapsulation: ColdFusion never comes across as a "roll your own" solution because it presents itself a single, unified platform that successfully encapsulates its complex, multi-part implementation.
What does this teach us about our own application development practices? In order to create our own robust platforms that are at the same time unified, usable, pluggable, and maintainable, we have to create a layer of abstraction between what the programmer sees and what the underlying code does. It is this separation - this API (Application Programming Interface) - that differentiates "platforms" from "roll your own" solutions.
Now, I'm not really saying that this approach is feasible for any given developer starting a new web application project. But, I think there is some very interesting theory to be taken from the architecture behind application platform behemoths like ColdFusion. If nothing else, it teaches us that impression is heavily dependent on presentation and not on implementation.