The Crypto-CS-SETI challenge:
An Un-programming Challenge
A challenge to all bright minds in the IT and CS world: Can you disassemble a program for an unknown computer, given only the compiled ROM image?
I hereby announce a challenge, beginning immediately, to gather as much information as possible about the program file linked below.
Imagine finding a crashed flying saucer.
This time it is no hoax and there are no black helicopters involved.
And there is no doubt that it is not of our planet because there is absolutely no way Akhnaten could have bought a used carbon-carbon heat-shield on eBay—and, in particular, one that cannot be carbon-14 dated as it has no carbon-14 atoms.
By deciphering the hieroglyphs, we learn that there was a royal cover up (which is why we haven't heard about it until now) and that the alien technology was based on self-replicating biological principles, which, unfortunately, replicated nowhere nearly as fast as the locusts and cockroaches could eat them.
As more and more of the secret royal journal is translated, things start to make sense: Where Akhnaten got his strange ideas, why he was so terrible at genetics, but not, alas, the Philip Glass Opera.
But apart from the heat-shield, the only actual physical evidence is some broken test-tubes and a small glittering object, which archaeologist quickly declare—"Probably had ceremonial or religious significance,"—which is simply their way of saying "no idea..."
On subsequent examination, the object is found to be a small triangular corner, sawed from a piece of printed circuit board and then used as jewelry or as a talisman—proving the archaeologists both wrong and right.
An X-ray examination reveals that one part of the object contains what is clearly some kind of mask-programmed ROM storage.
We read out the bit-pattern...and then what?
What, if anything, can we deduce about the rest of the alien world from only a program? We don't know what it does, and we have no information about the computer for which it was written [1]?
It could have been an alien's favorite game cartridge for his Erodommoc-46 home computer, or it might be a piece of supercomputer which unlocked the tasty secret of DNA-computing. Or maybe it was the mobile phone with which they digitally signed their marriage certificate several hundred thousand years ago.
Of course, none of the above is true, except possibly for the bit about the opera, but the question is worthy of study in its own right. It's not only a purely academic question, but a very real problem for curators of computer history collections, where artifacts don't always come with enough metadata to allow proper identification. The task is akin to breaking a cryptographic code, only instead of searching for highly confidential messages such as "Hvid armes hovedkvarter har ikke mere jordbærsyltetøj, kan I sende en stafet over åen med et par glas?" we are looking for "while (something()) {something_else(); };". And instead of having been encrypted, it has merely been compiled and that should make the task much easier—nobody has actively tried to hide anything. Quite the contrary, like all terrestrial programmers, they probably went out of their way to make sure the computer would understand their program in precisely one way.
But we cannot make too many assumptions about the code.
It might have been developed in a highly structured manner with formal methods and proven correct because it was part of something important, or it could have been optimized by a genetic-algorithm compiler and be the most terrible spaghetti code and only marginally less tangled than animal DNA code.
Can we actually disassemble a program for an unknown computer? The best way to find out is to try, so here is my challenge to all bright minds in the IT and CS world:
With the publication of this article I release a 16384 byte program file [2].
The challenge is to deduce as much as possible about the program, about the device and about what it does. The program is from a computer very few people have ever come into contact with and for which no copies of the documentation are thought to exist anymore. And Google is absolutely clueless about it, so it is a pretty good stand-in for an alien EPROM.
The only help you get is this:
It is an unmodified real-world program that somebody once wrote to do something beneficial. The computer still works and I have studied it sufficiently with a logic analyzer to be able to judge any submitted results from the challenge.
There is no prize for winning in this challenge, because I have absolutely no idea where to put the goal-posts. The real prize will be learning something about programs, as archeological or crypto-zoological artifacts and I strongly urge publication of this learning.
I also urge anyone who might be able to identify this ROM-image—either from having programmed this computer, or who for some reason recognizes this code—to please contact me privately, rather than publicly spoil the challenge for the rest.
And with that, good luck!
References
[1] A somewhat similar situation was discussed in http://en.wikipedia.org/wiki/History_Lesson_%28short_story%29
[2] The binary file for the challenge is available here:
http://phk.freebsd.dk/UCO/
POUL-HENNING KAMP (phk@FreeBSD.org) is one of the primary developers of the FreeBSD operating system, which he has worked on from the very beginning. He is widely unknown for his MD5-based password scrambler, which protects the passwords on Cisco routers, Juniper routers, and Linux and BSD systems. Some people have noticed that he wrote a memory allocator, a device file system, and a disk encryption method that is actually usable. Kamp lives in Denmark with his wife, his son, his daughter, about a dozen FreeBSD computers, and one of the world's most precise NTP (Network Time Protocol) clocks. He makes a living as an independent contractor doing all sorts of stuff with computers and networks.

Poul-Henning Kamp | Fri, 13 Jan 2012 16:27:57 UTC
Poul-Henning Kamp | Sat, 14 Jan 2012 11:31:33 UTC
Poul-Henning Kamp | Sun, 15 Jan 2012 20:51:58 UTC
Poul-Henning Kamp | Wed, 18 Jan 2012 07:36:02 UTC
Poul-Henning Kamp | Wed, 18 Jan 2012 10:13:29 UTC
Julian Sauer | Wed, 18 Jan 2012 12:39:04 UTC
d12eb697 | Wed, 18 Jan 2012 13:02:32 UTC
lubki | Wed, 18 Jan 2012 14:05:17 UTC
Poul-Henning Kamp | Wed, 18 Jan 2012 14:08:14 UTC
rstos | Wed, 18 Jan 2012 14:25:10 UTC
Poul-Henning Kamp | Wed, 18 Jan 2012 14:37:58 UTC
Kimse | Wed, 18 Jan 2012 19:14:46 UTC
Poul-Henning Kamp | Wed, 18 Jan 2012 19:37:33 UTC
rstos | Thu, 19 Jan 2012 06:55:52 UTC
Poul-Henning Kamp | Thu, 19 Jan 2012 08:06:01 UTC
Julian Sauer | Thu, 19 Jan 2012 12:27:08 UTC
rstos | Thu, 19 Jan 2012 13:13:26 UTC
Poul-Henning Kamp | Thu, 19 Jan 2012 15:57:09 UTC
shawn_e | Thu, 19 Jan 2012 16:33:24 UTC
Segher | Thu, 19 Jan 2012 18:07:16 UTC
Poul-Henning Kamp | Thu, 19 Jan 2012 23:30:36 UTC
XAD | Sat, 28 Jan 2012 08:59:37 UTC
Poul-Henning Kamp | Sun, 05 Feb 2012 21:51:28 UTC
Poul-Henning Kamp | Sat, 05 May 2012 19:20:04 UTC
rcf | Thu, 19 Jul 2012 10:32:24 UTC
hepp | Sat, 27 Oct 2012 14:00:23 UTC