Embedded-system features
WonkaTM was designed from the start as a reliable, resource-aware VM that could be built into cheap consumer devices:``... a complete and correct implementation, readily portable to a wide range of devices, characterised by a high level of availability, usable in systems which have real-time requirements, and it must make efficient use of limited resources.
``Wonka should be the VM of choice for embedding Java in consumer products.''
(From the Project Goals document.)
Non-conservative garbage collection: all unreachable objects will be reclaimed within a small number of GC cycles.
Resource allocation: limits can be set to the amount of memory, number of threads, or processing time used by a ThreadGroup.
System class libraries can be statically linked into the executable, enabling diskless or ``net-booting'' systems to be built.
Persistent Object Store enables essential data to be saved on disk, flash, or battery-backed RAM without the need for a fully-fledged filesystem. The POS has its own garbage collection system to clean up persistent data which is no longer needed.
Internal data structures (and the filesystem, if used) are designed such that performance does not degrade over time.
Real-time-friendly features
Fully pre-emptive threading system with ``hard'' priorities. Mechanisms provided to prevent ``priority inversion''.
Garbage collector only needs to lock out Java threads for certain clearly-defined operations (e.g. scanning a thread's Java stack), and never locks out high-priority native threads.
RudolphTM: an AWT for Wonka
RudolphTM is not only a red-nosed reindeer, but also an implementation of the Java 1.1.8 AWT. RudolphTM works directly over a memory-mapped screen or framebuffer, without requiring an existing windowing system to be present. RudolphTM will also run in an X11 window, effectively treating the window as a bitmapped device. The pointing device is implemented as a driver with a simple API which allows for easy interfacing of touchscreens etc..
Rudolph's current look-and-feel is somewhat spartan, but it's actually quite easy to change, and we have a project lined up to make this even easier.
Because Rudolph is a ``module'' rather than a part of the
VM itself, it is perfectly possible to use another AWT,
so long as it uses only Java and JNI.