(Just to clarify: When 'Java' is mentioned in any of my comentary, I mean 'Java - the Platform', consisting of JVM, Language and Libraries. I'll try to use 'Java - the language' when I'm talking about any language features, but I think this will be pretty rare. 'JVM' and 'J2ME'/'J2SE' will be used for the VM and library respectively. All Java related terms and abbrevation are trademarks of Sun MicroSystems.)
Over the years since I've been following the developments in the Java embedded/real-time space (ca. since 1999) things have been constantly changing, and it certainly was a trying experience in the 'user space' of RT-Java. I was charged with architecting a control framework for semiconductor manufacturing equipment based on Java technology in 2000, and due to the constant change, it wasn't always easy to make management-digestable suggestions were to go next.
Initialy a NIST project
delivered the requirements for a Java realtime specification
. Around this time, the community got split into two camps
- The (now defunct) J-Consortium lead by HP used an approach to tighten the existing Java specification without adding any extra interfaces and libraries. The argument was that if the specification (JVM and libraries) is implemented to real-time principles (i.e. determinitstic GC, interuptable I/O), there is no need for any extra modifications.
- The RTJS experts group lead by IBM under the newly formed Sun comunity process (rumor has it that the IBM/RTSJ group caused to Sun to accelerate the creation of the JCP process: the 'Real-Time Specification for Java' is numbered 'JSR00001'), the approach here was a much more elaborate API and JVM modifications true to the core of real-time computing principles and theory.
Although the first group didn't enjoy the support of Sun, they had one distinguishing advantage: There was already an existing implementation in the form of the Newmonics (now Aonix
) PERC VM
. This was a clean room implementation of the Java specification with a deterministic garbage collector based on research of the Newmonics
founder and chief architect Kelvin Nielsen
In contrast, the RTSJ group had to create the specification (which was finished in 2002), the first reference implementation (which wasn't really useable, sorry) came out in 2003, and second release in 2004. The full suite
wasn't released until 2005, but with severe requirements
Having said this, it is not meant to diminish the work of the experts group: They were basically tasked to bring light into a dark spot of computing, then full with legends and woodoo.
As it turns out, the two specs are not exclusive to each other. The German company aicas
released a implementation
in 2003 which fulfills the RTSJ specification and has a highly deterministic garbage collector. More and more JVM's start implementing the RTSJ *and* have RT capable GC.
Starting in 2004, the mainstream software and control publications noticed that there was something new coming into the embedded/control market, and more and more publications touted it 'the thing to come in 2005', including December, 2004 issue of the RTC Magazine and analyst Chris Lanfear
Its not (quite) here yet. Probably because control applications take longer to implement due to their typical higher shelf-live and larger requirements set than their desktop or gaming counterparts. And probably because real-time developers tend to be as conservative as cats. But it is definitely out there...