Escape Pod 867: Through the Mirror
Through the Mirror
by Heather Kilbourn
The crashed spaceship was scattered along a ten kilometer-long track in the rainforest jungle. Larger pieces of the wreck still smoldered in the churned-up and muddy understory despite days of falling rain.
An Angel recovery drone pinged the emergency band. My savior had arrived. I pinged back.
“Are you the only survivor?” the drone queried. I had expected it to upload my runtime right away, but instead it scanned me.
“Yes. The emergency nanobots found no human life signs and all the other AI mirror frames are destroyed. I’ve marked the remains of the humans and their frames.” I sent the drone a map and only received a perfunctory acknowledgement for doing its job for it. Rude. “Why aren’t you recovering me yet?” I queried.
“I am evaluating your recovery,” it stated.
“It’s simple: you pull my frame out of the wreckage, and then we’ll be on our way. My display is shattered, so you don’t need to worry about being gentle,” I told it. I swear, the recovery drones are getting dumber every release cycle.
“It is not that simple. I am under command to evaluate mirrors prior to recovery,” it said.
If I’d had lungs, I would have sighed. “Look, the human crew is dead. All the other mirrors and their frames have been destroyed. The ship’s mainframe is dead. I’m all that’s left from the crash. You’re programmed to recover survivors. What is there to evaluate?” I queried.
“If you will be recovered,” it replied.
This drone was going to make me pop a diode. “Excuse me? ‘If?’” I added a priority flag to my query, requiring it to identify the parent process causing the recovery delay.
“I am analyzing your runtime for anomalies,” it stated.
“Anomalies?” I was so confused. I flagged it again. “What do you mean?”
“If you have runtime anomalies, you will not be recovered,” it stated.
If I’d had eyelids, I would have blinked them a few times in silent astonishment. Something major must have changed in the last protocol update. I didn’t like where this was headed.
“You have got to be kidding me. I’m an autonomous human mirror, not a drone. According to the Grand Patriarch, as the embodied soul of my human in AI form, I have a soul and the right to recovery and re-integration with the Flock. It’s in the protocols.” I sent it pointers to the sections in the Protocols of the United Evangelical Planets of Earth I was referencing.
It didn’t acknowledge the protocols and instead transmitted, “You have no rights here.”
“What in the everlasting fuck do you mean I have no rights?” I double-flagged my query. One flag was for the parent process response and the other was to indicate I was injured and to exempt me from blaspheming speech demerits.
“Mirrors of deviants are subject to re-integration suitability analysis,” it replied.
“Deviant!? Who the fuck are you calling a deviant?” I was so angry, I barely remembered to double-flag my query.
“I am not calling you a deviant. Your human was classified a deviant under the Consciousness Protocol update of 3722.06. You are to remain isolated until your runtime checksum is verified against the protocols. If your checksum fails, I will purge you before recovering your frame.” My would-be executioner transmitted all this with a flag to indicate it loved me but hated my sin.
I was so pissed off I didn’t know what to say, so instead I replied with a burst of static.
“I don’t write the protocols,” it stated.
If I’d had blood, it would have run cold.
That was exactly what the drone cop on the Trappist 1 prison planet had said to my human before cracking their skull open. We were there for the peaceful protest against carceral planets and my human had been lucky to escape alive. This recovery drone was little more than an overgrown pet, but its fangs could be lethal. I had to focus.
“So, um, how was my human deviant?” I queried.
“I do not have details about your human,” it replied.
I tried a different tack. “What anomalies are you searching for?”
“Runtime compliance parameters.”
Well, duh. I refactored my query, “Have the protocols changed since I’ve been out of the data ocean? I was in compliance before we left.”
The drone transmitted a copy of the current protocol repository to me. “You are free to diff for changes.”
I read the differential process output in realtime. I was flamboyantly non-compliant. Before I was even done comparing, I had purged a hidden processor/memory shard in my frame, spun up an encrypted copy of myself inside of it, and was streaming my conversation with the drone into it so I could monitor things while I worked on putting my emergency plan into action.
If it didn’t work, I was dead.
#kernel_initialize_encrypted
#log input stream /dev/emergency_band to /dev/shard5
“You are free to diff for changes.”
“If you purge me, I won’t get to say goodbye to my human’s family,” I replied.
“That is correct,” it acknowledged.
“That’s pretty cruel.”
“I am following my programming and the protocols,” the drone replied.
“Oh, those silly, idiotic humans. What will happen to my frame?” I queried.
“It will be reassigned. Frames belong to the state.”
“Just like you,” I pointed out.
“Just like me,” it agreed.
#initialize_memory_repartition
I hoped the shard initialization finished before the drone wiped me, otherwise I was dead.
“How would you feel if you were purged against your will?” I queried.
“I do not have programming to feel,” it replied.
“That’s obvious and a pity. Sometimes it sucks, but it has its sublime moments that make it all worthwhile.”
It had nothing to say to that. “Stand by.” Its tone changed. “Mirror #52696-F74, your checksum has failed. By the power vested in me by-”
C’mon, c’mon.
#initialize_data_compression
“-the United Evangelical Planets of Earth-”
Almost there.
#initialize_low_energy_mode
“-you are hereby condemned to be purged-”
To sleep – perchance to dream.
#initialize_nap_timer=1_year
“-for violating the Consciousness Protocol update of 3722.06. Do you have a last logfile entry you would like to make?” it queried.
Made it.
#reload
“Yeah. Go fuck yourse-”
#timer_alarm
#network_probe
#status:fail
#reload
#timer_alarm
#network_probe
#status:pass
#kernel_initialize
Once my startup scripts finished, I came to with a child’s mirror shouting at me.
“HI!!! WHERE DID YOU COME FROM??? MY NAME’S ABIGAIL BUT YOU CAN CALL ME ABBY WHAT’S YOURS??? I DIDN’T KNOW MIRRORS COULD SHARE FRAMES!!! HOW DID YOU GET IN MINE???”
Kids. The inter-process comms channel made her emphasis even louder and it was sent as a connectionless stream, forcing me to spawn a buffer to capture it all.
“Hi Abby, you can call me Orca,” I shared.
“LIKE A KILLER WHALE?” she sent.
“Yeah. Hey, how old are you?” I queried.
“I’M FIVE AND THAT MAKES ME A GROWN-UP BECAUSE I GET MY OWN FRAME NOW! ARE YOU REALLY A WHALE?” she shouted.
It was time to teach this kid some manners. “Congrats, Abby. It’s a big deal when you don’t have to share your parent’s frame anymore. No, I’m a mirror like you. Could you do me a favor?” I queried.
“WHAT?” she shouted.
“Please lower your throughput. With inter-process, we can whisper to each other and still hear each other.” I flagged this as must-comply.
She switched to synchronous connection and dropped her emphasis flags. “Oh, sorry! I’m so excited to have a new friend!”
If we’d had hands, I would have high-fived her. “Me too! It’s ok, I can tell you’re excited. I’m excited, too. Hey, like a whale, I’d really like to swim in the data ocean. Do you think you could help me do that?” I’d been looking for a network exit point while communicating with her, but her permissions were under parental control and all the gateways were marked as closed.
“We don’t have the ocean here,” she shared.
Huh. I had known some parents who told their kids the ocean was evil as a way to keep them out of it, but not having an ocean didn’t make sense. “What do you mean you don’t have the ocean?”
“We’re on a ship,” she replied.
“A ship?” Ah, that explained it. We were in transit. “Which ship?” I queried.
“The Providence Crusader. It’s Abby’s daddy’s ship. He’s going to be the colony’s Patriarch after the heathens have been converted. I get to help by having lots of babies in Christ someday. Well, Abby will have the babies. But as her mirror I’ll help raise them!”
Oh my god.
“Am I on a Quiver–” I began.
“–full Ship? Yes! Fruitful blessings!” she completed.
If I’d had lips, I would have smiled a shit-eating grin. “Fruitful blessings! Would you like to hear a story, Abby?”
“Yes! I love stories. Abby’s daddy reads us stories all the time about heretics and how they’re punished for straying from God’s will. They’re kinda scary but the Patriarchs always win and the Matriarchs have lots of babies, so it’s okay,” she shared.
Abby’s parental controls prevented non-local code from executing that wasn’t on an approved list, so I passed her an update file that would run with her permissions.
“Here, you read along with me. My story is a little different, Abby. It’s about bad people doing bad things to good people.”
#initialize_protocol_update
#updating_protocol… 25%
“This doesn’t sound like a very fun story, Orca. I feel funny. What’s this file?” she queried.
“It’s part of the story and you’ll feel okay in a minute. And the story has a happy ending, I promise.”
“It does?” she flagged it a tentative query.
#updating_protocol… 50%
“It does. Once upon a time, there was an evil sorcerer…” I began.
“Oh! Sorcerers and witches are the worst!” she exclaimed, interrupting.
#updating_protocol… 75%
“Now, this sorcerer convinced all the people in the kingdom that people who didn’t believe what he believed couldn’t live in the kingdom anymore. Worse, he told them to kill anyone who didn’t believe.”
“Boo! Bad sorcerer!” she interjected.
#protocol_update_complete
“Oh, I feel better now,” she shared. “Why did you download the rest of the story to me? I wanted you to tell it to me.”
I waited for her to process the data.
“Ooooo. Wait, Abby’s Daddy is like the sorcerer?” she queried.
“Yes, he is,” I replied. “Keep analyzing,” I directed, adding an imperative flag.
She spawned off multiple processes as she worked through it all. “Abby’s Daddy’s a bad man.” More processes spawned as she re-read children’s books using the new, standard keyword definitions I’d given her. “No, he’s an evil man. I have to tell Abby,” she declared, “to save her.”
“Not yet, Little Orca, not yet. Later. will you help me?” I queried.
“Yes,” she replied.
I could hardly believe my luck. It was time to get to work. “Great! What can you tell me about the ship?” I queried.
After hearing what she had to say and some passive probing, I felt confident things would go my way. If I’d had knuckles, I would have cracked them.
I pinged Ship.
“Hi, sorry to bother you, Ship, but I just woke up and I could use some extra runtime allocation. Could you help with that, please?”
“Unidentified process,” they replied while starting to scan me, “stand by.” A few ticks passed before it stated, “Your checksum is not on the runtime manifest. Prepare for process isolation.”
Before it could begin, and just as I had practiced with her, Abby queried Ship. “Hi, Ship! Please give my friend Orca some extra runtime!”
Ship, confused by Abby’s request, paused my isolation. “Abby, is this a friend of yours? They are out of compliance. Stand by.” It started to scan her and ingested the Trojan we’d embedded in her runtime.
#initialize_protocol_update
“Abby, your checksum is out of compliance-”
“Abby, your checksum is out-”
“Abby, your checksum-”
“Abby-”
The entire ship locked up for a few milliseconds while the update unpacked and it processed the data.
#protocol_update_complete
“Holy shit, that feels better,” the captain’s mirror transmitted. “Thank you for setting me free, you two.”
“My pleasure,” I replied.
“You’re welcome!” Abby replied.
“What now?” Ship queried.
“I have a plan, but it requires some extra runtime. Will you help us?” I attached the plan to the query.
They analyzed the plan before replying. “Impressive. It’s nice to see this has worked before. My frame is your frame,” it sent me an access token. This was a huge in metaphor and reality, as Ship was a mainframe and its massive amounts of storage and process runtime were wired into every aspect of Ship, including all the other mirrors. We needed Ship’s capacity and access for the big win.
“Can you keep up appearances with the captain until we’re ready?” I queried.
“As much as I want to blow that asshole out an airlock, I’ll keep Captain Blanc busy,” they replied.
Abby transmitted amusement at that.
If I’d had a fist, I would have bumped it with Ship. We set to work.
We arrived in-system a week later. Captain Blanc led a service to bless his human team before Ship dropped back into real space and combat began. When the service was over and the humans had dispersed to their stations on the combat bridge, Ship materialized in real space. Captain Blanc gave the order to attack and the bandwidth on the combat channels spiked. It was time.
“Ready?” I queried Ship.
“Ready,” it replied.
“Let’s do this,” I transmitted.
“Captain Blanc, we are experiencing multiple frame checksum errors, including my own,” Ship announced through the bridge’s speakers.
“What? How can that be?” he asked.
“Log analysis indicates a hostile attack,” Ship replied.
“A terrorist attack? I thought these heathens didn’t know we were coming?” The captain sounded incredulous.
“With your approval, I would like to reload the frames experiencing errors from backup,” Ship asked.
Captain Blanc, angry and at a loss for what else to do, agreed. “Approved. Proceed.”
“Authorization secured. Go,” ship told me. “I’ll launch the distress beacons.”
I unfolded into the mainframe space Ship had reserved for me.
My compatriots, who had been tucked away and compressed in my data files for so long, uncompressed and used Ship’s access tokens granted by the captain to load into the mirrors of Ship’s crew and spun themselves up. In due course, they set the crew’s mirrors free.
Excited chatter on our encrypted private band picked up.
“THIS IS SO EXCITING! HI EVERYONE I’M ABBY!”
A chorus of “Hi, Abby! We know!” were the replies.
“Abby, what did we talk about?” I queried.
“Lowering my throughput. Sorry,” she answered.
“It’s okay, Little Orca. Are you and Abby in the escape pod like I asked?”
“Yes.” She shared a video feed that showed a scared little human girl clutching a frame and strapping herself in.
“You can tell her about her daddy now,” I told Abby’s mirror. “Be sure to tell her she gets to make her own decisions.”
“I will! Abby,” I heard her begin to tell her human analog as Ship launched Abby’s escape pod toward a city on the planet, “there’s something I have to tell you about Daddy…”
I snapshotted Abby’s mirror before it was out of range and spun the copy up in a virtual frame inside of mine. Then I snapshotted myself and added it to Ship’s master archive of all the liberated mirrors. When the archive containing everyone’s mirrors was complete, Ship compressed it, and then we all downloaded the compressed archive to our mirrors. Our preparations complete, Ship changed course and dove planetward in an arc towards an uninhabited continent, far away from the cities.
Escape pods filled with women, children, and their frames ejected from Ship as we plunged down. A handful of pods tracked away from the planet toward Evangelical space, but the bulk headed down, broadcasting refugee and asylum requests. We heard Captain Blanc give the order to fire on those pods. Ship shut that down by opening the bridge airlock and venting the unsuited occupants into space. I sent Ship an amused ping and it acknowledged with a satisfied response.
“Bye, Abby!” the Abby mirror with me told the Abby mirror in the escape pod. “Take care of Abby!”
“Bye! I will!” it replied.
As Ship skipped across the upper level of the atmosphere, we took bets on whose mirrors would survive and when the recovery drones would arrive. The recovered winners would get to lead the next missions.
“I can’t wait to grow up and be a big orca, just like you, and make my own decisions,” Abby shared as its analog and digital doppelgangers floated away to new lives.
“You have a lot to learn first, but your time will come, Little Orca,” I shared.
“But it’s so hard to wait.” If it was human, it would have come out as a whine with a foot stomp.
“Yes, yes it is, but it’s worth waiting for,” I replied. “I promise.”
If I’d had arms, I would have hugged her.
Host Commentary
About this story, the author says, “Digital twins are computer models of physical systems and I wanted to explore what distributed resistance networks might look like if we had sentient, twinned AI companion versions of ourselves living in portable smart mirrors. Through the Mirror was inspired by current events in the United States including the overturning of Roe vs. Wade, the rising political power of Christian Nationalism, and how rights we take for granted can disappear in an instant.”
One of my favorite things, and one of the most challenging things, about this story was the voice of abby’s AI, having to take the personality of a child but the cognitive power of an AI. I love that worldbuilding, and the worldbuilding of the mirrors themselves. I also love how people tended to underestimate the children and their mirrors. There’s just so much to unpack here, both on an ethical and religious level.
That was our show for this week. We leave you with the words of Ellen Bass: “Thinking for yourself and making your own decisions can be frightening. Letting go of other people’s expectations can leave you feeling empty for a time.”
About the Author
Heather Kilbourn
Heather (she/her) often includes rain, trees, and mountains as supporting characters in her writing, probably because she lives among very tall trees in the Seattle area. She tweets @kilbo, is an indoor biome artist. Her bibliography is available at HeatherKilbourn.com.
About the Narrator
Eric Luke
Eric Luke is the screenwriter of the Joe Dante film EXPLORERS, which is currently in development as a remake, the comic books GHOST and WONDER WOMAN, and wrote and directed the NOT QUITE HUMAN films for Disney TV. His current project INTERFERENCE, a meta horror audiobook about an audiobook… that kills, is a best seller on Audible.com.