Since Oracle’s acquisition of Sun, we’ve been wondering who will lead the Java community. What sort of leadership is needed, and who will fill the shoes that, for better or for worse, Sun has occupied since Java was first released?
First, does the Java community need a leader? Significant portions of it are doing just fine without any “leadership,” most notably the people working on big data. Their attitude seems to be “have JVM, will do great stuff, don’t bother me with the politics.” And granted, the politics of the Java world over the past decade have been worse than tiresome. But everyone in the Java community relies on a JVM, languages, and libraries, and none of the smaller players have the capability of maintaining and developing these themselves. What happens to the community if the JVM stagnates?
Oracle’s community problem
Oracle’s problem has been simple: while they’ve made occasional overtures and peace offerings to the Java community, they’ve also been, well, abusive. One need look no further than the departure of the Apache Software Foundation and Doug Lea from the JCP when it became clear that Oracle viewed the community process merely as a means to rubber-stamp their decisions. (Doug still contributes to OpenJDK, though through a stand-alone process that is then integrated into releases.) It is certainly true that Oracle is a very large company that has never had to worry much about community relations. I doubt Oracle developers expect much say in the future of the Oracle database platform. It’s possible that this is just a cross-cultural faux-pas; I don’t think it’s Oracle’s intention to kick sand into their developers’ faces. I suspect it never occurred to Oracle’s highest levels of management that the community would care.
The puzzle of Google and Java
Google supports an active user group program (GTUGs), but as you would expect, they cover the whole range of Google technologies, not Java as such. And, like most technology user groups, GTUGs are largely inward facing; they don’t create a lot of news on their own. Google’s presence in the Java community at large is surprisingly low key.
I’ve been puzzled by this attitude, though perhaps it isn’t strange. Google is a very large company that’s interested in many things, from medical records to self-driving cars. But they know exactly where their money is coming from, and that’s their advertising business. Projects that are related to selling advertising get marketing effort; projects that protect their ability to sell advertising in the future get marketing effort (I’ve argued that that’s the motivation behind Android, and it’s certainly somewhere in the background behind Chrome); but projects that are merely internal tools that they release to the public get short shrift. App Engine? Google is interested in providing tools to help developers build applications, but I don’t think they see App Engine as a moneymaker; they’re willing to let Amazon be the leader in cloud services. Contentious Java community relations? For Google, that’s a distraction. Google’s own Java developers are all the community it needs. Google has the resources to maintain its own JVM, should it come to that. That’s probably a reasonable corporate policy, but it does not do the Java community any good.
VMware’s role in the Java world
VMware probably acquired more talent from the Sun diaspora than any single company. And they’ve also made some interesting purchases over the years: SpringSource gave them a viable alternative platform to Java EE, with the Groovy language thrown into the bargain. They have made some very important moves with their open cloud platform, CloudFoundry: an open-source platform as a service (PAAS) framework that features a wealth of open source frameworks, including Spring, Rails, Sinatra, Node.js, and Grails and other JVM-based technologies. Again, Java is so important to the enterprise computing space that building a cloud platform around Spring is a no-brainer. But outside of the Spring community, VMware has played their cards close to their chest. Am I the only person who has had trouble figuring out where they’re going or what they’re doing?
VMware’s aims are not unlike Google’s. They have more to be gained from the success of their properties — Spring and Grails are much more than tools for internal use. But they’re very focused on larger corporate goals, as they try to move from domination of the virtualization world to domination of cloud computing. Their latest purchases show that they see the cloud as providing corporate applications to end users. With the addition of Socialcast to their portfolio, it’s clear they see that cloud computing is essentially social, and that thriving companies must have a social component. All this is well and good, but it’s a strategy that can succeed with or without Java. While they have a definite interest in seeing Java’s Open Source community prosper, as far as I know they haven’t shown any interest in the community as a whole. They’ve bought companies formed around open source projects, but they haven’t, at least up until Cloud Foundry, started any projects of their own. And while Cloud Foundry provides a great platform for running Java applications in the cloud, it isn’t itself a Java project: it’s written largely in Ruby on Rails and Erlang.
So while VMware has an important role in the Java community, they’re not a Java company as such. Indeed, they’re using what they see as the best tool for the job. That’s certainly a good practice, and perhaps the hard lesson we’ve learned after a decade or so of language wars. VMware has talent and some wisdom — but as a company, I don’t think there’s a desire to be a community leader.
What do we want from a Java community leader?
Perhaps we should be asking the bigger questions: What do we want from a community leader? Is that role necessary at all, or is it just a holdover from Sun’s often inept attempts to deal with the movement they created? I’ve already mentioned maintenance of the JVM, and the job of pushing it (and the language) into the future. We’ve debated new language features long enough; at some point, someone had to own the job of implementing Java 7, with closures or without. Oracle has taken on that task, and succeeded. I think they’ve made some hard decisions, and good ones: deferring closures until Java 8, while keeping the invokedynamic bytecode instruction that makes it easier to implement dynamic languages in the JVM. Bringing Java 7 to closure (if not bringing closures to Java 7) is a significant achievement, and something that could have wandered on for years under Sun’s leadership.
But is that all we want? Sun’s tenure as leader of the Java community was stormy, with Sun probably not getting enough credit for keeping the fractious participants together. As I said many times, the JCP was the “least dysfunctional standards group out there.” But that came at a cost. In my admittedly idiosyncratic reading, the train-wreck that was EJB 2 came from Sun’s inability to say “no” to powerful vendors, who wanted certain kinds of features. If you remember JINI (and you probably don’t), Sun’s marketing told a bizarre story about Jini-enabled Internet refrigerators, rather than treating it as an enterprise technology that would compete with J2EE. As a result, JINI died a slow death. The history of Java is littered with initiatives (Java Media; Java Communications; even JavaFX, in which Oracle has taken a renewed interest) that Sun hyped briefly because it fit their strategy du jour, then dropped.
I’m not asking for Oracle, Google, or VMware to re-start any of these dead technologies. That’s probably water over the dam, though should it happen, I’d be cheering. But being a technology leader doesn’t just mean declaring yourself a leader and standing in front of the parade. You have to understand where the parade is going and lead. And that’s a deeper role than just pushing the Java language and the JVM into the future. It requires understanding what developments are important, and valuing those developments for what they are even if it conflicts with your own story. It requires pushing back against other JCP organizations that “need” arcane features at the cost of sane design. And it requires doing so without appearing to abuse the good will of the millions of developers working with, and on, Java. Are any of the companies in the Java community willing to exercise this kind of technical leadership? Are there any organizations willing to think about what features the Java platform really needs, and bring those ideas to fruition? That’s what we need for leadership in the Java community. It’s time for the real leader to stand up.