One week with the N900

This is me pimping a Nokia product. I work for Nokia and I rarely do this, and never without believing 100% what I write.

With some delays, I managed to get my hands on a N900. Our internal ordering system took nearly five months to deliver this thing (something involving bureaucracy and the popularity of this device. I guess the external paying customers lining up for it had some priority too). But it was well worth the wait.

For those who don’t know what the N900 is: it is the first phone in a series of linux based tablet devices from Nokia that started with the N770 in 2006, the N800 (which I still have), and the N810. As such, this series of devices was the start of something beautiful a few years ago. Not hindered by any operator limitations, these were essentially pocketable linux pcs. So naturally the engineers working on this, selected Debian Linux and named it Maemo Linux. Then they built a tool chain and ecosystem around the platform and tapped into all the readily available OSS goodies. It was great. Any research lab in need of some hackable devices jumped on this. As I recall when I was still doing pervasive computing research, most of the researchers in this field were using these devices to study all sorts of stuff. Because no matter how obscure your OSS project is, barring screen and cpu limitations you can probably get it going on Maemo Linux. You can, and people did. Most of Ubuntu cross compiles to Maemo without much effort. For example, I was running a tomcat, equinox, and lucene on a port of Sun’s CDC J2ME environment (roughly equivalent to java 1.4) on a N800 three years ago. It actually ran well too. In short, these babies are the ultimate hackers devices. There really is no alternative in terms of openness or scope in the industry. Android may be linux deep down inside, and Palm OS may be linux deep down inside, but Maemo is Debian Linux without buts or ifs.

And now there is the N900. The N900 is about as thick as a N97, about as long and about 3mm wider and slightly heavier (I actually did the comparison). Unlike its predecessors, it is a phone as well as a Debian linux running internet tablet. So all the goodness from the past version with a 2X performance and memory boost, a good quality phone stack (hey, it’s still a Nokia), and lots of UI work. While it has some rough edges (the software, not the hardware), it is surprisingly useful as a smart phone despite its current status as an early adopter’s device. It has one of the best browsers around (some would say the best); the UI is responsive and very touch friendly, it multitasks without effort, and it comes with tons of goodies like SIP, skype, google talk, Facebook, twitter support. And that’s just the out of the box stuff. You can do most of what the N900 does on an iphone. But not all at once. You can on the N900, plus some.

