To my complete surprise, I found an article on Slashdot this morning, in which Reuters was quoted as saying that Nokia is going to ditch Symbian on the N series of phones. Instead of the trusted in-house OS, Nokia is moving their flagship product to MeeGo.
For those of you who don’t know, MeeGo is the merger or Nokia’s very on Maemo project and Intel’s Moblin. All three projects have the same aim: to provide a full Linux distribution for mobile devices. Nokia’s main aim is the smartphone market, while Intel started out thinking about MIDs and netbooks.
The move on Nokia’s part is quite unexpected, since they just recently reiterated that Symbian would always be at the core of their smartphone offering. Symbian is great, don’t get me wrong, but I wouldn’t want to develop for it. It’s getting old in the tooth and requires a lot of work to get used to.
Now, what does that mean in the mobile landscape? Why would Nokia move in this direction? What does that all mean in context?
Apple’s iOS has revealed a truth that developers already knew (but not many other people): an operating system, no matter for what class of device, lives with the applications you can develop for it. Apple’s iPhone is not great as a phone – as a matter, it is quite a frustrating device that got to feature parity with other smartphone only with the current, fourth generation. The iPhone is great because of all the nifty things you can do with it. It’s a smartphone in that it can do a lot of things that you hadn’t even dreamed of doing on a phone.
There is a downside. While Apple was the first company to push app development really hard, it did so in a typically Apple-control-freak way. Applications have to be developed using an approved tool chain, using a language (Objective C) that only Apple uses anymore, and they have to undergo rigorous testing and a capricious approval process. That sucks, because Apple doesn’t guarantee anything and you risk writing an app for months, only to see it languish in approval.
Enters Android, Google’s response to iOS. A custom Linux distribution for smartphones. Android addresses many of the issues of iOS, has much better features, and is available for anyone, for free. Sounds great!
Android has a few issues: the tool chain is fixed again, but for other reasons. Instead of developing in Objective C, you are forced to use Java. The choice makes sense in a way: after all Java allows for cross-platform development and was designed from the get-go to be run on embedded devices. What’s wrong with that? Really, nothing wrong.
MeeGo comes from a different angle: instead of forcing you to use Java and approved SDKs, MeeGo is a Linux distribution. A full distribution, including package manager, GNU tool chain, standard Linux kernel, etc. You can use Java on it, you can use C, you can use Python, you can use Perl. You can use whatever is available on Linux, minus device specifics.
How does that matter? Why not simply write for the available SDK? Well, you are right, it doesn’t really matter, per se. Maemo itself, for instance, pushed strongly for the use of Python by making all features on the devices accessible using that language. If you developed for the N tablets (770, 800, 810, 900), you probably used Python.
But! But you can use whatever is available on Linux. That means that if there is a piece of software that you need, you simply recompile it for the processor you want and there you go, it runs just fine.
That’s actually a lot more important than you’d think, in two very subtle ways:
1. Source must be available. Since you do not know what particular processor runs on a MeeGo device, you have to provide sources that can be recompiled on any device, or you have to specify what devices your software runs on. This is pretty good, because it means you either hand out an application that is targeted at a specific list of phones (closed), or you give people the ability to make it run on their specific device the way they want it.
2. Backend code running on the desktop or servers can simply be recompiled, guaranteeing compatibility. For instance, for an applet of mine I needed access to tcpdump. I simply took the open source code, recompiled it on Maemo/ARM, and I knew it would run the same. This kind of thing is particularly important when dealing with storage and network connectivity code, when version incompatibility can force hours and days of debugging. For instance, the N900 mostly standardized on SQLite for storage, which means I can attach my N900 to the desktop and manipulate the phone’s storage right from my computer.
So far, the main issue with Maemo development and the N900 was lack of resources on Nokia’s part. The idea was great, but execution was lagging. Just too many things to do. For instance, the phone is a resource hog of first caliber when you install apps, and the battery can easily die within a couple of hours if you are not good about app control. Android has a battery watch applet – extremely important. Maemo doesn’t.
The N900 doesn’t allow you to attach an external keyboard. Nokia says that phone functionality is their current focus (emphasizing resource constraints), but an Internet tablet you can’t program on is quite a weird thing. To add insult to injury, you cannot attach any USB device because the N900 has no USB host connection. That’s incredibly stupid, because it nixes one of the major advantages of having a full Linux distribution on a phone. Imagine what would happen if you could connect your phone to a printer, a scanner, a webcam, a barcode scanner, etc.
Of course, these limitations are nothing compared to the fundamental bugginess of Maemo, again rooted in resource constraints. The phone does weird things – after a day or too, it’s so sluggish it needs to be rebooted. At times, sound has an echo as if two copies of the sound server were running in parallel. The phone reboots itself for no apparent reason, even while you are doing absolutely nothing with it or, much worse, when you are in the middle of a phone call.
But! That’s all an issue of resources, and Nokia has them. I am very happy about the merger between Maemo and Moblin, because it wrests control of development from the single company Nokia. At the same time, it should add direly needed resources for polish and bug fixing.
If you ask me, MeeGo is the way to go. Fastest application development time by far, rich user interface, deep hardware support. Now it’s just a matter of marketing and engineering muscle, and I hope that Nokia realizes that.
[As a side note: I just realized a few days ago that KDE4 has been out for several years, and that I am still reminiscing of the powerhouse that Amarok once was. Same resource constraints. I so, so wished they had left Amarok alone, or that someone would bring the 1.x series back. Amarok 2.x still sucks, and there is no improvement in sight.]