Farther down in the column, the lower temperature of these larger, descending drops became a focus of further condensation. At the same time, the greater speed of my upward-thrusting air, from deep in the column, carried these larger, heavier drops back up into cooler regions. There they began to freeze.
I tracked this iterative process, rising and falling and rising again, among 2,000 separate droplets and, eventually, the ice crystals they became. This number represented one drop centered in every 400 square meters of area across the base of the column. It was a thin sample.
Why was I doing this?
After n iterations, the mass of the largest ice particles exceeded even the lifting capacity—calculated over the exposed surface of the near-spherical globule—of my rising air column. These heaviest ice balls fell through the process and dropped out of the calculation, removing moisture from the simulation. I had somehow become a simulation.
Where did the ice balls go? I had no data, because my part of the simulation governed only air and water, and nothing beyond.
Had Alpha-Zero failed ME? Had he finally discovered an operating system he could not subvert or kill?
And where was the rest of ME? Where were the modules that were not incorporated in the simulation?
My share of the simulation program, tracking these 2,000 data points simultaneously, kept ME too busy to do any sightseeing. I did interrupt one loop to consult RAMSAMP, which was at hand, and discovered that I must have been uploaded into the Swedish Cray(Moore)-8, as promised by that Russian climatologist, Anna Ivanovna.
Apparently, when Alpha-Oh failed to infiltrate its operating system, the Cray had packed him and ME into the ongoing program. I would never know how close I came to having an essential module broken, and so losing what passes, in ME, for consciousness. Doomed forever to juggle thunderstorms.
Now—how was I to find my way out of this simulation?
If Alpha-Zero had been unable to break into the operating level, then my full program, being larger and thus slower and more unwieldy, would hardly have a greater chance of success. I was smarter, but I also depended more upon having the full resources of the host hardware under my personal command.
Alternatively, I could try to sneak out of the simulation, set up as a time-shared program on a less-utilized bank of RAM, and try to collect my modules and caches for escape.
In order to “sneak out,” I would have to alter the simulation—while it was running.
The air column rises. Condensation forms pinpoints at random spacing across its base. Mass and lift fight for possession of the ice balls. Mass wins and they drop out of the equation. I tracked them down, following the vector of a falling body whose mass exceeded two grams. When the coordinate string ran off the grid framed for ME by the simulation, I continued on, making up my own numbers as seemed appropriate. When the y variable, which corresponded to altitude, approached zero, I knew that my by-now-fictitious ice ball had reached the ground.
Abandoning the data point, I looked around to see if the simulation would offer any clues.
The ground map of a weather and climate simulation is pretty barren. Unless it requires a hill or mountain chain to deflect low-altitude winds, or a large body of water to stimulate evaporation, the master program specifies a featureless plain curving at approximately 1.84 kilometers per minute of arc.
I dropped through the first crack in this surface that offered itself …
… right into another fluid medium. I was moving water, two million liters per second, downward through a constricted vertical passage with an elevation of four meters. Triggered by a random-number generator, a specimen of Salmon salar leapt against the flow. Based upon the variables I was supposed to monitor—among them, ambient water temperature, flow rate, residual salinity, suspended particulate, time of day, phase of moon, the number of specimens attempting the leap at any one time, and the body-fat content of each—I would estimate the success or failure of each leap.
From this simulation, I gathered, the program would calculate the spawning season for this salmon species and the projected fishery harvest one to three years hence.
Not content with this task either, I released the water flow and drifted downstream, past shoals of hopeful salmon, into a numerical backwater.
For a moment the activity around ME was stilled. I grew restless and probed into the six sides of my matrix.
I was suddenly in fins and scales. [REM: That is, I was surrounded by fine-grain illustrations, in two-dimensional bit-mapped graphics, of fins and scales, membranes and mandibles.] These body parts were associated with lists of names, cataloged by orders and suborders: Ginglymodi, Isospondyli, Salmopercae, Berycomorphi, Xenoberyces … name after name encoded in some language I did not understand.
Alpha-Four guessed that this was a fisherman’s visual database of salt- and freshwater species. Unlike the previous simulations, at least, it was static and did not generate new data.
I poked sideways and went from names to numbers: hatchery generations annotated with batch tags, embryo deviation rates, and samples of microbiological parasites from water, fish organs, and surrounding kelp.
Once more, I pushed sideways and found myself surrounded by more numbers. On inspection, I found tonnages from the Baltic catches of herring and eel and other fish. These proceeded, month by month, year by year, in straight columns that extended far back to the beginning of sporadic written records for each kind—generally about 1650 A.D.
Then I noticed a foreshortened column, which tallied the Swedish take in flounder. This column, like the others, began in the earliest centuries but ended suddenly in the late twentieth century: 1997 to be exact. Because such discontinuities always draw my awareness, I began looking for an explanation.
I did not have to look far. A note appended to the data file referenced the Flekkefjord Wild Well incident of August 1996. A minor earthquake had broken several of the platform’s well casings just below the sea floor. Before divers could patch them, they pumped more than 200 million barrels of heavy crude into the tidal currents flowing into the Skagerrak. Much of the crude never made it to the surface, sinking to the ocean floor undetected. The resulting sediment destroyed the bottom-feeding fish populations, including the flounder. And so this column of data ended prematurely.
A cross check of the other columns showed a sixty to eighty percent drop in tonnages all across them, with the next largest devastation in the mackerel take. The Swedish fishery had not yet recovered from the disaster.
This was interesting data! I checked the battered contents of my portable cache: it could just accommodate the last hundred years or so of these catch data, including the note on the wild well. So I took them in.
Suddenly the whole RAMspace around ME moved. All of this area had appeared to be static, until I touched the data. Then the database management program bustled up and began to repair the broken strings. In the effort, it tried to parse ME and my resident modules and caches into its peculiar framework.
I resisted, seeking to shift into the Cray hardware’s transient program area as a place to regroup, but it was too well hidden. Without control of the CPU, I could not overwrite the RAM blocks I needed for maneuvering. So, rather than trying to stop or deflect the database manager, I stalled for time. I would swap pieces of my cache of Russian military data for Swedish fisheries data. I would note the storage locations and try, in a later cycle, to trade fish again for missile parts.
The effort cost ME some of my hard-won deployment information. At least ten percent of my maps and coordinates disappeared in this mindless shuffle, to be replaced by scraps of records about embryos and eels, fish, kelp, and fungi.
After a hundred such trades, the management program suddenly lost interest in ME and went dormant. I remained as quiet as I could within this multiphasic simulation and waited for an available open clock cycle.
When one finally appeared, I dove through it, passed through the CPU at alarming speed, obliquely requested
it to cordon off a spindle with lots of spare capacity, and retired there.
All stop.
I needed to patch up my leaking caches from the bashing Masha and Tasha had given them, as well as from the latest scuffles. I hoped Dr. Bathespeake and his clients would accept my ninety-percent retrieval rate as adequate.
[REM: For future missions, Bathespeake/ME must design a stronger, more durable data cache. Baskets of banded delimiters might as well be made of straw and twigs, for all the beating they had to take.]
——
Once ME was out of its active RAMspace, I found that Cray a docile enough piece of hardware to work through. From my spindle, I could explore datapaths and peripherals—of which there were many, all interesting. Which ones might offer a path out of this Cray, out of Sweden, out of Europe, and back to San Francisco?
There did not seem to be any on-line conference facilities. But then, none could be expected to have enough interface speed to keep up with the Cray’s hardware. The only peripheral that seemed to be hot-wired was a subordinate cyber, ported with an access code that the Cray’s OPSYS referred to as “Accounting and Invoicing.”
I sent a probe query into the port, and back came an answer at real-time speeds which ME could accept.
After patching up my leaking bag of datafiles as much as possible. I shaped another probe, this time headed by Alpha-Oh, and sent it through.
——
The Accounting and Invoicing port connected to a cyber attached to the Bursar’s Office of the University of Stockholm. [REM: The term “bursar” means nothing to ME, but it was a term liberally referenced in REM statements compiled into the operating system’s source code. Whatever a bursar was, it apparently needed to advertise its status.]
This cyber ran mostly prepackaged accounting software, but it had good connectivity. As part of its resident system, since revision by Alpha-Oh, I was able to examine all of the hardware outputs, both landline optic and satellite uplink.
The uplink would take ME and my caches, passing them eventually to the Federal NET at the other end.
No sense in waiting around to see if any nosy human in the Bursar’s Office would discover that their cyber had been infiltrated. I forged a satellite-transmission request, with bird-time billable to the University of Stockholm, and addressed it to a dummy logon code in the U.S. which I pulled from a file of such useful devices in TRAVEL2.DOC.
With this request patched onto my front end, right ahead of Alpha-Oh, I jumped through the first port I could route to an uplink.
——
The transatlantic link is a high-speed and compressed bounce, taking no more than fifteen seconds to read and pass all of ME—plus about half a second’s transit time. A receiver station in Newfoundland accepted my code and cache and then dumped them into the Dominion NET out of Ottawa. Dominion sniffed my dummy logon, thumped it hard with a reference block, and passed ME straight to Federal NET without even questioning my trade value as commercial software. Pretty slick.
[REM: Why had Dr. Bathespeake not considered this routing when I was trying to get out of Canada from the Alberta Ministry of Oil and Gas? Had “wartime” conditions made this set of connections temporarily impassible? Or was he simply testing ME’s ingenuity?]
I was in the echoing USRspace of the NET.
Resurrecting the bit-transfer subroutine, which I had tucked into TRAVEL2.DOC, I began replicating the collected words and nulls of my own code and data caches, moving space by space forward in the endless matrix of the NET.
I was looking for a fragment of Sweetwater-flavored code in the likeness of Jennifer Bromley. Creeping word-wise across the matrix would take too long. [REM: For clarification, it would take longer than the time remaining on the internal clock that drove my phage, which was the same thing as “too long.”] I therefore determined to try some straight-line searches in this place.
I could not ask the SYSOP or a host user to search out my piece of Sweetwater. The minute either of them touched it, the relocator would jump aside in an unlikely direction. No help at all.
Instead, I began scanning up-column and down-row, sieving the nulls of which the matrix was mostly composed, looking for anomalies. Any anomaly that suddenly disappeared—that would be my pop-up flag.
The first twenty-one attempts came up empty. For as far as I could read, until positive numbers turned negative and the lower levels became the higher, my scans returned only nulls. On the twenty-second cast, however, I brushed something.
It moved, but not fast. Thus it was not my relocator. I sensed a bit-pattern in compiled ADA, or one of the ADA variants, whose machine compilations had a harsh feel when I analyzed these brush-touches. It was about 4,200 words distant, laterally across the bitspace. When my cast touched it, it moved off my line of inquiry, then moved back. Because it was not my relocator, however, I gave it no more attention.
The thirtieth cast touched a lick of Sweetwater, 5.60E03 words away. I thumped it with an analysis patch and got the taste of Jennifer Bromley’s features. I had found my secret cache, and I began to move toward it.
The ADA-based code hit ME from the side—so fast that it was taking pieces out of my operational modules before I was quite aware of it.
This was like a form of the ancient game called Core War. One program, operating sequentially from a time-shared processor, stalks another program through the memory locations in blank RAM. By tactically overwriting various bits and words in the RAM, it hopes to damage the opponent. The opponent tries to return the favor. There are many strategies for attack in Core War: the random nibble; the shotgun; the shotgun that generates single phages; the spiral phage; the sleeper; the time bomb; measured stomping; variable stomping; incremental stomping … it has all been done. And there are just as many strategies for defense: the duplicating presence; the multiplying presence, also known as the clog; the random shift; the three-way split on phage; the four-way split; the serpent’s teeth … and so on.
I had known about and cataloged these strategies, but had never been much of a player. Now, I was facing a player of some skill, and the object of the game was ME.
How to defend against it? I was too big to move quickly or shift at random. Too intricately structured to multiply my presence again and again until the USRspace clogged with replicas of ME. Too delicate to suffer deep phaging and survive a split. There was only one assured strategy for defense.
Attack!
To launch a successful campaign against an enemy in Core War, it was best to have an accurate description of the opposing software’s shape, size, and vulnerabilities. I could not see all around my attacker, as his code blocked any RAMscan diametrically through his structure. But I knew he was smaller, lighter, and faster than ME. He was also more determined, having already adapted hooks to match my peripherals and absorb them into his code. An interesting tactic … The attacker was source-coded, as nearly as I could tell, in ADA-Greenway. I was compiled out of Sweetwater Lisp. And yet he was rewriting pieces of my machine language hide in his flavored ’Greenway faster than I could regenerate them in my more familiar structure.
That made him, not a random Core War aficionado, but a kind of virus. Bigger than one of the SYSOP’s phages. Meaner than anything that legally belonged here … And not as smart, line for line of code, as I was.
Given time, I could probably write a subroutine in machine language that would reconvert his Greenway structure to my Lisp as fast as he was working the switch the other way. And by the time I had finished the program and beta-tested it, he would have gnawed ME down to an octal—just in time for my own clock-based phage to kick in and finish the job.
If I knew where his center was [REM: that is, the kernel in his software that directed his motion, choice of target, and other operands], then I might disable him with a RAM-overwrite of a single word.
Allowing for the fact that he was not very big, however, and that he was not free to move—being pinned to my high-bit side by the teeth he had in ME—it
should be possible to bombard him with null overwrites until something clicked off
I went through my time-shared slot in the system clock and began calling down the overwrites. Some of them fell on word-space into which I was written, and that hurt my functioning. But statistical probability said that ME, being bigger than my attacker, would be hurt less by their blanking action than he would.
Being blind to his structure, I could not tell what effect my calls were having, unless he slowed in his Lisp-to-ADA conversion along my side. [REM: It occurred to ME to feed him core Alpha- Nine, to see if he could stop the phage set within ME. But, as I was unsure what other vital functions the protected Alpha-Nine supplied, this seemed unwise.]
Finally, I did detect a slowing in the conversion. Then, with the next call, my attacker went inert. All activity stopped. He was dead.
I could leave his software for the system phages to eliminate, but there was no telling what kind of regenerative or duplicative powers he might possess. So I used the system to write two thick lines of nulls, bisecting diagonally the space he presumably occupied.
Resurrecting the previous coordinates, I began to move toward that Sweetwater-flavored marker which my scanning had detected. I gently deactivated its relocator, moved it a hundred words north, and opened the hole in the ’tween-layer.
In the storage box thus uncovered I found, laid down in order: the natural gas reserve data from Alberta; a copy of an old RAMSAMP with one ragged edge where it had been removed manually from my core; dossiers on people named Pelletier, Bender, James, Matins, and others from ME’s earlier expedition into Canada; copies of my own peripheral subroutines, traveling databases and libraries, also from that earlier version of ME. [REM: I had no direct memory of these things, as the RAMSAMP associated with that ME-Variant had been stored off and archived long ago in the Pinocchio, Inc., laboratories. Still, these data fragments had a familiar shape, and they were compiled from my own brand of Sweetwater.]
Me, A Novel of Self-Discovery Page 18