Requiem for a platform
I got Nokia 216 recently. Just for experiments. Very nice phone, very durable and fast. And since it’s based on MT6260 (and not the later cut-off MT6260A and MT6261), it even supports J2ME.
Well, J2ME (don’t tell me it’s called JavaME, it will always remain J2ME for me) is quite slow there but it’s fully supported. The real problem is… Development tools aren’t.
Yep, planned retirement of J2ME happened long ago. And now the official development tools won’t run on modern Macs or Linuxes (I don’t care about Faildows though), at least they won’t work the expected way. That had lead me to a question: what’s the big deal? Java is Java, why such obstacles?
And it turned out that there were almost none. I extracted all the class libraries from the non-working official SDK package and started experimenting. With plain Bash and javac - I hate all those Ants, Mavens and Gradles TBH. I have enough of them at work.
And it turned out to be very simple task. The tricky part was to selectively import only the necessary MIDP and CLDC libraries and non-selectively import everything else. Also, we need to target Java 3. Yep, you read it right. Three. And it still works for OpenJDK 8 despite showing a deprecation warning. But that’s fine.
After primary testing I converted my Bash script to Makefile (for GNU Make) and here’s what I have come up with: ReloadME. Yep, just a plain old ZIP archive - pushing everything to GitLab or GitHub is unnecessary. It consists of all known standard J2ME classlibs, a makefile and a comprehensive instruction README. In a nutshell - move the source to
src, create a manifest and run
make. Just like that.
Classlib redistribution rights? I don’t care. If a vendor abandons support, community continues it. No exceptions. And no one from the community should be blamed for that because some phones with J2ME support are still sold in 2019. And events around 8110 4G have already shown that community a real force that can turn a requiem for a platform into a requiem for corporate greed.
Time to do the same for JavaCard API, but that will be a completely different story…