One of my first slides in the J2ME and Web Services presentation I'm giving on Monday at O'Reilly's Emerging Technical conference is about accepting the limitations of J2ME- specifically the MIDP profile. I've written about this before. Basically, you have to just accept that MIDP is not full-blown Java and not rail against the fact that generally you don't have access to the hardware. Some phones incorporate some JSRs like the Media or Bluetooth APIs which allow access to those specific functions (though always in a limited way - the 6600 for example can't record voice and the Bluetooth doesn't support OBEX). But in general, if you want to program for Mobile Java in its current form, you just have to accept its shortcomings. After you get over that fact, you can still do some cool things - maybe not all the cool things that you first envisioned when thinking about Java on your mobile, but still quite a bit.
Another nine months or so have passed since I wrote that and it's time to think about Personal Profile again. This is another version of J2ME which is more of a subset of J2SE than a whole different version of the language and APIs like MIDP is. The reason this is coming up again is my post on the smart phone market from yesterdy got some pushback about my contention that programmers want J2SE on their phones. Specifically, Michael Yuan (author of the wonderful Enterprise J2ME book) had this to say this morning:
... as the J2SE grow[s] bigger and bigger, it will always be tailored to desktops not smartphones. That why even MS cannot run the full .NET framework on PPC or SP. We will always need some sort of J2ME. The current MIDP is really for low-end smartphones (e.g., the Nokia S40).
That makes perfect sense, I agree completely. I got ahead of myself. What we really need is simply the Personal Profile (PP) on smart phones, not full-on J2SE. What I'm specifically thinking about is competition against .Net Compact, and as Michael said, PP is the real peer of Microsoft's mobile technologies, not J2SE.
Now the cool thing is that Symbian has ready-made support for Personal Profile right now. This is important to note, as I bemoaned Symbian's cutting support for PP in v7.0s last year, but was pleasantly surprised later when I saw that they included it back in as an a-la-carte option for manufacturers. Now, what we need is support for PP actually *in* the smart phones out there - specifically the Series 60 phones, as those are the sweet spot for smart phones, not PDA-like devices like the P900.
In case you go off to look at the JSR-62 Personal Profile page and are royally confused by J2MEs bewildering number of profiles and TLAs, here's a quick explanation from the JavaDocs on how the Personal Profile relates to the other Java APIs:
Personal Profile 1.0 is based upon J2ME Foundation Profile (JSR-46), version 1.0. Specifically, Personal Profile 1.0 includes Foundation Profile 1.0. It is also a superset of the J2ME Personal Basis Profile (JSR-129), version 1.0. With respect to APIs in the java.* packages, it is a subset of the Java 2 Platform, Standard Edition (J2SE), version 1.3.1. Applications written to these APIs in Personal Profile 1.0 are therefore upward-compatible to J2SE 1.3.1.
You can see that if you're looking to use your knowledge of J2SE and program for mobile devices, Personal Profile is the way to go. Obviously, it's going to be too heavy to run on most mobile phones right now, but that's okay. What I'm talking about is smart phones.
So here's the million dollar idea: A J2ME Personal Profile Plug-in. One that could run on *both* Symbian devices such as the Series 60 and UIQ phones and on Windows Mobile 2003 phones. Taking a page out of Microsoft's playbook, if corporate decision makers had the choice of developing for .Net Compact which ran only on Microsoft phones or developing for PP which ran on *all* smart phones including Microsoft's, then they would obviously opt for the more open development platform: sucking the air supply out of .Net Compact development. It's a simple plan that would work.
Personal Profile is really the sweet spot for corporate smart phone development. It's a true subset of J2SE (thus taking advantage of skills and code which already exists), it allows access to the low-level APIs on the phone both through JSRs and JNI (so you can get access to things like the calendar and addressbook if you need it), it uses the same development tools as J2SE and finally it doesn't trap the corporation into using only a specific phone or manufacturer, since it could conceivably run everywhere. A PP Plug-in would make all this possible *today*.
I was all excited last month to hear about Perl then Python running on Nokia smart phones because of the access it would give to the lower level hardware without me having to learn the intracacies of C++ and the SymbianOS API. But then as Erik reminded me: I'm not a Perl or Python programmer. :-) What I *really* want is a more powerful version Java, i.e. Personal Profile.
This needs to turn into a movement. We need to get as many people on board and send an open letter to Sun's management convincing them to dedicate resources to this project. We developers in the trenches of mobile development need the firepower that a PP Plug-in would give us in the upcoming battle against Microsoft on smart phones. There are 10s of millions of us J2SE and J2EE programmers out there. Let us have the ammunition we need to crush .Net Compact out of existence! MIDPs time was over almost before it was started. The battle is nigh, and into the breach we go. Sun needs to give us the power to crush the invading black hoards!! (Okay, enough of that...)
Okay, so who's with me on this? Where do we start? Which big names can we tap to get Sun's attention? Who at Sun is the right decision maker to convince this is a priority? What about Nokia? They spent $21 million on their purchase of Eizel last year and created a whole enterprise division in an attempt to get a foothold in the corporate market and are making all that noise about Perl and Python. What they really need to do is cut through the red-tape with Sun and Symbian and get a PP implementation for their S60 devices out there. Who do we talk to to get them on board? What do we do to get Symbian to release PP as a separate .SIS install?
If you have any thoughts on the matter - technical or political, I'd love to hear it.