An abstract from here:
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.
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).
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.