# J2ME Programming/SymbianOS and J2ME
## Introduction

This not a complete history of SymbianOS but in fact a summary of SymbianOS so that we as J2ME developers can determine what optional APIs we have access to by Operating System version and devices series version within the SymbianOS ecological infrastructure.
There are two main device platforms that are deployed on top of SymbianOS. Nokia created Series60 and licensed it to others like Samsung. UIQ(a Pen Based UI for Symbian) is a joint effort between Sony-Ericsson, Motorola and Symbian Ltd.

## Base Set of MIDP, SymbianOS

A brief footnote before we begin on the J2ME Platform. Before the J2ME Platform SymbianOS came with two other Java platforms, embedded java on SymbianOS 5 and the personal java and javaphone combination on SymbianOS 6. Thus, PersonalJava and JavaPhone before the Personal Profile will be mentioned here to be accurate of what OS versions have that combination. Note: Although the underlying OS does not limit Heap size, persistent storage, and etc on the later versions of Symbian the JSRs do limit the jar, jad, and persistent storage sizes in the form of JSR 185(JTWI).

### SymbianOS 6.x

In 2002 MIDP 1.0 was back ported to SymbianOS 6 versions. The SymbianOS versions that MIDP 1.0 was back ported to are SymbianOS 6.0 and SymbianOS 6.1("Standard Java". Symbian On Java.)
Thus, we only have basic MIDP 1.0 on SymbianOS 6.0 and SymbianOS 6.1 on devices 2002 and onward.
* MIDP
** MIDP 1.0 except pausedApp is never called contrary to the MIDP 1.0 specification.
** CLDC 1.0
** Sun's KVM
* Personal Java(pre Personal Profile)
** Modified Personal Java 3.0.x(PesonalJava Application Environment 1.1.1a)
** JDVMI for debug support over TCP/IP connection
* JavaPhone 1.0
** JavaPhone 1.0 APIs
** Personal Java optional interfaces for serial communications, and secure socket communications (HTTPS is supported, javax.net.ssl is not implemented).
** Java Telephony API(JTAPI)
** Java Telephony Mobile

### SymbianOS 7.0

Has the basic MIDP 1.0 implementation("SymbOS7.x". Symbian OS Version 7.0 functional description.)
* MIDP
** MIDP 1.0 except pausedApp is never called contrary to the MIDP 1.0 specification.
** CLDC 1.0
** Heap size, code size, and persistent storage size are unconstrained
** Over-The-Air provisioning implemented
** GCF including sockets implemented
** KVM VM
* Personal Java(pre Personal Profile)
** Modified Personal Java 3.0.x(PesonalJava Application Environment 1.1.1a)
** JDVMI for debug support over TCP/IP connection
* JavaPhone 1.0
** JavaPhone 1.0 APIs
** Personal Java optional interfaces for serial communications, and secure socket communications (HTTPS is supported, javax.net.ssl is not implemented).
** Java Telephony API(JTAPI)
** Java Telephony Mobile

### SymbianOS 7.0s

In this version of SymbianOS 7, MIDP 2.0 was introduced("Symbos-v7s". Symbian OS Version 7.0s functional description. {{cite web}}: line feed character in |work= at position 24 (help)) This MIDP 2.0 implementation includes:
* MIDP
** Over-The-Air provisioning MIDP 2.0 implementation
** Heap size, code size, and persistent storage size unconstrained
** GCF implementation includes sockets, server sockets, datagram sockets, secure sockets, HTTPS and HTTP
** WMA is implemented
** Bluetooth is implemented excluding Push and the OBEX profile
** CLDC1.0 implementation is supported
** Sun's CLDC HI VM 1.0
There are two configuration sfor this SymbianOS 7.0s version, smartphones and communicators. The communicator version does include both MIDP 2.0 described above and this PersonalJava configuration:
* Personal Java(pre Personal Profile)
** Modified Personal Java 3.0.x(PesonalJava Application Environment 1.1.1a)
** JDVMI for debug support over TCP/IP connection
* JavaPhone 1.0
** JavaPhone 1.0 APIs
** Personal Java optional interfaces for serial communications, and secure socket communications (HTTPS is supported, javax.net.ssl is not implemented).
** Java Telephony API(JTAPI)
** Java Telephony Mobile

