OreKit for embedding into hardware


As a practicing engineer I have always been hesitant/concerned about using object-oriented languages for embedded code. The concerns center around the non-deterministic nature of code that performs dynamic memory allocation and reclamation. I “grew up” thinking that embedded code has to be deterministic with a priori known memory requirements.

Now, I know Java is embedded into consumer items such as phones and tablets. Are any OreKit users familiar with Java embedded in spaceflight hardware? If so, do you share my concerns or how did you get over them?

Or, having been born slightly before the Sputnik launch, are my concerns that of a dinosaur?


I would say that embedding user application in phones (like Stavor :wink:)
does not have the same constraints as real time software in planes, cars,
medical equipment or spacecrafts.

I have heard several times in the last few years about real time Java. The
JSR 282 for Real-time specification for Java
is active since years. It seems a new draft has been release in June 2018 and that
the specification leads belong to Aicas, which develops the JamaicaVM
for running realtime java programs. I don’t know if this is used in space.


@wgrossman This is an excellent topic that I’ve pondered for a while. I am an aerospace engineer but I have been indoctrinated by my software engineer colleagues that embedded code has to be deterministic, within certain execution time “jitter” requirements. If I recall, the automatic memory management/garbage collection in Java has been one of the main hurdles in achieving real-time performance. Aicas claims hard real-time performance of their JamaicaVM with sub microsecond jitter, depending on the system. The other option is PTC PERC Ultra which claims jitter better than 1ms. Note that both companies claim deterministic garbage collection which might have be the crux of real-time determinism with Java.

Assuming that one of the two JavaVMs above satisfies ones requirements for real-time the question of using Java and Orekit on-board spacecraft brings a few more systems engineering questions such as

  1. Compatibility with on-board computers and operating systems that can run on them. JamaicaVM seems to cover a wide range so there’s hope.

  2. Budget/schedule risk of embedding Java with legacy on-board SW within a program/organization. What are the benefits of embedding real-time Java at an established space company, How about at a startup?

  3. Path to formal certification - again, JamaicaVM claims to have a DO-178C certifiable tool chain.

I am a few years your junior but I have a startup without legacy systems :grinning: and I am seriously considering embedding Java in some non-critical subsystems to begin with and as the opportunity arises. Let’s talk some more about this if you are interested.