Marc Andreessen, in his incredibly insightful little gem factory, has tackled the concept of “internet platforms”, a term which has been bandied about far too loosely of late. Marc brings some much-needed rigor to the discussion, and in so doing provides a framework to look at what the future might hold for the web as a confederation of platforms. I encourage you to go read it — good stuff.
But it seems to me that Marc has missed a subtlety in the definition of what makes a platform. You might call this semantic quibbling, but I think it embodies an insight that took the technology industry a decent while to figure out — and which, if this new ‘platform’ stuff takes off, will be coming back full-strength in this new context. Anybody who ignores it does so at their own peril, because it is almost undoubtedly The Way Things Should Be, and quite likely The Way Things Will Be.
CliffsNotes for those that didn’t read the article. Marc defines platforms thusly:
- Level 1 - a service which can be accessed by arbitrary applications. Google Maps, flickr, etc. Lots of these, and they’ll probably continue to form the basis of 90% of interesting developments in the ‘net space over the long term (my opinion there, not necessarily Marc’s).
- Level 2 - a bulletin board in which you can come along and pin random applications; that is, a meta-application which provides a means for plugins to be visually integrated. Think Facebook.
- Level 3 - a virtual machine which allows third-party code to be directly executed directly on the primary applications’ servers. Marc quotes Second Life, Salesforce.com, and his Ning, but decries Amazon’s EC2, saying it doesn’t count because — my summary — it’s too hard to use and/or doesn’t provide unique vertical capabilities. I’m not sure I buy the difference, and I’d like to see a definition where your commodity datacenter doesn’t qualify as a Level 3 platform — ’cause I happen to think it probably does, under these definitions, just not one particularly streamlined to the kind of uses Marc’s interested in.
So to my quibble. A platform is not a pile of capabilities that makes it easier to develop applications (although that’s usually — hopefully — an important side benefit). At its core, the one thing you can’t take away from a platform without completely losing the point is that a platform is an abstraction which buys freedom.
It abstracts the application from the machine, sure, so that you can run arbitrary applications on a machine, and the machine’s creator doesn’t need to anticipate every application beforehand. That part is parallel to Marc’s discussions of internet platforms. But just as significantly, it abstracts the machine from the application — so that the application doesn’t need to know that the hardware is running with an AMD or Intel CPU with a particular cache size, or this video card and that network card, or a particular OS version, or this chipset, or a particular amount of RAM, and so on. On modern platforms like JVMs, .NET, Flash, etc, the virtual machine lets the application developer even ignore things like what type of CPU is being used, or even what operating system. HTML+Javascript provides an abstraction (albeit an imperfect one — platforms are rarely perfect) from the browser itself.
That freedom is very important, because it means that (A) the stuff supporting the platform can be changed quite a bit without affecting the applications, and (B) a given application will run on a whole hell of a lot of different implementations of a platform, and won’t become useless once, say, the latest Nokia phone is supplanted by something with a touch screen (yes, I realize there’s not a good platform for phones that supplies such freedoms; that pain is significant, and expensive, and exactly my point). So is the platform? Simple a set of policies, interfaces, mechanisms and whatnot that define that abstraction.
So what does this mean for internet platforms? What freedoms are we forgetting? Well, how about the freedom to run an application on lots of different sites? It’d be painful to write and rewrite my little app to run on dozens of different proprietary “internet platforms” — and so I probably wouldn’t, and that’s a shame as it limits the richness of the ecosystem. I’d also not in practice be able to rely on Cool New Site Q being around forever (as mentioned by A VC), so I’d rather my application wasn’t locked into that company and their continued goodwill. More significantly, perhaps, if I’m a business trying to introduce a new “platform” type site, wouldn’t it behoove me to use as many existing abstractions as possible to make it painless for developers to port their existing applications? The pressure for a good abstraction isn’t just from the user side, it’s from both sides.
So, where would these abstractions come from? There are two possibilities. One, they could be consciously defined. Some particularly visionary company (no, Jectiv isn’t in this business, alas) could think about the problem and define the abstractions, then write the premier platform implementation. Think, well, Windows. An open source group could do the same thing, as could a confederation.
The other possibility is that the platform(s) will evolve and become a standard via network effects. Say a couple platform-ish sites start supporting running user JVM code on their site/servers, and provide libraries tailored for JRuby, with a display environment built around portions of Ruby on Rails (this is just an example, people). It’d snowball pretty quickly — network effects are like that. Before you know it, Ning had better be supporting JVM and RoR code or they’ll get steamrolled by somebody who will.