This week I bought the Google Nexus One phone. I've been very impressed with the device so far. Here are some of my thoughts. Keep in mind that this is a hacker's perspective and I'm not nearly so interested in eye candy and user experience as many people might be.
On the hardware
What impressed me most about the N1 was the hardware, and its hackbility. The highlights as I see them:
- 1 Ghz Snapdragon CPU - almost twice as fast as iPhone and Motorola Droid
- 512M RAM
- Very,very nice 480x800 OLED display
- 5MP camera + flash
- Easily removable battery (unlike e.g. iPhone)
- Micro SD card slot
- Hardware multi-touch support
- 3g modem - which can be used for tethering
- WiFi
Back in 2005 I presented a paper at EuroBSDCon on Porting OpenBSD to the Sharp Zaurus. I liked the Zaurus device, and I see the Nexus One as a much more evolved equivalent computer, with in-built 3g and wifi.
On the Android OS
I liked the concept of Android when it first came out but after seeing the G1, figured it needed some time to mature. My impression then was that it lacked polish and that the hardware available just didn't have enough power. Now, though, with the advent of the Nexus One, I think its awesome.
Highlights for me of the Android operating system:
- Open Source - You can download the source tree and compile your own ROM if you like
- Free Multi-Platform SDK - The iPhone is a nice piece of hardware, but I don't own a Mac (and don't want one) so could never develop for the platform. The Android SDK, on the other hand, is freely available for Windows, Mac and Linux - so I can actually use it!
- Multitasking - I didn't actually realise that iPhoneOS didn't support multitasking until recently but that seems like a huge disadvantage.
- Activity micro-app model
Android Activity Model
Many people don't seem to like this, but I'm quite impressed so far. Applications on Android are really a collection of micro-applications called "Activities" which are executed in a stack, and are expected to be able to handle being garbage collected by the OS and resumed later. This provides two very interesting things:
- You have the illusion of running as many applications at once as you like. If the application isn't actually in memory when you try to access it, it will be resumed and its state re-initialised to what it was previously.
- It provides a very interesting mechanism for code-reuse and use of third-party functionality.
For example, lets say your application on Android needs to prompt the user to select a point on a map. Instead of having to call some Google maps library or similar in-process, you actually execute the Google maps activity (which is a separate process) and it sends you back information.
While this isn't conceptually so far removed from linking library code into your process memory space and calling functions that way, it removes an awful lot of complexity - no need for shared library linkage for one - and improves security and robustness of your application. Should the thirdparty activity crash, because it is in a separate process, it shouldn't take your app down with it.
My favourite use of this model so far is Snaptic's 3Banana Notes, which provides a note taking activity to other applications. This allows third party applications to save any note-like state to your Snaptic account, and get syncing etc for free. Pretty cool idea.
Conclusion
I am super happy with the Nexus One and Android so far. I was able to hack together a simple stopwatch application for the platform in about 90 minutes - and that includes installing Eclipse and getting it set up. I'll write some blog posts on developing for the phone soon. However, its not without its flaws. Its pricey, at $580 unlocked. Android could do with less frivolous eye candy and more focus on responsiveness in my opinion. The virtual keyboard doesn't seem as good as on the iPhone. Also I'd love to get more battery life out of the device - but it seems like all these smartphones are power hogs.
Niall O'Higgins is an author and software developer. He wrote the O'Reilly book MongoDB and Python. He also develops Strider Open Source Continuous Deployment and offers full-stack consulting services at FrozenRidge.co.