Skip to content
— CH. 1 · INTRODUCTION —

Phoneme

~3 min read · Ch. 1 of 5
5 sections
  • PhoneME is Sun Microsystems' reference implementation of the Java virtual machine and associated libraries for Java ME, published with full source code under the GNU General Public License. At a time when mobile handsets were becoming programmable platforms, getting Java to run reliably on memory-constrained hardware was far from automatic. Sun did not keep that implementation proprietary. It opened the source to the world. That decision raises questions worth tracing: what foundational specifications did phoneME cover, what optional capabilities did it layer on top, and which hardware platforms could actually run it?

  • Connected Limited Device Configuration, known as CLDC, defines the stripped-down Java virtual machine and core class library sized for devices with limited memory and processing power. Mobile Information Device Profile, known as MIDP, builds on top of CLDC and specifies the user interface primitives, networking layer, and application lifecycle rules that a mobile Java program actually calls at runtime. PhoneME delivers implementations of both. Together, CLDC and MIDP form the foundational contract that any Java ME device was expected to honor. Any hardware vendor or software developer reading the phoneME source could see exactly how Sun interpreted that contract, line by line.

  • JSR 75, the PDA Optional Packages for the J2ME Platform, extended the stack with access to local files and personal information. JSR 82 defined the Java APIs for Bluetooth, enabling wireless device discovery and data exchange from application code. JSRs 120 and 205 together delivered the Wireless Messaging API and its second version, covering SMS and MMS messaging from Java. JSR 135 specified the Java Mobile Media API for audio and video playback on constrained hardware. Web services on small devices arrived through JSR 172, while JSR 177 addressed the Security and Trust Services API. JSR 179 is the Location API for Java ME, and JSR 180 implemented Session Initiation Protocol support for voice and video signaling. JSR 211, the Content Handler API, specified how a device routes file types to registered applications. JSR 226 delivered Scalable 2D Vector Graphics for resolution-independent drawing. JSR 229 covered the Payment API for mobile commerce. JSR 238 provided the Mobile Internationalization API for locale-aware formatting of dates, numbers, and text. JSR 239 added Java Binding for OpenGL ES, bringing hardware-accelerated 3D graphics within reach of a Java ME application. PhoneME provides complete or partial implementations across all thirteen of these optional packages.

  • Sun specified three target environments for phoneME: Linux running on ARM processors, Linux running on x86 processors, and Windows running on i386 architecture. The Linux/ARM pairing is the most directly relevant to real mobile handsets, since ARM was the dominant processor family in phones at the time. Linux/x86 and Windows/i386 give developers a path to build and test Java ME applications on ordinary desktop computers before moving to embedded hardware. The explicit i386 designation for the Windows target marks phoneME as a product of the 32-bit PC era, before 64-bit desktop computing became the norm.

  • Sun chose the GNU General Public License for phoneME rather than a permissive license or a proprietary runtime agreement. The GPL requires that anyone who modifies the code and distributes a product based on it must also publish those modifications under the same terms. For a device manufacturer who wanted to ship a customized Java ME runtime, that requirement created real obligations. A private, internally modified phoneME could not be kept secret if it shipped in a product. That structure was a deliberate departure from how most embedded Java runtimes reached manufacturers. By tying the source release to the GPL, Sun made phoneME a shared technical baseline where improvements would circulate rather than accumulate behind closed doors.

Common questions

What is phoneME?

PhoneME is Sun Microsystems' reference implementation of the Java virtual machine and associated libraries for Java ME, released with full source code under the GNU General Public License.

What is the difference between CLDC and MIDP in phoneME?

CLDC (Connected Limited Device Configuration) defines the stripped-down Java virtual machine and core libraries for constrained hardware. MIDP (Mobile Information Device Profile) builds on CLDC and adds the user interface, networking, and application lifecycle APIs that mobile Java programs use directly.

How many optional JSR packages does phoneME implement?

PhoneME provides complete or partial implementations of thirteen optional Java Specification Request packages, ranging from Bluetooth (JSR 82) and wireless messaging (JSR 120, 205) to location services (JSR 179), payment (JSR 229), and OpenGL ES graphics (JSR 239).

Which hardware platforms does phoneME support?

PhoneME supports three platform combinations: Linux on ARM processors, Linux on x86 processors, and Windows on i386 processors.

Why was phoneME released under the GPL?

By choosing the GNU General Public License, Sun ensured that anyone who modified phoneME and shipped a product based on it would be required to publish those modifications, making the implementation a shared resource rather than a privately customized proprietary runtime.