So, best phone ever as far as I’m concerned. Meego, the consumer friendly version of Maemo that was born out of our recent deal with Intel and MobLin, is coming soon in the form of new Nokia phones (you can already get it for net books). I can’t wait for world+dog to start porting over their favorite software to that. Meanwhile, I just use it as is, which is plenty good. It’s a great smart phone that plays back my music, browses the web (including Google Maps, Youtube, Facebook, and other web 2.0 heavy AJAX & flash sites) without much effort. Most of the iphone optimized web apps work great on the N900 as well. For example, I use the iphone optimized mobile Google Reader ( Mail support is excellent on this device, I use mail for exchange push email and gmail. I can do regular calls, VOIP, Skype (with video), IM, upload photos/videos to facebook, flickr, and other networks. Functionally there is little left to desire. Though somebody getting a foursquare client beyond the early Alpha stage would be nice (there’s two of those).

N900 & Slashdot

I just unleashed the stuff below in a slashdot thread. 10 years ago I was a regular there (posting multiple times per day) and today I realized that I hadn’t actually even bothered to sign into slashdot since buying a mac a few months ago. Anyway, since I spent time writing this I might as well repost here. On a side note, they support OpenID for login now! Cool!

…. The next-gen Nokia phone [] on the other hand (successor to the N900) will get all the hardware features of the iPhone, but with the openness of a linux software stack. Want to make an app that downloads podcasts? Fine! Want to use your phone as a modem? No problem! In fact, no corporation enforcing their moral or business rules on how you use your phone, or alienation of talented developers []!

You might make the case that the N900 already has the better hardware when you compare it to the iphone. And for all people dismissing Nokia as just a hardware company, there’s tons of non trivial Nokia IPR in the software stack as well (not all OSS admittedly), that provides lots of advantages in the performance or energy efficiency domain; excellent multimedia support (something a lot of smart phones are really bad at), hardware acceleration, etc. Essentially most vendors ship different combinations of chips coming from a very small range of companies so from that point of view it doesn’t really matter what you buy. The software on top makes all the difference and the immaturity of newer platforms such as Android can be a real deal breaker when it comes to e.g. battery life, multimedia support, support for peripherals, etc. There’s a difference between running linux on a phone and running it well. Nokia has invested heavily in the latter and employs masses of people specialized in tweaking hardware and software to get the most out of the hardware.

But the real beauty of the N900 for the slashdot crowd is simply the fact that it doesn’t require hacks or cracks: Nokia actively supports & encourages hackers with features, open source developer tools, websites, documentation, sponsoring, etc. Google does that to some extent with Android but the OS is off limits for normal users. Apple actively tries to stop people from bypassing the appstore and is pretty hostile to attempts to modify the OS in ways they don’t like. Forget about other platforms. Palm technically uses linux but they are still keeping even the javascript + html API they have away from users. It might as well be completely closed source. You wouldn’t know the difference.

On the other hand, the OS on the N900 is Debian. Like on Debian, the package manager is configured in /etc/sources.list which is used by dpkg and apt-get, which work just as you would expect on any decent Debian distribution. You have root access, therefore you can modify any file, including sources.list. Much of Ubuntu actually compiles with little or no modification and most of the problems you are likely to encounter relate to the small screen size. All it takes to get to that software is pointing your phone at the appropriate repositories. There was at some point a Nokia sponsored Ubuntu port to ARM even, so there is no lack of stuff that you can install. Including stuff that is pretty pointless on a smart phone (like large parts of KDE). But hey, you can do it! Games, productivity tools, you name it and there probably is some geek out there who managed to get it to build for Maemo. If you can write software and package it as a Debian package and can cross compile it to ARM (using the excellent OSS tooling of course), there’s a good chance it will just work.

So, you can modify the device to your liking at a level no other mainstream vendor allows. Having a modifiable Debian linux system with free access to all of the OS on top of what is essentially a very compact touch screen device complete with multiple radios (bluetooth, 3G, wlan), sensors (GPS, motion, light, sound), graphics, dsp, should be enough to make any self respecting geek drool.

Now with the N900 you get all of that, shipped as a fully functional smart phone with all of the features Nokia phones are popular for such as excellent voice quality and phone features, decent battery life (of course with all the radios turned on and video & audio playing none stop, your mileage may vary), great build quality and form factor, good support for bluetooth and other accessories, etc. It doesn’t get more open in the current phone market currently and this is still the largest mobile phone manufacturer in the world.

In other words, Nokia is sticking out its neck for you by developing and launching this device & platform while proclaiming it to be the future of Nokia smart phones. It’s risking a lot here because there are lots of parties in the market that are in the business of denying developers freedom and securing exclusive access to mobile phone software. If you care about stuff like this, vote with your feet and buy this or similarly open (suggestions anyone?) devices from operators that support instead of prevent you from doing so. If Nokia succeeds here, that’s a big win for the OSS community.

Disclaimer: I work for Nokia and I’m merely expressing my own views and not representing my employer in any way. That being said, I rarely actively promote any of our products and I choose to do so with this one for one reason: I believe every single word of it.

X-plane on an iPhone

If you’ve read my past reviews of X-plane, you’ll know that I’m somewhat of a fan of that product. It’s an ultra realistic flight simulator. If you’ll read the product page you will see that it boasts a long list of features. I can assure you, they’re being modest. I don’t pay for software very often but I’ve bought v8 and recently v9 of this one.

Anyway, I just had a little WTF moment reading this little blog post from Benjamin Supnik, one of the lead developers of X-plane who works on the scenery engine. They’ve actually ported X-plane to the iPhone! If so far, you didn’t think much of the iPhone as a development platform, look again. This is really impressive.

I just looked up the product page in iTunes and it has some nice screen shots. Of course they don’t ship the full UI or scenery. All you get is an area around Inssbruck (default area in the demo version of the normal version). Probably it is heavily tuned to work nicely on an iphone. However, the mere fact that they have it running at all is very impressive. Unfortunately, it’s not possible to link to product pages in iTunes, so you’ll just have to look it up yourself, producer is Laminar or you can go to Games->Simulation in the iphone section.

Also hilareous is Austin Meyer (founder and owner of Laminar that builds X-Plane) denying there was an iphone version of x-plane, just before he launched it on September 11th. A bit of a symbolic date for launching a flight simulator, don’t you think?

Sadly, I have no iPhone or ipod touch to play with. Working for Nokia and all that.

What Apple Knows That Facebook Doesn’t

What Apple Knows That Facebook Doesn’t.

Business week has an interesting article on the economics of platforms. Interesting, but flawed. They compare two platforms (Facebook, and Apple’s mobile platform). The argument goes roughly as follows: Apple is using it’s platform to create a new market by being open and Facebook is using traditional methods of using the market as a control point. Apple is creating an open market and Facebook is making an open market more closed. The author even goes as far as to associate the keywords good and evil here.

The article is flawed because in fact Apple is not creating an open market. They have been removing applications that don’t fit their business model (e.g. anything VOIP related) and are still keeping people from writing about the APIs because NDA has not been lifted yet. Apple is acting as a dictator here. That it is a mostly benevolent one doesn’t matter. It doesn’t sound very open to me in any case. Or very new.

Sure, their platform is pretty nice and their online shop pretty usable. That’s definitely disruptive to the mobile industry, which is not used to good quality platforms and well designed use-cases such as online shops for applications. However, there’s a pretty big market for mobile applications and most people writing for the iphone don’t do so exclusively and instead target multiple mobile platforms. You can download several VOIP applications for S60 or mobile windows and other platforms, as well as numerous games, productivity apps, etc. Then there is J2ME of course with a few billion phones in the market right now. You might say it is crappy but it has a huge reach. Incidentally, Apple also blocks components from their shop that would enable people to run J2ME applications since an open source Java platform has in fact been ported long before Apple even ‘opened’ up their platform. That’s right, a good old case of reverse engineering. Apple’s platform is quite unique in the sense that people were developing for it long before Apple decided to hand out developer kits.

Facebook indeed is also not very open but they were first to a market that they created, which is pretty big by now. As a viral way of spreading new services to users it is pretty much unrivaled so far. It is Google that has created a competition for more openness with their Open Social platform, which is in many ways similar but has open specifications and may be implemented freely by other social networks. Both Google and Facebook have a very similar centralized identity model that is designed to lock users into their mutual platforms (Google Friends Connect & Facebook Connect). Google is maybe being somewhat more smart about it but they are after the same things here: making sure trafic flows through their services so that they can sell ads.

So, Facebook’s model is advertisement driven and Apple’s business is operator driven. Apple makes most of their money from deals with operators who subsidize iphones and give Apple a share of the subscription revenue. That’s brilliant business and Apple protects it by removing any application from their shop that has conflicting interests with this revenue stream.

However, the key point of the article that the platform serves as a market creation tool is interesting. Apple managed to create an impressive amount of revenue (relative to their tiny market share of the overall mobile market) and Facebook has managed to create a huge market for Facebook applications. Both are being challenged by competitors who have no choice to be more open.

Interestingly, Google is competing on both fronts and can be seen as the primary threat to both Apple and Facebook’s platforms. Google could end up opening up the mobile market for real because it is not protecting any financial interests there but instead are trying to spawn a mobile internet market. Android is designed from the ground up to do just that. It needs to be good enough for developers, users and operators and Google has worked hard to balance interests enough so as to not alienate any of these.

All three are fighting for the favours of developers. Developers, developers, developers! (throws chair across the room & jumps like a monkey). That too is not new although Microsoft seems to have forgotten about them lately.

Google Android

Update: a slightly updated version of this article has been published on the Javalobby weekly news letter and on the javalobby site itself after Matthew Schmidt invited me to do so.

Update 2: The serverside has linked here as well. Readers coming from there, the version on Javalobby linked above is the latest and also has some discussion attached.

About an hour ago, Google released some additional information on the SDK for Android, its new mobile platform. Since I work for Nokia (whom I of course not represent when writing things on my personal blog, usual disclaimers apply), I’m naturally interested in new software platforms for mobile phones. Additionally, since I’m a Java developer, I’m particularly interested in this one.

I spent the past half hour glancing through the API documentation, just to see what is there. This does not provide me with enough information for a really detailed review but it does allow me to extract some highlights that in my view will matter enormously for platform adoption:

  • The SDK is Java based. No surprise since they announced it but it is nice to see that this doesn’t mean they are doing J2ME but instead use Java as the core implementation platform for all applications on the platform.
  • The Linux kernel and native libraries are just there to run applications on top of Google’s custom JVM Dalvik which is optimized for running on embedded hardware.
  • There is no mention of any native applications or the ability to write and install native applications
  • Particularly, there’s no mention of a browser application. Given Googles involvement in Firefox and their recent announcement of a mobile Firefox, this is somewhat surprising. Browsers are increasingly important for high end phones. Without a good, modern browser, Android is doomed to competing with low end feature phones. Browser seems to be webkit, the same engine that powers the iphone browser and the S60 browser.
  • Google has chosen to not implement full Java or any of the ME variants. This in my view very bad and unnecessary.
  • Instead a small subset of the Java API is implemented. Probably the closest is the J2ME CDC profile (so why not go all the way and save us developers a few headaches)
  • Additionally Google has bundled a few external libraries (httpclient, junit and a few others). That’s nice since they are quite good libraries. I’m especially fond of httpclient, which I miss very much when doing J2ME CLDC development.
  • The bulk of the library concerns android.* packages that control everything from power management, SMS to user interface.
  • I did not spot any OSGi implementation in the package; Google seems to intent to reinvent components and package management. This is disappointing since it is very popular across the Java spectrum, including J2ME where it is already shipping in some products (e.g. Nokia E90).

In my opinion this is all a bit disappointing. Not aligning with an existing profile of Java is a design choice that is regrettable. It makes Android incompatible with everything else out there which is unnecessary in my view. Additionally, Android seems to duplicate a lot of existing functionality from full Java, J2ME and various open source projects. I’m sure that in each case there is some reason for it but the net result seems reinvention of a lot of wheels. Overall, I doubt that Android APIs are significantly faster, more flexible, usable, etc. than what is already out there.

On the other hand the platform seems to be open so not all is lost. This openness comes however with a few Strings attached. Basically, it relies on Java’s security system. You know, the same that is used by operators and phone vendors to completely lock down J2ME to restrict access to interesting features (e.g. making phone calls, installing applications). I’m not saying that Google will do this but they certainly enable operators and phone vendors to do this for them. This is not surprising since in the current market, operators insist on this, especially in the US. The likely result will be that Android application developers will have to deal with locked down phones just like J2ME developers have to deal with that today.

The choice for the Apache 2.0 license is a very wise choice since it is a very liberal license that will make it easy for telecom companies to integrate it with their existing products. Provided that the Android APIs are reasonably well designed, it may be possible to port some or all of it to other platforms. The Apache license ensures that doing so minimizes risk for underlying proprietary platforms.

Additionally, the apache license also allows for some interesting other things to happen. For example, there’s the Apache Harmony project that is still working on a full implementation of Java. Reusing this work might of course also make much of android.* redundant. Additionally, there is a lot of interesting mobile Java code under eclipse’s EPL, which is similar to the Apache license. This includes eSWT, a mobile version of the eclipse user interface framework SWT. Eclipse also provides a popular OSGi implementation called equinox. Again, lack of OSGi is a missed opportunity and I don’t care what they put in its place.

Frankly, I don’t understand why Google intends to ignore the vast amount of existing implementation out there. It seems like a bad case of not invented here to me. Ultimately this will slow adoption. There’s already too many Java platforms for the mobile world and this is yet another one. The opportunity was to align with mainstream Java, as Sun is planning to do over the next few years. Instead Google has chosen to reinvent the wheel. We’ll just have to see how good a job they did. Luckily, the Apache license will allow people to rip this thing apart and do something more productive with it. OpenMoko + some apache licensed Java code might be nice. Also our Nokia Maemo platform can probably benefit from some components. Especially the lower level stuff they’ve done with the VM and kernel might be interesting.

links for 2007-07-18

simple note encrypt/decrypt with AES in javascript

Inspired by the hype surrounding the iphone and web applications, I hacked together a nice little toy to encrypt and decrypt text using aes. I borrowed the aes implementation from here and basically wrote a somewhat nicer UI for it. I still need to integrate sha1 hashing of passwords as the aes.js script author suggests that is a bit more secure than his current method.

I have no idea if it will work in the iphone browser since I’ve only tested in firefox. It partially works in IE7 and I have no desire to spend time finding out why it fucks up. Suggestions to improve my little javascript hacking are welcome of course.

BTW. password of the default content is: “secret”.