Leopard released last week and I blogged my feelings then about the lack of Java 6. The Java community has seen a lot of moaning and gnashing of teeth over the weekend and the anti-Java community has had a field day pointing and laughing at our distress.
I want to use Java 6 (and future releases) because I’m a Java developer and I like Mac+OS X as a development platform. But, Apple doesn’t really give a shit what I want. They are a company, they have a finite amount of engineering resources, and they must choose (like every company) how to best invest those resources to make more money for shareholders like me.
Apple’s target market is not developers like me or probably you. Apple is a consumer electronics company and their market is really fine people like my wife, my parents, etc who have no idea and no interest what language their applications are written in. The reason people like Apple (the reason I like Apple) is because stuff looks pretty and it works1.
If we look at Java (or perhaps even more importantly the JVM), it has been undeniably successful as a server environment and I see no reason to believe that that’s not going to continue for a long, long time. It works, it’s solid, it’s fast, it’s manageable, multiple vendors agree on a strong spec and support it, libraries exist for virtually anything you can imagine, etc. But hey, the average consumer is NEVER going to run a “server” app. These worlds have virtually no intersection.
Average consumers run desktop apps and web apps. If you look around at the desktop apps you use as a non-developer on a daily basis, you will notice that approximately 0.0% are built in Java. I have several I use every day, but they are all developer-related. If you look at web apps, I suspect there aren’t too many Java apps you use every day, but I think the chances are much higher that you are using Java on the web than on the desktop right now.
Sun is currently pushing hard to make Java relevant in both these worlds. Their upcoming work with Java Kernel and the Consumer Edition of the JRE are spot on. They are very actively addressing the biggest issues with Java on the web and I think that kicks ass. It breaks down a lot of objections developers have against writing a web app in Java and I think that can only help increase the number of Java web apps.
It’s clear that Sun also wants to make a push in the desktop world. I see those efforts as a little less focused, but still promising. The Java FX stuff is one idea towards making development easier and the Java 7 JSRs for the Swing App Framework (296), Beans Binding (295), and bean validation (303), as well as possible property/event support in the language are all looking at different micro-aspects of Swing development. Swing is a little heavy-weight and annoying but for all that I think it’s a very good cross-platform GUI framework and it’s certainly possible to write very nice consumer-friendly apps in Swing.
So, given my entirely self-motivated interest, I think it’s worth thinking about what could be done to make Java a first-class citizen in the Apple world again. Clearly, developers wanting to deploy web and desktop apps in Java on Mac would make a difference. If a sizable chunk of consumers were regularly using Java apps on Macs, it would get some love because people like Macs because stuff works. If apps they want to use don’t work, Apple will work to fix that.
I think we have to look to Sun to push the issue. That may mean contributing resources or sponsoring or advocating for an open-source Java port to Mac. But going back to the “looks pretty and works” aspect, seems like the major value Apple adds is making Swing/AWT/SWT play nice with Aqua and I suspect that’s not something it’s easy to help with unless you’re inside Apple. (Am I wrong?) Another aspect is that no one has more to lose in this than Sun aka JAVA. Clearly THEY are betting on Java.
So what can we (the developers) do? Certainly making our voices known won’t hurt. We are a small but vocal minority. We can write apps in Java for the web or desktop. We can work on tools that allow us to install and use Java apps as easily as we can “native” apps. Seems like a lot of the Java apps out there run fine but are a mess to install and seem awkwardly non-native around the edges. We need something (or maybe just more people need to know about what already exists) that helps make a Java app into something nicely installable on the Mac.
Java will continue to limp along on Apple for the forseeable future. But it’s not going to thrive until there is a change of heart at Apple, and I don’t really believe that will happen until it matters to the average consumer. Unfortunately, that may mean that I can’t use a Mac at work anymore, which would be a shame.
1 Admittedly, not everything works perfectly. I’ve got my complaints about Macs and OS X. But compared to most home PCs I’ve worked on, they are light-years apart. I’ve spent years doing tech support for my family and friends that use PCs and working on these home PC boxes (the Win 95s, 98s, etc of the world) makes me want to take my own life. I’ve had fewer problems with work PCs, but then they are typically a) new, b) loaded with RAM and CPU, and c) full of automatic updates, anti-virus apps, firewalls, and the best protection IT can buy and d) come with a tech support team.
2 Apple just released their Java on Leopard Release Notes which clearly show that they are fixing important bugs and adding 64-bit support, which is a big deal. BTW, the link requires Apple Developer Connection registration.