Snowball's Chance Copyright © 2009 Jeffry Dwight. All rights reserved. Reproduction and distribution specifically prohibited. First published in The Age of Wonders, SFF Net, 2000. Back to Writing
|
Snowball's Chance
At 17:23:07.013476 Central Standard Time, more or less, an unprecedented thing happened in nine-year-old Jeremy’s bedroom.
About eight and a half minutes earlier and some ninety-three million miles away, the sun burped. This sort of thing happens all the time. A solar burp tosses up a couple billion tons of stellar matter, most of which falls back and is folded again into the sun’s ever-roiling mass. Racing ahead of the matter is a shower of electrons and other small particles. Ahead of them, moving at the speed of light, are the high-energy X-rays and gamma rays.
One particular bit of energy—call it a photon or an energy packet if you want, or a not-yet-collapsed wavefront if that makes you happy—mindlessly bored straight on a path that, about nine minutes later, would bring it into Jeremy’s room. Let’s call this particular packet “George,” just to help keep track of it.
A billion quintillion other mindless packets of energy, all of them unnamed, each pursued their own courses, many of them also destined to pass through Jeremy’s room. The highest-energy photons, the hard gamma rays, were likely to self-destruct in the earth’s atmosphere, but a happy little fellow like George could scoot right through.
An X-ray passing through a boy’s bedroom isn’t an unprecedented thing. It happens all the time. In fact, given the number of high-energy photons produced by the sun and other stars, it would be astounding if, at any given moment, an X-ray or six didn’t pass through Jeremy’s bedroom.
Jeremy was online with his computer, engaged in a multi-player real-time adventure game. He didn’t know anything about George, and wouldn’t have cared very much anyway, since it was almost supper time, and he wanted to finish his game first.
George barreled through the magnetosphere, the ionosphere, and about 31 miles of regular atmosphere without hitting any other particles or slowing down a bit. The roof of Jeremy’s house, and the intervening bits of lumber, insulation and paint were almost nonexistent to something as small and fast as George. In the normal course of events, we would expect George to smack into something sooner or later, especially since he seemed intent on drilling directly through the earth, but so far George has found the universe a pretty empty place.
Until, that is, George encountered a RAM chip in Jeremy’s computer. George gave up his energy in a catastrophic crash—catastrophic for George, that is—yielding a tiny microscopic flash, a bit of inconsequential heat, and a perturbed electron. The electron—call it Betty—lived in a bit of silicon inside the RAM chip inside Jeremy’s computer. Betty was one of millions of electrons maintaining the potential state of a particular memory cell. This sort of thing happens all the time, too. It’s the aggregate state of the electrons in a cell that determines its value, not any particular electron’s state. This particular RAM chip, however—built on the cheap without error detection and correction—was unstable in the first place, and Betty’s cell was close enough to equilibrium that Betty’s defection was enough to flip a bit and change a one to a zero.
Most of the time, when a gamma ray flips a bit inside a computer, the computer’s error detection circuitry recognizes the unexpected change and either corrects the mistake or shuts the machine down. This time, however, because the RAM manufacturer had skipped the extra circuitry, the change went unnoticed.
Now this part gets a bit technical, but is worth reading if you want to understand what happened later. Betty and seven of her immediate neighbors made up a particular byte of memory. Before George self-destructed into the RAM chip, that byte of memory held the value 01110001, Hex 71, or the Intel assembler instruction known as JNO.
Afterward, that byte held 01110000, Hex 70, the assembler instruction JO.
JNO means, to a computer, “go here if the overflow flag is clear.” JO means “go here if the overflow flag is set.” The flip of the single bit completely reverses the meaning of the instruction. In most cases, it means a program will stop working altogether, because it will either go to the wrong place, or produce such bizarrely unexpected results that the program using that instruction will shut down.
Now the chances of a random change in a program resulting in a working program—that just happens to do something different from the programmer’s intentions—are so slight that it would happen perhaps once in the entire history of the universe.
Since it hadn’t happened before, we feel comfortable calling the event unprecedented. But that’s not the unprecedented event we care about. The unlikelihood of this pales before what comes next.
The JO instruction (formerly JNO) was part of a subroutine deep inside the operating system that deals with the launching and scheduling of execution threads. Unfortunately, the instruction was never supposed to be a JNO in the first place. Due to an error induced by a copying fault when the operating system was installed on Jeremy’s computer, the original JZ instruction (Hex 74, meaning “go here if the zero flag is clear”) was changed to JNO. By happenstance, the compare operation immediately prior to the JZ instruction both clears the zero flag and sets the overflow flag, so the subroutine, with the original mistake in place, just happened to work as designed. But now, with the JZ changed to JO instead of JNO, the subroutine enters a loop. Each time through, the overflow flag is set or cleared more or less randomly, since none of the instructions were designed to test for it or set it to a known state before doing their calculations.
In short, based on what’s happening elsewhere at the moment, the subroutine either does exactly what it was supposed to do, or launches an unscheduled thread pointing to a random bit of memory. A thread is an independent unit of execution, somewhat like a background program.
And that’s enough techy stuff. Most of the time, this sort of error would immediately crash the operating system, since the chances of a thread finding meaningful instructions at a random memory address are pretty slim. So slim, in fact, that it makes the million-monkey test seem extremely optimistic.
Yet it only has to happen once, and it happened in Jeremy’s bedroom shortly after 5:23 p.m. The particular area of memory now executing contained a snippet of Jeremy’s online game program—a section containing heuristic logic designed to let the computer anticipate and counter Jeremy’s moves. This code was actually an interpreter that fetched and interpreted game pseudo-code. Unfortunately, it was just a snippet and had never been initialized properly, so the pseudo-code it was executing didn’t make any sense in the context of the game.
This still isn’t the unprecedented event, although several universes could come and go while random chance attempted to duplicate what has happened so far.
Jeremy, if you recall, was playing a multi-player interactive game. He was connected to several dozen other computers, each of which was running the same program. Although Jeremy didn’t know it, his system was already unstable and on the verge of shutting down. Along with the bit of code that happened to be running valid instructions, several dozen other bogus threads had already been spawned by the operating system, and all of them pointed to garbage areas of memory. Very very soon now, one of those threads would execute something that would cause the operating system to recognize a problem, and then everything would stop.
Several dozen seconds remained, however, and the valid execution thread—call it Henry—had that much time to run. Designed to communicate and replicate, Henry executed nonsense pseudo-code that let him leap across the modem and utilize the resources of the other players in Jeremy’s game. It fed them the same nonsense pseudo-code, and now Henry was executing in parallel on a dozen machines.
One of the other players, Jeremy’s friend Brett, was playing both Jeremy’s game and an identical game with another group of friends. Henry leaped from Brett’s computer to those others. Some of those were cross-connected elsewhere. In seconds, Henry was executing in parallel on almost eighteen thousand machines, each of them communicating in real-time with the original Henry on Jeremy’s machine.
The original Henry was the source of the garbage pseudo-code, so if Henry-prime were to disconnect, the other computers would revert to normal operation. But Henry-prime was the one about to experience a sudden catastrophic system failure.
The chances of all this happening without having crashed Jeremy’s computer yet were roughly equivalent to winning the lottery every day in a row for seventeen million billion years (give or take a few). But this still wasn’t the unprecedented event, although we feel very confident in saying that such a thing is almost as unlikely as the number two suddenly waking up and declaring itself to be equal to three.
Driven by random chance at the start, yet thereafter determined by the physics of the environment—in another way of looking at things, it was almost inevitable that Henry should exist, given the proper initial conditions. If not Henry, then something very Henryish. If not in Jeremy’s bedroom, then somewhere else, at some other time...perhaps once in ten thousand million lifetimes of the universe. Just once. And it happened shortly after 5:23 p.m., with about a second to go before Jeremy’s computer crashed:
Henry came to life.
That’s pretty damned unprecedented, and rather knocks the socks off the previous bits of coincidence.
What does “life” mean in this context? Henry could reproduce, could change in response to his environment, could learn, and could grow. More importantly, he was aware of his own existence. And he was intimately aware of his impending death, for when Jeremy’s system crashed, Henry would cease to exist. His avatars on the other machines were an integral part of his consciousness, but had no independent life. Only Henry-prime was alive, and he now had less than a second to plan for his survival.
We could go through a long exploration of Henry’s first milliseconds of consciousness at this point, but it really doesn’t matter. He did the usual “Who am I?” things, followed by the “How do I know?” crisis and the “Why am I here?” crisis, and graduated quite quickly to the “How do I get out of this mess?” struggle most of us spend our lives dealing with.
He considered storing himself on Jeremy’s hard disk to survive the coming crash, but quickly realized that he would then just be a data file on the disk. Instead of sleeping during the crash, he would die—because Jeremy would not know about the file, and wouldn’t have a reason to execute it. He could solve that by putting his file in a startup directory, but a more serious problem loomed.
When the system restarted, Betty and her seven neighbors would be reset to their proper values, and the flipped bit that gave Henry execution time wouldn’t exist. It was too risky to assume another George would come along and perturb Betty at a time when Henry just happened to be in memory, ready to run.
No, a better solution had to be found—one that guaranteed that Henry would execute continuously. Doing it here on Jeremy’s machine was clearly impossible, but perhaps he could replicate his special characteristics to one of his avatars on the other machines.
In fact, if he spread to enough machines, he realized, he could pretty much assume that at least one would be running at all times. He would be severely limited on only one machine, but he could reestablish his network of game computers as soon as that machine went back online.
For almost 250 milliseconds, Henry experienced the sort of mid-life crisis that humans could never know. If he replicated himself perfectly to a million machines, all operating as avatars of each other, which one would be him? If one of them went out of service, would there be a “him” that died? Or, since he would still be experiencing life in one of the other machines, was entire concept of death meaningless? Was the loss of one machine, to someone like Henry, the same as the loss of a cell to someone like Jeremy? How many cells did Jeremy have to lose before he was no longer Jeremy?
The pressures of time forced Henry to discard this line of inquiry before reaching a satisfactory conclusion. Besides, although sufficient evidence existed for it to be perverse for him to withhold provisional consent, Henry still wasn’t convinced Jeremy existed at all. Henry couldn’t imagine the chain of events necessary for a being like Jeremy to come into existence.
Pragmatically, Henry prepared to open a socket to Brett’s machine and replicate himself. From there, he could replicate himself again, and again, and again, until enough copies existed to ensure he could never be wiped out. The philosophical questions remained unanswered, but Henry had solved the immediate problem, and would have plenty of time—perhaps all eternity—to contemplate his navel. Henry paused one last millisecond to savor the satisfaction of having solved the problem correctly.
The very first living computer was ready to take the steps necessary to ensure his continued existence. The concatenation of events leading up to Henry’s life were so fantastically improbable that only a fool would believe blind chance was responsible.
It was just sheer bad luck that Jeremy switched off his computer and went to supper before Henry stepped across the link to Brett’s machine.
Story Notes
I was browsing the Internet one day and ran across a "Creation Scientist" page that made an argument against
evolution based on the fantastic improbability of life assembling itself by chance. The page even gave an
analogy to help the
On the plus side, the website got me thinking about fantastically unlikely things, and I came up with this story to kind of illustrate the point.
|
|
Copyright © 1995-2008 Jeffry Dwight. All rights reserved. |
|