If you're reading this blog then there's a good chance you've heard Apple has deprecated their implementation of Java on the Mac. Contrary to the resulting outrage over the last few days, I don't find change to be a shocking surprise.
Ultimately Apple puts in the technology that will let them sell more computers. As a consumer company they support technology that runs consumer apps. The desktop Java community simply hasn't created the thousands of consumer apps that exist on the Mac or the iPhone. these are almost entirely Cocoa or straight C+ OpenGL apps.
We are to blame
I challenge you to come up with even a list of 100 consumer apps written in Java. Without significant desktop Java apps Apple simply has no incentive to continue funding their Java port. The truth is, desktop Java has been dying for years, and Apple has finally accepted it. And I say this as someone who's worked on desktop Java for nearly my entire professional career. Desktop Java is dying, and it is our fault.
There are a variety of reasons for Java's failure on the desktop; reasons ranging from Sun to IBM to Swing to Deployment bugs and many other causes. I won't rehash them here because the end result is the same: no significant consumer desktop Java apps after nearly 15 years. Apple simply made a pragmatic decision to no longer support a technology that costs them more than it brings in. No Steve Jobs conspiracy theories required.
Apple's message to developers is very simple: use web technologies or use Obj-C/Cocoa. That's how it is on the iPhone, iPad, and now on the Mac. While they will probably never bar you from installing your own JRE, by default the Mac is set up to run Cocoa and the web really really well, with nothing else needed. That's Apple's decision for their computers and all of our ranting won't change that. Honestly I'm surprised it didn't happen sooner.
Desktop Java has to earn it's place on the desktop. It's always been the case that a JRE may not be on a PC. Now there is the potential that this may be the case on Mac OS X (perhaps as soon as next summer). If we want this fixed, then we need to do it ourselves, as a community.
Where do we go from here?
If desktop Java is going to be relevant then we have to start making great desktop apps. We shouldn't look to Oracle, IBM, or Apple to make this happen. They've been supporting us for years with little direct revenue to show for it (the toolbar deal was the only thing that ever brought in money for desktop development). If we want desktop Java to be around for another 15 years, then it's up to the community to make it happen. Nut up or shut up!
My personal contribution to fixing desktop Java is by creating an new UI toolkit and graphics stack which drops the Swing/AWT legacy. This new toolkit, called Amino, has a modern fluent API, CSS style-able components, and is fully redistributable with a liberal license (BSD). When I first designed Amino I assumed we might one day be without a default JRE on Mac, so I built it to work with multiple backends. It should be possible to replace AWT with standard OpenGL or SDL without too much work. In theory it should be possible to run an Amino app on SoyLatte without too much work.
Making desktop Java relevant again is very possible but it's up to us, the desktop Java loving community, to make this happen. I'm looking for some volunteers to help me make direct OpenGL & SDL work on SoyLatte without X11. With that done it will be possible to bundle apps with a JRE. Never again will we have to depend on anyone else's software installation to make our apps work. They are our apps, so it's up to us to make them work. Without a community developing such technology, then desktop Java is truly dead.
Posted November 3rd, 2010