Every software entrepreneur I know dreams of building a platform business. Not just wistful “wouldn’t it be nice” stuff, no, I mean an all-consuming lust to become that which others build on. Led down the garden path by the example of Microsoft’s dominance in the desktop market, believers in the platform strategy view ubiquity and control as the backstop against comoditization and a foothold for launching new attacks against the competition. The part that’s not so obvious is that becoming a platform means that you first have to come close to winning the market on non-platform merits at which point, voila!, you’re a platform…so long as you haven’t made it impossible to build on your stuff.
I got to thinking about this because the tiny sliver of time that Java occupies in my mind these days is generally dedicated to dissecting it’s rise and fall. The more time I spend on it, the more I realize that what’s happened to Java in the last couple of years is a failure to recognize a couple of things:
- that Java won, despite it’s myriad warts
- that winning is not a god-given right
- that you can’t expect to win on your own terms
In fact, Java never won on its own terms. It won by having enough pluck and backing to build up a real, honest-to-god platform. The platform became a platform because it got used for enough good things that it came close (enough) to winning the market for a certain class of apps. Java the language is a pitiful mess. Java the platform? Now that’s a thing of fucking beauty. Not only did Sun build the alliances necessary to ensure that Java would be available to whoever wanted it, the “Pure Java” marketing actually worked.
The result is a system that won because it created an environment where, no matter what the OS, developers could plug in a set of Java libraries (I’m ignoring the JAR cluster-fsck for now) and know that it would all “just work” thanks to a common bytecode interpreter. Now, other languages have used a similar form of platform aikido to catapult themselves into utility. Python, PHP, Perl, and Ruby spring to mind as languages that don’t really mind their C dependency chains. Quite the contrary! The communities around these languages (rightly) consider being able to “swig up” some C or C++ hairball as something they can script as a core feature. It allows them to turn one platform win into another. Which is exactly where Sun continues to self-destruct.
Instead of understanding that they won the platform war and will inevitably lose the language skirmishes, the Java camp seems hell-bent on trying to shoehorn Java (the language) into ever more places that it doesn’t belong. JSR 290? Gimmie a freaking break.
All of this points to a bright future that Sun, currently, seems too limp-willed to exploit. There’s an amazing amount of good code that people have churned out in Java. The “Pure Java” thing actually played! Instead of allowing the partisans to throw stones at folks who want to run other, more productive, languages on top of the JVM (aka: the platform), Sun should follow through on it’s baby steps and start giving real respect to the dynamic languages folks who want to help them continue to win on a platform (not language) basis. Hiring the JRuby guys and shipping jrunscript (aka: Rhino) in Java 6 are good first steps, but they don’t go far enough. The atmosphere has to change. Acrimony needs to be turned into understanding, and real investment needs to be made in making the platform successful, even if it comes at the cost of one particular language.
It’s not too late. I hope.