What makes a platform?
Some time ago I was contemplating the concept of a platform. It is a term that is bandied around quite a bit, but I’m not sure if a formal definition exists (other than something flat on which you can build or place something). I am speaking of course of platforms in the software world; perhaps the right term to use would be “application platform”.
I tried a few different approaches at defining a platform. What I came up with eventually was unfortunately rather inconclusive and quite poor. I got to the point where I defined a platform as an integrated collection of tools, APIs, utilities, a runtime and an application server. That’s very clumsy, vague and certainly not great. The important thing for me, however is the word “integrated”.
I guess you could call anything a platform. It’s all a matter of definition. You could bundle together a loose assortment of tools, like an IDE and a database design tool, add an application server (incorporating the runtime, obviously), throw in some utilities and call it a platform. Well, conceptually, that could be a platform. Even the internet is a platform, conceptually speaking. The fact that it is merely a conceptual definition, however, is not satisfactory to me. I would like to see a more concrete application of the term, something you can point your finger at (at least on your screen or in a shrink-wrapped package) and say: “That is a platform!”
In my last blog, I spoke about the ABAP platform. To me, that is a true platform. At any rate, it is a platform on which you can build business applications, so let’s call it a “business application platform”. It is a coherent suite of all the abovementioned things (and heaps more). It provides everything you need to take you through the various stages of designing, developing (and even documenting) business applications, through to the execution, monitoring, debugging and fine-tuning thereof. (I noticed after writing the blog that I never used the term NetWeaver, which I should maybe discuss another time).
Let me focus for a moment on some examples of what I don’t consider to be platforms:
I don’t consider Ruby on Rails to be a platform. I consider that a framework (if its documentation doesn’t say that already). There are many such frameworks around, and they all assist you by letting you build applications on top of them. So let’s call them application frameworks (although, if we wanted to be more specific, we could call them “web application frameworks”).
J2EE (or Java EE, as it is now known), is not a platform. It is a specification. Various implementations exist of this specification (like Sun’s Java System Application Server, SAP J2EE Server, Geronimo, etc.), and what you end up with is an application server with a number of services that support and enable you to create and run business applications. But that too, is not a platform.
Look, in all honesty, I guess you could argue that both of the abovementioned are platforms, and you would probably find enough evidence to support your argument. I suppose you could take one of these frameworks/application servers, add various tools, IDEs, predefined application and utility programs to allow you to support and enable application development, administration and hosting/running, and then you would be pretty close to having a platform. An application platform, that is.
I think what I like most about the ABAP platform is the fact that the development environment, as well as all the utility programs, tools, libraries etc., are integrated into the system and form one, coherent unit. I think that is what makes it a platform for me.
If I were to attempt again to define what a platform is, I would firstly narrow it down to an application platform, and it would be something like this: “A platform is an integrated system of tools, utilities and libraries that can be used to extend the system and build applications”. An “extensible application environment”, is maybe another way to think of it. It’s more than a library. It’s more than a framework, or set of utilities, yet it incorporates all those things.
Next: Why don’t we see (more) Open Source (application) platforms?