by Rudy Rucker
“If someone could set up message-passing between Cyberskate and the Adze code it would be feasible,” said Russ. “But neither of you amateurs has a prayer of doing it, and I’m not about to. Guess what?” Russ mimed a false hobbit smile, then scowled and began yelling, “Marketing has gotten Brie and Gyorgyi to sign off on a schedule which gives Sun Tam, Jerzy, and me six days from now to give Developer Services and Quality Assurance some working code. That’s next Monday. So get your feeble butt off the Sphex! For future reference: that’s what ‘gronk’ stands for!” Sketchy sprang up and Russ plopped himself down into the Sphex’s Steadiswivel chair. I sat down next to him, and we each pulled on two gloves.
Sketchy had ridden the viewer into a cyberspace library that looked like a British club, with parquet walls and leather furniture, though the tuxedos of the people in it were odd as surrealist cartoons—a giant duck, a stepping razor, a clam with teeth, and a staticky bit of cloud. To make it the gnarlier, the tuxedos were morphing themselves among several alternate shapes as we watched. The duck slowly transformed into a rabbit and then back into a duck. The cloud molded itself into a series of tornado shapes, and then into something like a Corinthian column.
“This is the Cryp Club library,” explained Sketchy. “No phreaks allowed.”
“How do you tell who’s who?” I asked.
“We all know who we are,” said Sketchy. “Cryps work for money, and phreaks just do it to be weird, though sometimes a phreak will take money, too. Phreaks are younger, mostly. It’s almost like two gangs. If I showed up in the phreak library, somebody would try to burn me.”
“Speaking of cryps and phreaks,” I asked him, “do you know anything about Hex DEF6?”
“Hex DEF6!” Sketchy looked surprised. “That’s the third time I heard that in the last two days.”
“Where?”
“Yesterday it was written on the wall in spraypaint over there.” He pointed toward one of the library walls that swept by as Russ steered us toward the exit node that hovered in the middle of the library like an oversize world globe.
“It’s very incorrect,” continued Sketchy, “to deface the Cryp Club library. So of course nobody would cop to it. I cleaned it off myself; it was my day for maintenance duty. Maybe a phreak got in and did it. If we catch him we’re going to burn him bad.”
Russ jumped into the exit node and brought us out in the Bay Area Netport. The huge Beaux Arts architectural space stretched out before us, with spherical hyperjump nodes all along the ceiling, floor, and walls.
“The second time I heard of Hex DEF6 was this morning,” continued Sketchy. “A phreak was trying to bust into the West West node. The dude’s tuxedo looked like a canvas mask with a zipper instead of a mouth. I iced him and he left, but before he left he gave me the finger and said his name was Hex DEF6. And now you’re asking me about him. That’s three times in two days. So, yeah, what is Hex DEF6?”
With quick jerky movements, Russ was steering the viewpoint across the Netport to the West West node, a shiny copper ball decorated with the West West WW logo that was, Janelle had told me, the same as the old Meta Meta MM logo upside down. We slid through the surface of the ball and saw an aerial view of the West West building plus a virtual housing development of Our American Homes set up out in back of the parking lot. At my request, Sun Tam had installed 256 of them; it was as many as the West West computers had room for. It took a petabyte of memory to maintain this big a subdivision of Our American Homes.
“I saw that zipper-mouth Hex DEF6 with a bunch of GoMotion ants a couple of weeks ago,” I said. “He told me he’d injure me and my children if I didn’t work for West West. And this week a kid followed me home and said that he was Hex DEF6, or that he worked for him or something. But you don’t think West West is behind it?”
“Sounds like a phreak burn to me,” said Sketchy.
“Sorry to interrupt these exciting spyboy adventures,” said Russ, using the standard code hacker insult for cryps and phreaks. “But where’d you put your Adze code, Jerzy?” He was hovering over my virtual desk, right there in the model of my cubicle in the pit.
“I’ll get it.”
I pulled open the virtual desk’s top drawer to reveal a three-dimensional chrome box with a socket and a keyhole in it. Written on the box in flowing gold cursive was “SuperC/Kwirkey For Adze, Jerzy Rugby.” There was no way to pick the box up, as I’d permanently attached it to the cyberspace aether—meaning that there was no way to change the box’s location coordinates without destroying it. To use the software you had to unlock the box with a key. I popped up a privacy shield.
The key I kept hidden in my lower drawer, which was filled with a mess of several hundred random solid 3-D images. Today I had the key hidden inside a swordfish. I took the thrashing swordfish out of the drawer and zoomed down onto the third spine of the dorsal fin. Stuck down at the spine’s base was the billion-bit key I’d generated last time I locked the program. It looked like a wriggly piece of wire with a round handle on one end. I pulled the wire out from the base of the swordfish’s fin-spine, put the swordfish away, and stuck the key into the software box. Now it was unlocked. I turned off my privacy curtain.
Russ pulled down a cable icon with his data glove. He stuck one end of the cable into my software box’s socket and held on to the other end of the cable as he flew up out of the virtual West West building and over to the nearest model of Our American Home. Russ pushed the doorbell and Perky Pat Christensen came to the front door and opened it.
“Walt and I are so glad you came. Dexter and Scooter are here as well!” She moved with the angular abruptness of a virtual Barbie doll, which was no surprise, as GoMotion had licensed the CyberBarbie surface meshes and joint-constraints from Mattel. Well, actually, GoMotion hadn’t licensed the info, Trevor had simply crypped it from Mattel. And then Sketchy had crypped it from GoMotion. It seemed Mattel didn’t have a clue.
We flew on into the kitchen, Russ still holding the infinitely stretchable cable in his hand. Virtual Squidboy was sitting there in his nest, his food cord plugged into the wall. Russ opened the little door in Squidboy’s back, stuck the cable into the back of Squidboy, and squeezed the cable’s Download lever as if he were filling Squidboy up with gas. Once the download was over, Russ pulled out the cable and said, “Kwirkey Run.” Squidboy sat up and looked around. Russ flew up to join me on the ceiling.
Young Dexter Christensen wandered into the kitchen and glanced up at us. In this simulation, we looked like gloved hands attached to matchstick arms, but Dexter talked to us just the same.
“Wow! Are you startin’ up the robot?” asked Dexter.
We didn’t bother answering him.
“Hello Squidboy,” chirped Squidboy, waving his tentacle.
“Hi, Mr. Robot,” said Dexter. “Do you wanta play?”
“Wanta play?” echoed Squidboy. We’d started him from a blank state and he was in language acquisition mode.
“Let’s go in the living room,” said Dexter and reached out toward Squidboy’s left-hand pincer-manipulator. To my horror, instead of gently taking the boy’s hand, Squidboy darted rapidly forward and slashed into the boy’s abdomen with inhuman fury.
“Hello Squidboy,” said the virtual machine, peering at the trashed geometry that had been the lad’s body. “Wanta play? Hello Squidboy. Wanta play?”
“Kwirkey Halt,” said Russ, and Squidboy and the Dexter-fragments stopped moving. Russ turned to me, a savage gleam in his eye. “What do you bet it’s your fault?”
“My code was fully tested for the Veep,” I spluttered. “Keep in mind that the Adze is a different machine. And of course it could be your port that’s causing the problem.”
“You wish,” said Russ, then spoke again to the Kwirkey operating system that was running this simulation. “Kwirkey Debug!”
A ray-traced retrocurved chrome figure appeared in the cyberspace of the kitchen.
“I am Kwirkey Debug. I am ready.”
&nb
sp; Rather than being the tuxedo of a living user, this was a so-called daemon, a construct projected by autonomous software. In cyberspace, daemons had taken the place of menus and command-line interpreters. The GoMotion ants were daemons, too, though daemons of a much different order.
“Hello Kwirkey Debug,” said Russ. “I’m Russ and this is Jerzy. We want to set a breakpoint.”
“Which kind of breakpoint? At address, changed memory global, expression true, or hardware interrupt?” inquired the daemon. S/he spoke in a cool androgynous tone. Some goofing hacker had set the daemon’s tux to morph-wander slowly about in a parameter space that let her/im vary between male and female and between fat and thin. As we watched, the daemon changed from a fat man to a muscular woman to a skinny man—but all the while s/he was made of rippling, reflective chrome. Hackers were suckers for ray-traced chrome, also it was computationally cheap thanks to the new quaternion-based Mori-Kuzin hack, which had been the exclusive trade secret of Unisys for about a week until a phreak called Phineas Phage had broadcast the source code all over cyberspace.
“Break when the following expression is true,” said Russ. “Squidboy’s pincer intersects Dexter’s chest.”
“Breakpoint is set,” said Kwirkey Debug.
“Reset and run,” said Russ.
The kitchen flickered as Kwirkey Debug reinitialized it. Now Squidboy was in his nest, and Dexter was coming in again. Kwirkey Debug stood off in a corner, staring at Dexter’s chest.
Dexter Christensen glanced up at us, moving his head like a very old man.
“Wow! Are you startin’ up the robot?” slurred Dexter. His voice was deep and grainy. The code ran substantially slower with the breakpoint on, so that Kwirkey Debug could be sure not to miss the exact instant when Squidboy hit Dexter.
“Hello Squidboy,” groaned Squidboy. He sounded like the cartoon voice of a giant octopus in an underwater treasure cave.
“Hi, Mr. Robot,” oozed Dexter. “Do you wanta play?”
“Wanta play?” mocked sepulchral Squidboy.
“Let’s go in the living room,” drooled Dexter and reached out for Squidboy’s pincer. Moving at a speed that was fast even under slo-mo, Squidboy swung his left arm forward in a hard, flat arc that ...
“Breakpoint,” said Kwirkey Debug. “Squidboy’s pincer intersects Dexter’s chest.”
Squidboy stood frozen in place with the tip of his left-hand manipulator poised daintily against Dexter.
“Show us a chart of Squidboy’s attribute variables,” said Russ.
Kwirkey Debug gestured with two hands and a small chart sproinged into existence. On the left of the chart were the names I’d assigned to Squidboy’s variables, and on the right were the variables’ numeric values. We scrolled the chart up and down, looking things over.
“How about that variable there called stroke_persist,” said Russ presently. “It’s set to 4,294,967,289.” He paused gloatingly. “You jack-off.”
“Oh hell.” Stroke persist was supposed to be a small integer like three or minus eleven or something. It measured how hard Squidboy pushed against things. With a stroke_persist value of four billion, Squidboy’s normal motions would become amplified so much that he must perforce slash into those around him. How had stroke_persist gotten to be four billion?
“Kwirkey Debug,” I said. “Please set a breakpoint for the following condition: Squidboy’s stroke_persist is larger than four billion. Then reset and run.”
“Yes,” said Kwirkey Debug.
On the third run, the breakpoint tripped as Dexter reached for Squidboy’s left hand.
“Show us the source code with the instruction pointer,” I said.
Another chart appeared, and *bingo* there it was, our breakpoint had kicked in right after an instruction that set stroke_persist equal to -7. This is what it was supposed to do; the 7 meant “move softly,” and the minus meant “you’re using your left arm.” But Russ’s Kwirkey translator had decided that stroke_persist was always to be a positive number, and if you view a thirty-two-bit representation of -7 as a positive number, you think it’s 4,294,967,289.
I started trying to explain this to Russ, but instead of letting me finish he rudely yelled that using minus for “left-hand” had been a stupid trick in the first place, and that now it was worse than stupid, it was unusable since Squidboy had three hands. Funny I hadn’t thought of that. I recovered by pointing out that Russ had no business assuming that all of Squidboy’s state variables were positive integers. Russ countered that he needed to assume all numbers to be positive so that the ROBOT.LIB calls could be made at maximum speed, thus guaranteeing that “his” code would run faster than the “kludgey” code for the Veep. He said that if I wanted to keep track of left, right, and middle, I should use a separate flag variable instead of trying to do it with negative numbers. I began to respond that . . .
“Let’s go ahead and fix the first bug and see what happens next,” said Sun Tam quietly. Russ and I had been so absorbed in the Sphex’s cyberspace, and in our quarreling, that neither of us had noticed when Sun sat down next to us.
“Edit code,” said Russ to Kwirkey Debug, and the silver figure produced what looked like a large pink rubber eraser. “I ONLY MAKE BIG MISTEAKS” was printed on the eraser—some West West hacker’s idea of a joke.
“This is too stupid,” I said. “I’ll fix it on my own machine. Let’s meet back here in an hour.” I went back in the pit and squeezed all the negative numbers out of my program. It was, as Russ had suggested, a matter of using a two-bit hand_flag variable to do what the minuses had done. I used hand_flag binary values 00, 01, and 10 to stand for, respectively, the pincer, the tentacle, and the humanoid hand. First the new code wouldn’t compile (in my excitement I’d left out a “;”), then it compiled but crashed (I’d forgotten to rebuild one of the sub-modules with the new header file), and then *siiigh* my quick fix was done. I rushed back to the Sphex. Russ and Sun Tam were waiting.
Russ downloaded the new code and said, “Run.”
This time Squidboy and Dexter made it into the living room.
“Hi there,” said Perky Pat brightly. She was sitting in an armchair watching television. Walt was passed-out drunk on the couch, and Baby Scooter was lying on the floor gumming a filthy teething ring. The screen of the virtual TV against the wall was painted with changing real-time network television. I could clearly hear the TV voices through the Sphex speaker. Just now a newscaster was saying that a judge had denied Stu’s pretrial motion to have my venue moved out of Silicon Valley. “So Jerzy Rugby’s state trial on charges of criminal trespass, computer intrusion, and extreme cruelty to animals is still scheduled to begin the week after next in San Jose,” the newscaster said. “Thursday, May 28. This network will be providing special coverage of that trial.”
I was so involved in listening to the TV that I wasn’t watching when Squidboy veered too far around Baby Scooter, lost his balance, and fell onto Walt’s neck. I looked just in time to see Walt’s head come off and fall onto the floor. It made a nasty thump.
“Oh, no way!” I cried. “Squidboy didn’t hit him that hard.”
“Let’s just fix it,” said Sun Tam. “Kwirkey Debug, reset and run to the point where Squidboy passes Baby Scooter.”
This time there was nothing grossly wrong with any of the values in Squidboy’s registers. We single-stepped the code forward, watching the numbers. The value of the direction_angle started doing something queer just before Squidboy fell over: it began oscillating irregularly between two, then four, then eight values, and then burst into what looked like totally random fluctuations.
“I recognize that behavior,” I said, talking quickly before Russ could start up with the insults. “That’s the period-doubling route to chaos! No problem. It’s because I use a nonlinear formula to damp the jitter out of direction _angle. I use a preset constant called FEEDBACK _DAMPER. But the damping’s not working anymore. We’re getting the opposite of damped feedback; we’re getting fe
ebdack, right, Russ? Ha, ha!” I was feeling hackish and manic. “Well, that’s just because the Adze is different from the Veep. All I need to do is tweak the FEEDBACK_DAMPER value. Kwirkey Debug, I want to edit the constant definitions file. And put away that stupid eraser.”
I changed FEEDBACK_DAMPER from 0.12 to 0.13.
“Compile, reset, and run.”
This time, instead of overavoiding Baby Scooter, Squidboy locked into a death spiral that wound around and around Baby Scooter until Scoot’s geometry was churned into crooked fnoor.
“I thought you said you had the Adze code wired,” snarled Russ. “You fucking loser.”
“It’s a chaotically sensitive system,” I cried. “I tweaked it specially for the GoMotion Veep with genetic algorithms. I’m not surprised it isn’t working yet. Even though the Veep and the Adze use the same Y9707 chip, their sensors and effectors are different in hundreds of ways. They have different bodies.”
“Your control algorithms seem to be very sensitive,” said Sun Tam. “You change the second digit of FEEDBACK _DAMPER and Squidboy kills Scooter instead of Walt?”
“Yeah,” I said. “And maybe the value halfway in between will work. Say 0.125. But maybe not. Maybe FEEDBACK_DAMPER needs to be 0.124. The only way to find the right number is through trial and error. And even if you get one parameter right, you might need to change it again after you change some other parameter. You’re searching a multidimensional chaotic phase space.”
“So you’re telling us that robot software is impossibly difficult to program,” said Russ flatly. He looked sad. “And the Adze is never going to work.”
“It’s not impossible,” I said. “It’s just that we need to use genetic programming to find the right parameter settings. That’s why I made Sun Tam put up 256 Our American Homes. We’ll use genetic programming and everything will be fine.”
“How?” asked Sun Tam.
“We put a Squidboy instance into each of the 256 Our American Homes, and select out, say, the 64 parameter sets that give the best behavior. Then we replace the worst 64 sets with mutated clones and crossovers of the genes in the top 64,” I explained. “And you leave the 128 medium-scoring guys alone, or maybe mutate them a little. On the next cycle some of the middle guys might do better than average, and some might do worse.” Russ was starting to grin. I was getting over. “So that we don’t have to monitor it, we give all the Squidboys some simple machine-scored task. To begin with, the task will be walking into the living room without killing anybody. And once it can do that, we try a different task. The process works, I promise you.”