The Nokia 770 Revisited
Date: Dec 29, 2006
After carrying a Nokia 770 in his pocket for more than a year, David Chisnall looks back at how useful a small Linux machine has been. The firmware received a major upgrade in 2006; read on to find out how well it addressed existing issues.
A while ago, I wrote a review of my first impressions of the Nokia 770 after owning one for about a week. At the time, it was a brand new device; the first affordable handheld running a Free Software stack (Linux, X11, GTK). It was also a new market for Nokia: a mobile phone without the phone component.
The fact that it was not a phone gave Nokia a bit more freedom—it didn’t have to limit the features to ones that would encourage the networks to subsidize the cost of purchase. This did, however, increase the device cost for the end user. To help build an ecosystem around it, Nokia gave a heavy discount (around 60 percent) to Free Software developers.
Since that last review, the machine has lived in my jacket pocket and been carried with me wherever I go. It’s also had a major revision of the firmware.
Has the "Oooh, shiny!" feeling worn off? Read on to find out.
Text Input
One thing that really let down the original unit was text input. It came with two methods: handwriting recognition and an on-screen keyboard. The on-screen keyboard was very slow, its keys were too small to hit fast and reliably, and, for some reason, the Z key was larger than all the others. I can only imagine that Nokia engineers feel the need to use more Zs than the average person—in fact, more Zs than Es.
The second input method was optimistically termed handwriting recognition. Interestingly, this was one of the few closed-source components of the entire core stack. I don’t know how much money Nokia paid for it, but they were ripped off. I’ve seen a native handwriting recognition engine written in 20 lines of Smalltalk that did a better job.
The 2006 firmware improved this situation slightly by adding a thumb-pad. This took over most of the screen, turning the device into a keyboard. It misses the odd key press, but it’s now about the speed my old Psion Series 3 was for text entry. Unfortunately, this comes at the expense of being able to see anything on the screen. As with the other methods, this comes with some quite nice word completion, which suggests words based on what you have already typed. As seems typical with Nokia, the user interface is almost there, but not quite. I can see the suggestions, and often they are correct, but I still haven’t worked out which button you press to insert them.
Since I deal with a lot of text, I bought a bluetooth keyboard. This was the Thinkoutside Stowaway Universal Bluetooth Keyboard, and works very well with the device. It is a similar size to the 770 when folded, and so both can comfortably fit in a jacket pocket.
Unfortunately, switching input method to the bluetooth keyboard can still cause applications to crash. I wouldn’t normally complain about instability caused by third-party applications, but I feel justified in doing so when they are implementing features that should have been in the original device.
eBooks
One of the best things about the 770 is the battery life. Whenever I fly, I load it up with Project Gutenburg eBooks for when the in-flight entertainment is too bad. On my last two trans-Atlantic flights, I read Pride and Prejudice and Accellerando on it, and the battery monitor showed about half full by the time I finished.
The screen is still one of the machine’s best features. At 225dpi, text is crystal clear on it. I’ve only seen one other screen with the same pixel density, it was made by IBM and priced this way: "Call, but make sure you’re sitting down and have a large brandy ready for when we tell you how much." Hopefully they’ll make their way into laptops in the next few years.
The Applications
Nokia gave Free Software developers a big discount because they wanted as much third-party software available as possible. To an extent, this has worked. This being a *NIX machine, one of the first applications to be ported was an xterm.
Once a terminal is running on the machine, you immediately have access to a wide range of console applications. I began writing this article in the hotel launderette while I was waiting for some clothes to wash, using vim. Having a machine capable of running vim in my pocket is great for productivity; whenever I am waiting for people or stuck with nothing to do, I can pull it out and write. If there’s a wireless access point around, I can SSH to other machines or SCP my work to a safe place when I’m finished.
While I’m talking about Internet access from the machine, it’s worth taking a look at the bundled applications. The mail client is still the worst I have ever seen. It refuses to send mail through my SMTPS server, suggesting that I might try disabling SSL. No more helpful error message appears, so I still don’t know what the problem is: my mail server certificates are all signed by CACert, and the device has the CACert root certificate installed.
The browser is still Opera. It seems Nokia’s WebCore GKT browser still isn’t ready. I don’t mind Opera; it integrates well with the device, and the zoom function (which Opera does better than any other browser I’ve used) is indispensable on such a small-screen device. One thing that did irritate me was that it wouldn’t remember passwords. I used a wireless network for a while, which required users to log in via a web page. To conserve battery power, the 770 would periodically disconnect from the access point, and I would have to re-enter the login details. The newest firmware fixes this.
The most interesting addition in the 2006 firmware is a Google Talk client (which also talks XMPP to non-Google servers). This provides instant messaging and voice over IP. It is good to see Nokia starting to put its weight behind open standards such as XMPP, although I suspect it will be a while before the mobile networks allow Jabber clients to be standard on phones. Even a comparatively bloated protocol such as XMPP looks cheap compared with $500 per megabyte for SMS...
Installing Applications
Since the start, the 770 has used .debs for package management. With the 2006 firmware, there is a nice GUI tool for browsing repositories. Unfortunately, there is no single repository for all working applications (although there is a list on the maemo.org wiki), so you end up having to add a repository for almost every application you install.
The only real advantage of using the repositories over just grabbing the .debs from the Maemo wiki is that it handles dependency resolution for you.
Another advantage of the new firmware is that it provides a simple mechanism for gaining root access; there is a gainroot script installed by default that the user can run using sudo. This means you don’t need to jump through hoops to be able to do things that require root access, making it a lot more hacker-friendly.
Stability
The 2006 firmware update improved a lot of things, but stability wasn’t one of them. After one reboot, I found that the machine would get part of the way through the boot cycle and then restart. Reading the Internet showed me that this was not an isolated problem. The only way of recovering was to re-flash the device, leaving the internal flash back in its precustomized state. I believe the cause of the problem was filling up the internal Flash (just before the reboot, I installed 20MB of LaTeX), but this definitely wasn’t graceful failure.
The device is still crippled by a lack of RAM. I can’t tell whether it’s the Linux kernel, X11, or the applications that are to blame, but 64MB doesn’t seem to cut it any more. I’d be interested to see if NetBSD performs better, but so far no one has ported it to the device. The "solution" to this problem is to configure a swap file on the memory card.
Unfortunately, when you plug the device into a USB cable, it unmounts the memory card and gives the host computer block-level access to it. If you have any applications partially swapped out, it can cause problems.
While we’re talking about memory, let’s talk about how Linux handled out-of-memory (OOM) conditions. In short, it doesn’t. It picks a pseudo-random process, and kills it. I say pseudo-random, because the algorithm seems to be "which process has the most unsaved work?"
For a system such as the 770, the correct way of handling low-memory conditions is to add two new signals—let’s call them SIGLOWMEM and SIGOOM. When you are down to (say) 5MB, you send SIGLOWMEM to all processes. This is ignored by default, but compliant applications will catch it and flush in-core caches and buffers. When memory gets really constrained, you start sending SIGOOM to applications (starting with those that handled input the least recently). Again, this is ignored by default, but compliant applications will save their state and quit. Only after this do you start killing applications. The 770 does the first of these, but it seems that the most any application does is pop up a little warning that says "You are out of memory."
Linux is built on the assumption that running out of memory almost never happens. On the 770, this is not valid.
The Filesystem
The internal flash storage is 128MB, and I have plugged a 1GB RS-MMC card into mine. This gives me a 128MB JFFS2 partition and a 1GB FAT /media/mmc1 partition. I can store documents on the memory card, but I can’t install applications there.
There is a third-party tool that allows you to mount the RS-MMC as a unionfs filesystem on top of the internal flash. I would suggest that this should be standard; install the standard software on the internal flash and then mount the RS-MMC on top and put all the user files and applications on it by default.
The problem with this is that the standard way of moving files between the device and a bigger computer is currently to plug it in via USB and allow the host computer block-level access to the flash card. This is a hack because it means you can’t have the flash card mounted while the machine is plugged in using USB, and it also means that you need to use a filesystem on the flash card that all host computers can read.
To fix the problem of FAT on the flash card, Nokia first needs to provide a better method of file transfer. I would suggest that SFTP and Bluetooth File Transfer servers would be the obvious options here, especially since they already exist as third-party add-ons. Integrating them into the base system wouldn’t be too difficult; all it would really take would be a button in the task bar to turn them on and off. It could even be integrated into a connection menu.