Compatibility

SquirrelJME aims to be compatible with most programs however there are situations and rare edge cases where there will be no compatibility. This is to make the implementation easier.

Flushable Interface

The interface Flushable does not exist in Java ME and as such it does not exist in SquirrelJME.

LCDUI Display Input

Only the first display (index zero) supports input events such as keyboard, buttons, mice, and touchscreen. Any secondary displays which are attached will not have events handled for them at all. This is to make it easier to implement.

Limited Network Interface Support

The Generic Connection Framework (GCF) has API to provide access to various system interfaces, WiFi devices, 3GPP/CDMA (Mobile data), and dial-up connections. Since supporting all of these are complicated, support for these across systems will be limited to an as needed basis.

Reader's lock Is null

Since SquirrelJME uses a reference counted garbage collector the Reader's lock object in the default constructor is set to null instead of this. This is so that readers do not remain in memory unable to be freed because objects still refer to them and such.

SUPER Is Always Set

In all clases the SUPER flag is assumed to be set, this flag just modifies the behavior of invokespecial. When it is not set then that instruction can invoke nearly every method directly (it was called before invokenonvirtual). However, the Java compiler since Java 1.1 always set the flag for classes it compiled. Since CLDC 1.0 was released well after Java 2 was and is defined as a Java 2 virtual machine all code written for J2ME should have classes where this flag is set. As such instead of supporting the logic to handle cases where it is not set, the flag will just be ignored and assumed to be set.

Supported Encodings

Only the following character encodings are supported:

Note that UTF codepoints above U+FFFF are not fully supported and are not available in Java ME. Surrogate pairs in UTF-16 will be encoded in UTF-8 as six bytes. Additionally, when decoding, if a sequence that is above U+FFFF is read then it will decode to the replacement character. This may cause a loss of or mutation of data when processing files.

See:

ScritchUI Graphics Serialization

All graphics operations in ScritchUI are serialized and any draw operations are hard forced to occur in the graphics drawing thread. Unlike traditional APIs for operating systems where this is intended to be done by the developer, SquirrelJME forces this paradigm to be used. This generally fixes and stabilizes software that performs locking and/or game logic in Canvas.paint() methods, or similar.

This allows software such as Gradius NEO on DoJa to run, and for the framerate of Ratchet and Clank on MIDP to be stable and not run absurdly fast.

Configuration/Platform Version Differences

SquirrelJME will auto-detect the version of the configuration and platform from the manifest or a set of other indicators. This is used to determine the version of said specific standard or device that software is made for. Without this, the subtle changes that occur due to breaking API updates will cause software to change behavior.

MEEP/MIDP Version Differences

DoJa Version Differences

Configuration Settings That May Be Used For Compatibility

These settings may be used for compatibility purposes if needed:

Compatibility Check IDs

Compatibility flags which violate Java ME standards and are very specific to single sets of devices and/or applications. These options should rarely, if ever, be used and are always disabled by default. Any use of these flags indicates a defect in the application you are using, it is recommended to contact the vendor of that application and request a fix.

New IDs are always incremental and not a bit-field, due to the large number of potential devices, applications, and flags.

SecurityManager

Since Java SE 17, SecurityManager has been deprecated and since Java SE 24 it has been permanently disabled. Considering that this is software userspace defined security that only works with well-behaved applications, SquirrelJME will only contain a minimal legacy interface on an as needed basis so that legacy applications still run. If you rely on a secure infrastructure, it is recommended to investigate a more secure environment setup such as signing software, encrypting memory, and writing secure code.