Java: The Headless Platform

[ramble alert: this post needs an edit, bad]

What is Java? Java is a VM and a computer language, and a bunch of "core" libraries for making desktop, web and mobile applications. Programs written in Java can be run on any computer platform (e.g. Windows, Mac, and Linux), and they can be much safer than native programs (but often aren't because of programmer laziness).

To an end user, this is gibberish.

What is Java? The answer is tough because Java doesn't have a head. That is, there's no visible core to Java, especially to the end user. To the end user, Java is just another part of the undifferentiated mass of stuff that comes out of that magical box. That's bad for Java, but what are you gonna do? (Well, if you're Sun you start nebulous ad campaigns trumpeting the equally nebulous benefits of "Java Everywhere"!) [an example of a visible head to a platform would be Windows Explorer for Wintel, or Eclipse for the Eclipse RCP, or the Bittorrent client for Bittorrent (and it didn't always have a head, either)]

I'm going to get back to the headless problem, but lets segue a bit with another question: Why isn't Java present on the desktop? Historically I think it's safe to say it's because the user experience was not as good when running a Java app as with a native app. At worst, Java apps need to be just as performant and functional as native apps; at best, they need to offer value-add above and beyond, to the point where my niece will say things like "Trillian is great but it sure would be nice to have a Java version!" To her, Java might mean greater safety, reliability, and portability. (Another reason is that more and more applications are being subsumed by the browser. But that's another topic.)

The fact of the matter is that, despite Sun's assertions, Java remains an implementation detail, and a nasty one at that, and it remains viable only because its an easy language to learn, and has found life on the server-side because the warts of Java are less visible, it's strengths are actually handy there, and Apache. It turns out that WORA is quite useful for developers working on Windows or Mac and deploying to Linux. This isn't to be scoffed at, but it's a lot different than Sun's original vision, obviously.

Back to an important point: when you install Java, what is it? Where is it's 'head'? What is the visual representation of "Java"? What do you click on to "start java"? Is it Java Web Start? Is it the Control Panel icon? Is it the tray icon that pops up if you are unfortunate enough to run across a site using applets? I actually think this is a big problem.

The fact of the matter is that for users installing Java (or anything) is an annoyance, a detail required to enable the use of other applications, similar to the installation of a PDF viewer or a Flash viewer or even an operating system. Users would rather not think about implementation details like Windows, let alone Java. And I think that's okay, too, unless you want people to start thinking about it to improve market share.

(Of course to the programmer Java's "head" could be considered either the command line tools (esp java and javac) an IDE or perhaps even a server of some sort like Tomcat.)

Ironically it's working with GWT that's made me think about this topic from a few different angles. First, GWT is to JavaScript what Java is to native code, in that it has to play catchup with the native platforms in terms of features. And that's Java's story, even now. And that catch up will only occur if people really start using GWT (or Java). And that will only happen if it makes sense.

Java needs top-notch application programmers to write great end-user applications for at least one platform (IDEs don't count). Java needs a text editor that takes moments to start, not seconds. Java needs a better (smaller, faster) Office alternative.

Java needs someone to demonstrate the viability of the platform, and that viability is no-compromise performance combined with WORA combined with the potential for incredibly enhanced runtime security. Users have learned to fear locally installed software, for very good reasons. Java could position itself as the answer to this fear.

Another fierce position to take would be to position itself to the end user as Cygwin or even Steam positions itself: you can take your apps with you. Java could be a true platform in the sense of providing an entire ecosystem for people to interact with their applications (and data). Users understand that reinstalling their applications is a nightmare. The fact that ALL of their Java applications can be reinstalled at the click of a button (even cross-platform) would actually be quite an effective selling point. The fact that they can feel safe about trying new Java apps is the other huge selling point. Safety, convenience, privacy, performance - that sounds pretty good, eh? Oh, I should also mention that some users might like that Java is kinda open source.

The irony, of course, is that RIAs are currently moving to fulfill these unspoken consumer needs quite happily. RIAs generally offer safety and convenience, but no privacy and only "good enough" performance, so although Java has a tough row to hoe on the desktop, it's not impossible to get in there and win.

Sun needs to make this message clear, then show the truth of it by systematically replacing popular software with Java implementations, and being very open about the techniques that used to do it. A good IM client would be a great start. A good music player would be excellent. Simple utilities like text editors and photo viewers would also be good candidates for porting. Rather than clone Office, clone Google Docs. A good email client. An Outlook clone. If programmers could see some successes here, then they may be tempted to try for the more difficult targets.

No comments: