Protecting creativity
Thanks to Mako, I heard about a remarkable piece of reverse engineering. A reverse engineer (Nils Schneider) wanted to study the firmware of the Apple iPod in order to figure out how to write software that runs on iPods. But he experienced a chicken-and-egg problem: after learning how to write simple programs to run on an iPod, he found that he couldn't figure out how to use the iPod's I/O hardware (in order to extract a copy of the firmwire) without studying the firmwire first to see how Apple does I/O. At the same time, he couldn't study the firmware without first extracting a copy of it.
His ingenious solution was to use someone else's technique for making the iPod squawk and squeak, in order to write a program that output the firmware as a series of sounds (which could then be recorded using a microphone, and analyzed using software on a PC in order to convert them back into a digital representation of the firmware). In effect, he turned the iPod and microphone system into an acoustic modem, and wrote his own modulation scheme for representing data as sound. He wasn't using the iPod's headphone jack; he was making the iPod itself squeak and squawk, using a piezoelectric element somewhere inside the iPod. To protect against background noise, he had to put the iPod and the microphone together inside a padded box, and let them sit for eight hours.
Somehow this reminds me of the scene in William Gibson's "Johnny Mnemonic" in which Johnny is made to recite (for three hours) a memorized computer program to which he has no conscious access. "And then it all faded to cool gray static and an endless tone poem in the artificial language. I sat and sang dead Ralfi's stolen program for three hours." In the story, the program in question is a misappropriated secret; here, despite the interesting aesthetic parallel, I think Schneider's purpose in studying the iPod's firmware is perfectly proper.
In fact, Nils Schneider's remarkable creativity with the iPod gives me a kind of hope for the future. In seventh grade, when I had a computer with a dead monitor (I think it turned out to be unplugged), I wrote a routine to give output in terms of beeps on the speaker; you could tell if a program was working by counting the number of beeps it output. (Strings could be translated into binary and then beeped at you that way, but it was a little tedious writing them down and trying to decode them.)
Schneider's ingenious approach shows several important virtues:
- User innovation and the lack of passivity. Apple didn't intend for third-party software to be used with the iPod; not only was Schneider unconcerned with this, he ended up using the iPod in a way that its developers wouldn't have anticipated (and, if they've heard about it, are probably amused or startled by). He certainly refused to limit his thinking to what the original manufacturer had in mind; he insisted, on, well, thinking different.
- Consciousness of history. This problem was solved before in an earlier generation of technology. As Dave Farber has often pointed out, it's tragic that computer scientists and programmers working today are often thoroughly ignorant of what earlier generations have already invented and implemented. Even more than other fields, computing may be repeating and duplicating effort all the time. The notion of modulating digital data as a waveform at audio frequencies has been deeply important in digital communications, but it's easy enough for people who don't use a modem any more to forget it -- never mind people who (like myself) have never had to use an acoustic coupler.
- An appreciation for the universality of the machine. The idea that data is data and that representations and encodings of it are merely accidental goes back, depending on how you want to count it, decades or centuries. (See, e.g., Umberto Eco, The Search for the Perfect Language (Malden, MA: Blackwell Publishers, 1997), for some antecedents of this idea in the days before Shannon, Turing, and von Neumann.) But even so, we can get stuck in what cognitive psychologists call "functional fixedness" and refuse to think about data outside of its current representation. We can refuse to think of some signalling method or storage medium as capable of representing any data, of communications media and computing devices as genuinely universal. We can say that certain outputs were made for certain purposes and stubbornly refuse to consider that there are other outputs, even outputs that may be a problem for somebody's security policy. We can read Shannon, or anything after Shannon, and still not know in a practical sense that any data can be encoded on any channel. But Schneider thought with an abstraction and generality that befits an "information age"; he knew that bits are bits, from a communication engineering point of view, and meaning comes after, at another layer.
- Hack value. It can be risky to describe something as having "hack value"; those words now appear in a judicial opinion together with a footnote pointing out that the parties to the action have not defined them. So let me note the Jargon File's definition, and (at the risk of overusing it, and although one could argue that it refers to a somewhat different concept) the famous discussion in The Diamond Age: "Pardon me, Your Honor, the concept is not easy to explain -- there is an ineffable quality to some technology, described by its creators as a concinnitous, or technically sweet, or a nice hack -- signs that it was made with great care by one who was not merely motivated but inspired. It is the difference between an engineer and a hacker."