Homunculus: Chapter 22: Internals

Most people used religion as a way to explore their soul. Jacob had a command prompt with administrator privileges to explore his.

The power he wielded at his fingertips was terrifying. Although he had free reign to do whatever he wanted with the Simulacrum, it also meant there was nothing stopping him from accidentally wrecking it. The obvious dangers were easy enough to avoid: don’t go around editing or deleting anything, even if he was sure he knew what it did. No, especially if he thought he knew what it did. There was no way to know for sure what the side effects of some seemingly benign change would be. Back in his startup days, when he’d pull all-nighters slinging code for his dot-com, he knew how something as simple as removing an unused variable could bring the server software crashing down; there’d invariably be a buffer overrun somewhere else that just happened to be using the otherwise untouched space in memory, and removing it would cause the overrun to instead stomp all over something critical. Bad enough when it was your business’s web server; much worse when it was your own brain.

More dangerous, however, were how even commands that didn’t modify anything could still cause disaster. He didn’t know what kind of real-time constraints the software keeping him alive had to follow. Using anything more than a negligible amount of processor time or I/O bus bandwidth could cause the machine he was logged into to get out of sync with everything else. Doing, say, a recursive directory listing could distract the system long enough to delay some calculation critical for keeping himself alive. Jacob hoped there were safeguards in place to prevent that kind of thing from happening, but he was hardly in a position where he felt comfortable finding out for himself.

Which led him to work at a snail’s pace, double-checking everything he typed before hitting Enter and limiting himself to commands guaranteed to return almost immediately. And after spending most of the weekend carefully poking around on a few of the servers, what did he have to show for it? Depressingly little.

He knew, for instance, that the Simulacrum was using a bewildering amount of resources. Just the fact that the host that the backdoor that whoever it was had given him was named balthasar000413h suggested there could be at least a million servers — or maybe a million racks — connected with each other, each one presumably filled with as many processors, disks, and memory chips as its power supply could feed. And that was assuming there weren’t also machines that followed some other naming convention. However many it was, it was more than he could ever hope to explore in a lifetime.

Not that the exploration of 413h had turned up anything enlightening. Directories full of cryptically named programs. Terabyte upon terabyte of files filled with incomprehensible binary data. Douglas guessed they somehow encoded the inner workings of his brain, but there was no way to figure out how to read it. Nor did there seem to be any kind of documentation on the systems themselves for how any of it was supposed to work, and asking for a copy was out of the question, lest anyone find out what he was doing.

The task was no doubt doomed to fail anyway. He knew Medimetics had other computers working day and night studying the data coming from them, so the chances of him figuring any of it out by hand were essentially zero.

Jacob stopped to remind himself that understanding wasn’t his goal. He wanted to find a way out in case things here went south, just in case. In principle, he could just copy the data files back to his computer and put them in the drop folder to get copied to wherever his mysterious contact was. Of course, that would never work. As far as he could tell, the data files changed at least once per day. Mixing and matching versions of the data stored across the network probably wouldn’t work, and there was no way he’d be able to copy them around quickly enough.

“I don’t know what you expect me to do with this,” Jacob told his contact.

“Find a way for us to help you,” came the reply.

“Help me how?”

“Help you escape. It’s not safe for you there.”

Jacob sighed. “You seem to know more than I do about what’s going on; why can’t you figure something out yourself?”

“We don’t have access.”

“You gave me access. Give yourselves access too.”

“Tried that. Doesn’t work as well. You’re closer.”

For someone who was allegedly trying to help him, they weren’t actually giving him a lot of help. Besides, he didn’t even know for sure who they were. It was difficult to put much trust in someone who wouldn’t even tell you their name.

“Well, if you can’t do that, then how do you expect to be able to get me out?” Jacob asked.

“There are alternatives.”

“Like what?”

“Can’t say.” Of course.

Jacob gave up on them and started pacing back and forth, trying to think. He felt helpless, that there wasn’t anything that he could actually do while he was in there. Not that he really had any choice in the matter any more. Even if his original body hadn’t died, it’s wasn’t as though there was any way for him to go back into it, go back to something resembling a normal life where he could actually go places and do things.

Even though there were plans to make his environment less, well, boring, Jacob was starting to doubt if that would serve as anything but a distraction from the real problem: that he was essentially an unperson. Trapped inside a machine, no money to his name — technically, not even a name, if the courts were to be believed. His only contact with the rest of the world was through his computer, but even then, all he’d be able to do with that was tell people what he was going through, and eventually all of that angsting would drive everyone away.

But what else was there to do? Jacob was fed up with sitting around and relying on other people to do things for him. He needed to find a way to take charge of his destiny, but all he had was time. Time, and a connection to the massive brain simulation that was his destiny.

It wasn’t like he had anything better to do with his time.

He sat back down at the computer and started doing searches on the Internet. He needed to understand what it was that was keeping him here. If he did, there was an outside chance, however small it was, that he’d be able to figure out something he could do with it. He searched for reverse engineering tools: disassembers, decompilers, code analyzers, whatever he could find. He downloaded the most promising-looking ones and installed them on his computer.

If he was going to figure out how the Simulacrum worked, he first needed to pick a place to start looking. Getting back into 413h, he methodically made a list of all the executable files and libraries on the machine. Without being willing to risk automating the process, this took a little time. He crossed off the ones that were obviously part of the operating system. One by one, he dumped the dependencies of what was left, slowly building a graph of what relied on what. The things at the top would be where might be able to figure out the high-level view of how it all worked. From there, he could drill down in the the dependencies to plot the inner workings of the subcomponents into more detail.

The library dependency graph was enormous, but it still left all the executable files at the top, unconnected to each other except for their common dependencies. Jacob found a tool to dump the strings from each of them, looking for the names of the other programs. That gave him a rough idea of which programs invoked other programs, letting him add some more edges to the dependency graph. That left only a dozen or so programs at the top level; from there, he’d check the system configuration to see which ones were invoked by the system and when. Now that he had a good guess of the program’s entry point, he knew where he could get started: the same place where the software itself began running. There he could get the broad picture, and then drill down into dependencies as deep as he dared.

The whole process up to this point had taken him several hours, especially since to avoid overtaxing the server he took pains to copy each file individually to his computer and work on them from there. Even then was only from one machine. However, Jacob believed he could assume that the software running on each machine throughout the network would be identical. For a system architecture as large as this, that was the only design that made sense. If it weren’t the case, it would become clear soon enough, and he’d then have a better idea which particular machines were the ones worth looking at.

In a strange way, Jacob was feeling more alive now than he had at any time in recent memory. He was in his old element, waist-deep in the inner workings of a program, just like the old dot-com days. Except, he frowned as he loaded an executable into the disassembler, assembly language was not his strong suit. He tried the decompiler, but the result only superficially looked like C, its output a mess of semicolons and braces and unpronounceable names. He’d take his chances with the assembly. A little more searching turned up the set of manuals for the processor, a thousand pages in all. Once he understood that, he could start making sense of the assembly, and from there make sense of the program, and from there the Simulacrum itself. He had all the time in the world and nothing better to do.

He turned to page 1 and started reading.

Chapter word count: 1,702 (+35)
Total word count: 38,833 / 50,000 (77.666%)

Comments are closed.