Monday, October 03, 2005

Firmware - Quietly Running the World

Firmware is everywhere. If the joke about how your appliances will have IP address and chat to one another while you are at work is slightly worriesome to you, you should be very worried about firmware.

Firmware is not about underwear with wires and foam. Firmware is the netherworld between hardware and software that, like duct tape, just might be holding the world together. Except firmware isn’t as sticky.

Firmware is everywhere, burned into rom chips in cars, fridges, ovens, expensive toasters, house alarms, sprinkler systems (can you tell we are new house owners?), pda’s, audio equipment, cameras, watches, timers, and of course, computers.

Writing firmware is hard, and debugging it is even harder. Firmware runs in real-time, that is, it has to respond quickly to real-world events, like temperature sensors, switches opening and closing, as well as really slow events like waiting for someone to press a key (I imagine PC’s spend 99.9% of the time awaiting human interaction). Debugging firmware is hard because it runs in a resource-poor environment, where interaction with the hardware is the programmer’s main source of feedback. Since firmware is another form of software, we can expect it to be plagued with all the same problems we have come to expect from software.

A few years ago (pre-iPod) we bought a RioVolt cd/mp3-player. Not only did this cd-player play cd’s but it also played ISO-9660 disks of MP3 files. So this means we could compress 10 or so CDs onto a single CD-R and play about 10 hours off one disc. Cool.

No sooner did we get this puppy home than we checked out the web site, where I was informed there is an update to the firmware on this device? What could you possibly get wrong in v1.13 that you have to correct on 32KB of ROM? What else- new features. Better song sorting, easier ways to navigate the complexity of your disc and directories. Ok, fine. Now how do you actually go about updating the firmware of a CD/MP3 player? In this case, very cleverly. I expected some serial port/USB hack download utility. Forget it. You simply download the firmware upgrade file, then burn a CD with the upgrade firmware on it, and stick it in the player. It starts up, recognizes this upgrade file, and rewrites its own brains. I had to turn it back on by hand after. It now sports new features and a glowing v2.0 splash screen.

A year before, we had a rash of firmware upgrades for our laptops at the office, and it was a study in how hard and how easy a firmware upgrade can be. The guys using the NEC laptops had to upgrade from sloppy disc, a process that took two electrical engineers several hours to perform. On my Apple G3 powerbook, I downloaded the app off the web and ran it. It told me it would have to restart and the screen would show the upgrade process, then reboot. I clicked and watched. Sure enough, the application did something mysterious for a while, the machine restarted, and a very simple gui appeared showing the progress bar of the upgrade. Remember, firmware is right above the hardware layer so there is not a lot of operating system and graphics-card level resources for it to play with, so showing anything on screen came at the cost of someone poking pixels into video ram. After this 30 second upgrade was complete, the reboot took me back to the real world of operating systems, and one that could properly handle firewire again.

Upgrading firmware is always going to be a grungy task, since it is by definition low level. As systems get more complex, so does the firmware. I blew up our convection microwave oven by pressing keys in an order that I thought would convect but in fact nuked. A more disastrous case was the Therac-25, which left open a chance for a technician to perform a sequence of keystrokes that delivered 100 times the regular dose of x-rays to a patient.

As designers, we have to keep in mind the phrase I learned at a CHI (Computer Human Interface) conference years ago which was “Know Thy Users for they are not You.” Firmware will continue to be a critical component of a microprocessor powered world, and making it easy for mortals to deal with devices, as well as the ability to upgrade their firmware is another responsibility we should take seriously.

Now if you’ll excuse me, my refrigerator just e-mailed me complaining about the trashy language coming from the garburator…