### SymbianOS 8.0

This is the first MIDP 2.0 implementation on SymbianOS with full JTWI compliance("Symbos-v8x". Symbian OS Version 8.0 functional description.)
* OTA MIDP 2.0 implementation
* Full JTWI implementation of the new securtiy model allowing signed MIDlets
* Heap size, code size, and persistent storage unconstrained
* Full GCF support
* WMA implemented
* Bluetooth excluding OBEX profile implemented
* CLDC1.1 implementation
* MultiMedia JSR 135
* 3D Graphics JSR 184
* File/PIM GCF JSR 75
* Sun's CLDC HI 1.1 Vm with subset of JNI

### SymbianOS 8.1

Implements MIDP 2.0 compliant with JTWI("Symbos-v8.1". Symbian OS Version 8.1 functional description.)
* OTA MIDP 2.0 implementation
* MIDP 2.0
* CLDC 1.1
* Heap size, code size, and persistent storage not constrained
* GCF implementation including all socket implementations
* PIM/FIle GCF JSR 75
* MMedia JSR 135
* 3D Graphics JSR 184
* Bluetooth implemented excluding OBEX profile
* WMA
* Sun's CLDC HI VM 1.0 with JNI subset

### SymbianOS 9.1

Implements MIDP 2.0 and JTWI("Symbos-v91". Symbian OS Version 9.1 functional description.)
* MIDP 2.0
* CLDC 1.1
* WMA
* MMedia JSR 135
* 3D graphics JSR1 84
* Bluetooth implemented excluding OBEX profile
* JTWI security model
* Heap size, code size, and persistent storage size are unconstrained
* Sun's CLDC HI VM 1.0 with JNI subset

## Other SymbianOS Flavors
### Other Nokia Series

* Series80
** Device Platform 2.0
*** MIDP 2.0/CLDC 1.0 from underlying SymbianOS 7.0s, specifically the communicator SymbianOS 7.0s configuration
*** CDC and Personal Profile implemented with IBM's J9 VM
* Series90
** Device Platform 2.0
*** MIDP2.0 CLDC1.1 from underlying SymbianOS 8.0
*** Legacy closed source Nokia UI APi in packages com.nokia.mid.ui and com.nokia.mid.sound

### Series60

* Device Platform 1.0
** Based on SymbianOS 6.1 with MIDP 1.0 and CLDC 1.0 and legacy Nokia UI APIs in packages com.nokia.mid.ui and com.nokia.mid.sound.
** In Nokia UI API backlight is not supported
* Device Platform 2.0
** Feature Pack 1.0cs
*** Based on SymbianOS 7.0s providing MIDP 2.0 and CLDC 1.0
*** Supports MMAPI JSR 135
*** Supports the other JSRs from SymbianOS 7.0s
** Feature Pack 2.0
*** Based on SymbianOS 8.0, actual kernel version is SymbianOS 8.0b with MIDP 2.0 and CLDC 1.1
*** All JSRs with SymbianOS 8.0 are supported
** Feature Pack 3.0
*** Based on SymbianOS 8.1 providing MIDP 2.0 and CLDC 1.1
*** Supports all JSRs from SymbianOS 8.1

### UIQ

* UIQ 2.0
** Based on SymbianOS 7.0 and provides MIDP 1.0 and CLDC 1.0
** Supports the JSRs from SymbianOS 7.0
* UIQ 2.1
** Based on SymbianOS 7.0s and provides MIDP 2.0 and CLDC 1.0
** Supports the JSRs from SymbianOS 7.0s

## Conclusion

By using the information you can determine not only what versions of MIDP and CLDC are on the device but also what optional apis denoted by their JSR are accessible on the SymbianOS powered devices that you may be targeting your application development.

## See Also

* Wikibooks
** J2ME Programming
** Java Programming

## References

* "Standard Java". Symbian On Java.
* "SymbOS7.x". Symbian OS Version 7.0 functional description.
* "Symbos-v7s". Symbian OS Version 7.0s functional description.
* "Symbos-v8x". Symbian OS Version 8.0 functional description.
* "Symbos-v8.1". Symbian OS Version 8.1 functional description.
* "Symbos-v91". Symbian OS Version 9.1 functional description.

## Trademark Notices

J2ME, Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All other Trademarks are property of their respective owners.