J2ME on the Phone Networks

Fascinating article on the limitations on running J2ME apps on the major US cell phone carriers. The bottom line:

  • Verizon makes J2ME impossible
  • T-Mobile makes standalone J2ME easy, but requires a signature from T-Mobile or a more expensive plan if you want to write a networked app
  • AT&T is the most open: apps that wish to use HTTP can use it. (Lots of other apps that also interact with handset data, like the address book, must be signed)
  • Sprint is similar to AT&T, though rumor has it that getting your app signed may be easier
  • Nextel (which is owned by Sprint, but is a different network) requires that the app either be on the Nextel portal, or that you download it through a cable.

Overall, this means that experimentation with the really interesting J2ME apps that are likely to change the world is difficult to do outside of companies that have marketing relationships with the phone companies. This approach to a closed platform seems likely to cramp creativity. Why not turn the platform loose, and let millions of apps develop, ala Facebook? (There are serious concerns here about security: the first phone virus to wipe out a carrier's network is going to be intriguing. But: it seems important that we think carefully about how to provide sufficient security without sterilizing the platform.)

John

Yes -- but that's only part of it

I feel there are two things hindering the mobile space. For one, as you mention the cellular carriers seem to want to control (or more specifically, sell) all the bits that execute on phones serviced by their network.

The second is lack of standardization. For instance, if you write an application in JME, that covers a subset of devices out there, but unlike JSE there are not JVMs available for all the common cell phone platforms. For instance, Sun does not provide a JVM for the increasingly popular Windows Mobile-based smartphones. IBM used to provide their J9 JVM but are dropping support for it. Beyond that I think there are a few open source efforts but I haven't yet come across any that are truly satisfactory. And, even if you get your hands on JME JVM for all the types of devices you want to target, there are 5 distinct variants (profiles), so you can't count on your app necessarily being able to run on even a majority of devices.

You know, the interesting thing about this that seems somewhat counter-intuitive is that in the smartphone space, you actually have the ability to write your own .NET applications, but JME is locked out. We have a mobile JME application we're rewriting to .NET due to the lack of vendor support and a seeming lack of innovation on the platform -- while other forms of Java have advanced, there hasn't been a lot of change in JME to keep up. I guess there is the new JavaFX Mobile, but that doesn't seem quite ready for primetime yet either.

Interesting

Interesting! I wonder why .NET apps are not locked out, but JME ones are? Is there a good technical reason?

John

I think it's mainly the type

I think it's mainly the type of device. The devices that ship with Java-based technology tend to be the lower-end cell phones. The Windows Mobile phones share the higher-end space, along with the Blackberry and the iPhone (which has its own set of gotchas).

As to why the .NET apps are not locked out, I can't think of a good technical reason -- maybe it's because Windows Mobile started off as a PDA platform instead of a cell phone platform, so the OS was designed to be more flexible and give the user more control from the start so carriers couldn't take away something that was already there. Or maybe becaue the Windows Mobile hardware tends to have standardized USB ports, so people have other options than just downloading apps through the cell network. I don't know. I do know that Microsoft goes to great lengths to make it easier for individuals who are not professional software engineers.

It comes down to this: if you want to develop an app that runs on even most devies, you will need to do create probably at least four if not five versions of it:
- JME, Connected Limited Device Configuration - Lower-end Java devices
- JME, Connected Device Configuration, maybe with Personal Profile - Higher-end Java devices, like the Blackberrys
- .NET Compact - All Windows Mobile platforms - smartphones, PDA phones, etc.
- Objective C or C++ for the iPhone...I don't think it does Java and I'm sure it doesn't do .NET.

And we haven't even discussed the mobile web space! What a mess!