Java and Embedded devices

Java has such promise for use in embedded devices: Just download the JVM on the client device and access the embedded device from whatever client OS or platform you wish. Unfortunately the truth is rather less than the promise.
Unfortunately device manufacturers are stuck writing for the JVMs that exist (at best envisaged) at the time the device’s firmware is constructed and so are stuck with only being able to claim usability on those JVMs. Couple this with finite space and new models coming out and updates soon stop happening leaving a device that only works with some earlier version of Java.

This situation, although unfortunate, was tolerable as Sun and later Oracle allowed the installation of multiple JVMs and selecting which JVM was to be used. However, this situation has changed as after a number of security flaws were found in Java various software creators
1 felt that old versions of Java were just too dangerous to allow to continue and took aggressive action to stop those versions.

So now where backward compatibility fails legacy devices using Java are effectively orphaned.

So what can we learn from this situation:
  • Software paternalism is bad - It is fine if your product does not want to allow people to use an old version of a plugin - but please don’t delete it or touch what the code talks to - these actions are actually vandalism and cause users who have no choice but to use what you advise against great pain.
  • Write with an eye to the future - If you are writing Java make it as simple and feature-dependent less as you can - it may have to run on a latter JVM

1 Firefox and Apple in particular