Apple deprecates Java on Mac OS X

Apple’s recently released Java for Mac OS X Update 3 includes the following information in the developer release notes:

As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated.

This means that the Apple-produced runtime will not be maintained at the same level, and may be removed from future versions of Mac OS X. The Java runtime shipping in Mac OS X 10.6 Snow Leopard, and Mac OS X 10.5 Leopard, will continue to be supported and maintained through the standard support cycles of those products.

So, either Steve’s had a chat with Larry and Oracle’s going to be doing the Java build for Apple, or Apple isn’t going to have Java apps running on Mac OS X, which is going to add to the pain for educational institutions, and developers who want to write cross platform code more easily (although these days many would argue that this is possible with Javascript and HTML5 no doubt). No doubt it’s also that Java apps don’t look and feel so much like Mac Apps, which seems to be one of Steve’s reasons for ditching Flash.

OpenSolaris 2008.11 includes “Time Slider”

Interestingly the latest version of OpenSolaris (2008.11) includes a feature called “Time Slider”, which allows you to drag a slider to get to an older version of the file system state. I’m not sure if this leverages ZFS’s features or if it’s just hard-linked. Comments on the Javalobby site by Roman Strobl indicate:

Btw I believe what we have in OpenSolaris is better than time machine because a) you don’t need to use an external disk, b) the snapshots are immediate and don’t consume extra space other than differences from your current disk contents c) you don’t have to activate the backups, they happen automatically. So you also get more granular access to history. This is the first version of the feature so we plan to improve it in the next release.

Sun xVM VirtualBox 1.6 available for Mac OS X

Sun’s open source virtualization package xVM VirtualBox is out of beta for Mac OS X and available for download. Note that it can’t currently host Mac OS X (aside from the licensing issues that only allow you to virtualize Mac OS X Server). According to ZDNet Sun sells a commercial version with USB support and an RDP server.
If you download it and can’t open the archive you may need to remove the ‘.bz2’ from the end of the filename.

Java Update 1 kills QuickTime for Java

Apple has released (via Software Update) “Java for Mac OS X 10.5 Update 1”, which installs Java 1.6.0_05 (although it does not make it the default version of Java for the machine.

bash-3.2$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java -version
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13-120)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_05-b13-52, mixed mode)

The software update is installed only on 64-bit capable Macs. To switch it to the default Java install you need to use the /Applications/Utilities/Java Preferences application (which states when you select it that “Java SE 6 is only available for Java applets in 64-bit capable browsers. J2SE 5.0 will be used in 32-bit-only browsers, including Safari”)

Discussions indicate that compiled JNI libraries don’t look like they currently work, and neither do QuickTime for Java applications:
/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java quicktime.QTSession
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(EventQueue.java:997)
at quicktime.QTSession.(QTSession.java:92)
Caused by: java.lang.UnsatisfiedLinkError: /System/Library/Java/Extensions/libQTJNative.jnilib:
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1822)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1715)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at quicktime.QTSession$1.run(QTSession.java:94)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:300)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:210)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:195)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:187)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "main" java.lang.NoSuchMethodError: main

This is not surprising given that QuickTime for Java is based on 32-bit Carbon libraries, and has been effectively in “maintenance mode” for a while. Unfortunately someone manages to get the JNI (or JNA?) code working it’s going to be difficult to work around the problem using QTKit.

In the meantime, QuickTime for Java still muddles along in Java 5. Eclipse Ganymede also seems to launch ok, but I haven’t done anything extensive with it.