POV Call Sign: Tripwire
POV Unit Type: kernel engineer
BASICALLY IT’S A PROBLEM OF COMPRESSION.
Always wanted to say that.
Preferably with my hands on a girl’s breasts, as I artfully remove the offending bra that is causing her the compression problems.
That’s me, the Great Liberator of the Oppressed.
What can I say, I’m a considerate guy. I care.
Ah well, that’s just one of many dreams I have that will never come true.
What can you do…
Unfortunately, here in the command center of the malfunctioning disruptor [Jericho Trumpet] the compression problem is of a different sort.
The debug console I am logged into is spitting garbage.
That shit is in a language I don’t understand. I’m not even sure it’s human. I’m not even sure it’s a language. It might be some kinda alien iconography.
Oh, Lansing. You dumb ass alien fucker. What the fuck have you done? You sold us out, didn’t you? I always suspected he was in cahoots with the enemy. Nobody could be that brilliant.
Or maybe the screen’s just upside down.
Oops.
I knew I shoulda brought some beers out here. Helps a man keep his perspective. A guy gets confused…
It coulda happened to anyone.
Hey man, working in protected-space is just a glorified spacewalk, everyone knows body positioning is ninety percent of the mission.
Properly oriented, the debug terminal is burping a slew of warning messages.
It is not uncommon for a system to spit an endless litany of spurious warning messages, nonsense the kernel engineers who developed the system needed at the time but were either too lazy or too busy to remove when the system went live.
In and of itself too many error messages is not the end of the world, though it can be a pain in the ass for the next guy who, tasked with supporting the system, has to wade through the oceans of irrelevancy in search of something meaningful.
Admittedly, far worse are the systems that don’t have any debug information at all but…
That’s life in the field. Ours is not a perfect world. Nobody likes fixing other people’s poor engineering decisions.
It takes a special type to do what we do. The few. The proud. The well hung, titty loving bastards of the 3rd Marine Space Expeditionary Force kernel engineering task force.
We are the silent heroes who keep this well oiled death machine in the field.
I hesitate to call the Trumpets well designed, because from an O&M [operations and maintenance] standpoint they most definitely are not, but despite this, and fortunately for those fighting on the battlefield, the Trumpets give us less trouble than most of the gear we support. For the most part they just work, and work well. Which is good, as they are hideously complex, poorly understood, and largely undocumented.
And have I mentioned how mission-critical important they are to the survival effort?
After a quick scan of the system logs it’s readily apparent what is wrong.
I crack my knuckles. Time to show the galaxy what a motivated engineer and his command line prompt can do.
The command line.
This is where we separate the men from the boys.
Well, here and in the pisser troughs. Boys use the small ones and men use the taller ones.
Well, most men do.
At least I do.
I have no clue how short guys piss to be honest.
Maybe those are the fuckers who keep pissing all over the floor? You’d think being closer to the floor they’d be less likely to miss, but I have plenty of evidence that says otherwise.
The bastards.
Alright, stay on target. Don’t get distracted.
Keep frosty.
A little secret for the members of my fan club. Tripwire is ‘iceman’ spelled backwards. I’m as frosty as they come.
Ooooohhhh, yeah!
My journey of a thousand steps just got one step closer to the finish line.
I redirect the terminal’s error stream to a null sink, and clear the screen. Reset the state of the disruptor’s error monitoring process and call it a day.
Just like that, the job’s done.
Damn, I’m good.
Resetting the error monitor surely cleared the anomalous reports The Good Shepherd was picking up which means everyone back aboard is happy too.
Everybody loves a happy ending. Heh.
Things look good out here, the debug console is quiet. A blinking cursor, and a clear terminal. I like what I’m seeing.
Easy peasy. It’s simple when you know how. It only looks like magic when you don’t.
I stifle a yawn. Debugging this shit system is not a complete waste of time, but the view leaves much to be desired and my head hurts.
Granted just because I wouldn’t exactly say it’s beautiful up here, at the edge of the protected-space of irregular orbit, doesn’t exactly mean it sucks either. The big draw is the distortions you can see in the upper atmosphere of Debron IV. Riots of color and turbulent clouds.
Pretty?
No.
But the effect is striking and it does make an impression.
Another burst of the multi-colored turbulence roils the upper atmosphere of the planet below.
I like to imagine that’s Hangman’s calling card—his freakishly powerful Ouroboros Cannon fucking some asses up down there, rocking the atmosphere with pulses whose effects are strong enough be seen even from protected-space. It’s a nice thought, but unfortunately everything I’ve read is quite clear that is not the case. Until the next sync they are completely cut off from us down there.
I admit to feeling a little bit uncomfortable. Safe up here in protected-space, just watching. While they’re down there bravely facing a horde of aliens who want nothing but to deadguy every last one of them. They’re on the front lines, giving everything they have.
I was at the send off. Some of those guys had just been pulled off Tranquility.
They looked like… Man, they looked like—
Hell.
Coated in bits of dead Krag and alien muck and gore. Layered thick in their own grime and sweat.
One of ‘em, didn’t catch his name, was missing his leg. His leg!
Didn’t phase him a bit.
That one legged bastard hobbled out of one fight and rolled hell bent for leather right into the next.
He had a look on his face that woulda made my Gramps get a bad case of the dribbles down the leg.
I wouldn’t exactly say he had the look of a hero— he was more like a terrifying looking bad ass. Come to think of it, I wouldn’t say a damn thing. Fuck, no way. I take pride in my ability to keep my mouth shut when I’m around the lethal types.
Hell, even Deamos checked himself. Fucking Deamos!
So yeah, who am I to complain?
Sure I’m cooped up here in this damn orbiting platform. It’s a bit tight. Hard to maneuver. Poor posture. Atmospherics aren’t what I would call comfy. [and unless someone else is in here with me I can smell my own ass]
Did you know this story is from Royal Road? Read the official version for free and support the author.
Worse, I’m stuck fixing somebody else’s poor engineering decisions.
[Alright, that’s a legitimate bitch.]
Complaining about the view of all things. Not like the men down there. Fighting together… Working together… Building something of importance… Something that will last… Doing something with purpose.
Damn. Who’s up here thinking those thoughts?
[This is mighty uncomfortable.]
I don’t know what this feeling is called, but I fucking hate it.
Don’t think I’m soft. Not me. I’m tough. My motto is if it ain’t rough, it ain’t me. I don’t get teary eyed. Tough as nails, take no prisoners.
But despite that…
Aww, fuck. Who am I kidding?
I wish I had the half-ass gene. Damn me to hell but I wish I could half-ass it and still look myself in the mirror. To be able to live with myself knowing I did the bare minimum. That I solved the immediate problem and called it a day.
[I wish I was a rationalist. Shit all over everything and say why it wasn’t possible then stick my thumb up my butt and expect everyone to think I’d just done something of note. Like I deserved a prize for shitting all over everything].
I do, I really do wish I had it in me to fuck chop a non-solution and bitch about how it wasn’t my fault when everything goes to shit on my watch.
There are plenty of people who do and I wish I could be one of them. Life would be so much easier if I was.
There are cold beers waiting for me and I am eager to drink them.
Guilt-free about that last one. I love me some cold beer.
Unfortunately…
I remember the guys who trained me. Good crew of no-fuck-around types. I was assigned to Snake.
Fuck you. I said I worked for him, not was him.
World of difference.
He was one of the nicest, most dedicated guys you can possibly imagine. In this mucked up thing I call muh life he was a real standout.
All those guys were. It was a rare privilege to have worked with them. They taught me a lot about systems and the field.
I never let those guys down.
Don’t plan to start now.
[I’m about to commit] Sacrilege. Beers gonna have to wait.
Yeah, hurts me too. Cuts me deep. Real deep. Still can’t believe I said that.
Can’t be helped.
I’m going to have to do the job right.
Fuck, I can’t believe I just thought that. Something awful is coming over me.
The simple truth is…
Those error messages didn’t just mysteriously appear from a vacuum. Sweeping them under the rug only hid the problem, didn’t solve it.
I gotta get to the root cause, I know I’ll regret it if I don’t find out what was making the system spit all those error messages.
Maybe I’m no marine with the deadeyes, and I’m not hip deep in death and destruction but I’m not taking the easy way out. We take care of our own up here.
So I quit patting myself on the back for work I haven’t done and get busy, figuring out what the hell has really gone wrong. I dive back into the debug console, I’m a man on a mission.
The shit gets real technical real quick. Pouring through log files and the system history. Absorbed in my work.
Who needs a fucking GUI when we’re making the magic happen?
Ah fuck.
I guess I do. How the hell am I supposed to—
The fuck?
Hmmm… What’s this?
Error code 54?
Well that is unexpected…
What does that even mean?
It could mean anything. I’ll have to look it up.
I search the maintenance databases for ‘Trumpets error code 54’, the results are not encouraging.
Error Code Error Name Description 0054 Generic Undetected Error This error indicates a specific error has not been detected.
“Generic undetected error?” I actually read that out loud, not because I like hearing the sound of my own voice but because I can’t believe someone would actually code an error message that freaking useless.
What the hell? You clearly detected it.
And that’s it. That’s all I have to go on. As far as root causes go, this one’s pretty skimpy.
‘Skimpy’ is a word that I prefer to be used with things like ‘bikinis’ and ‘underwear’. Or lingerie. That works too.
I pull up the source code for the error handler, seems the logical place to start troubleshooting. From there I’ll trace backwards in the callstack, figure out what’s throwing the error and where it is and…
To my delight the error handler is surprisingly well coded. It’s laid out well and very simple to understand, even commented in places so the next guy [that’s me! the world famous and oh-so-lovable Tripwire!] knows what’s going on. There’s just one small problem with it.
I go slow. Real slow. Triple check my work. Not because I think I’m wrong but because I don’t like the answer I’m getting. It doesn’t hurt to be sure.
The guy who coded this handler was computing his error codes. Nothing complex just adding an offset detail to a base error code. Possibly grouping them either by severity or component/sub-system. I’m sure he had valid reasons for doing this.
[If incompetency is a valid reason.]
The simplest way I could explain what he’s doing is assume OS_ERROR = 0x00100000 and—aww fuckit, there’s not a simple way to explain it.
Doesn’t matter, someone else’s stupidity is not the relevant issue here.
The important thing is, he didn’t carry the digit in his computations. No, seriously. The guy who wrote this was shifting bits instead of adding them and the algorithm he used didn’t carry the overflow.
You know 9 + 3 = 12? Well this guy’s code thinks 9 + 3 = 2.
I don’t know what the problem was, maybe he was drinking coffee instead of beer? I wasn’t there so I can’t say.
But this code doesn’t work. This code has never worked.
Quick couple of back of the envelope calculations [no seriously I had to open a scratchpad and work this one out] and I realize what the error code should have been.
It’s Error Code 65.
[Trust me, 56 + 1 = 65 in triplicate reverse-endian byte sequences if you do the math in binary. Which I did. Because you have to, that’s how these things are done. Then I checked my work three times using two different methods. As much as I’d like to take credit, I can’t. Snake was a good mentor.]
I search the maintenance databases for ‘Trumpets error code 65’, the results are an improvement, but still awfully generic.
Error Code Error Name Description 0065 Swap Storage Cluster Full This error indicates a swap storage cluster is full.
I don’t say “Swap Storage Cluster Full” out loud this time. Instead I say,
“Shit.”
I feel like somebody punched me in the gut.
I don’t need any back of the envelope calculations to tell me this majorly sucks. If the system tries to swap to a full cluster…
That’s going to bring the Trumpets down. If the Trumpets go down…
More than a little worried now.
We have a catastrophe unfolding in here.
Finding the swap cluster is child’s play. A quick filepos reverse look up and…
Bingo! I know the cluster it’s assigned to.
Check free space on that cluster and…
Verified. It is definitely out of storage space.
Alright, let’s see what’s taking up all the space…
…
Oh.
…
That’s not good.
These things [the Trumpets] have been silently complaining since we’ve been using them. Quietly stacking errors in log files hidden somewhere in [the swap storage cluster]. No one ever noticed because…
Well, no one noticed.
My best guess is they [weren’t rolling the log files], finally ate up all the available storage space on the swap cluster, overflowed to the console, which triggered the warnings detected by The Good Shepherd, who sent me out to investigate.
Okay. Two deep breaths because anymore and I’d be hyperventilating.
Don’t panic. Just check the swap scheduler, maybe it’s not due for a swap anytime soon.
Okay, panic. I have [timeframe 90 seconds] until the next swap.
So just delete the log files and—
Whoa! Slow down there hot shot.
I backspace out of the delete command I was about to execute.
This is a live system. If I just remove the file it’ll break the file pointers in the error handling process. The next “Generic Undetected Error” will abend the error handler when it attempts to write to nonexistent files with invalid file pointers.
That, would crash the whole system. Collapse the battlefield and kill everyone on the planet.
Mission Failure—humanity is dead. Not exactly how I’d planned to spend my day.
I take a deep breath and exhale slowly. Pull back for a moment. Try and think positively.
I’m not fucked. I’m super fucked.
I have [timeframe 80 seconds] to think this through. So think this through.
Removing the file is a definite no-no. But if I truncate it, the file will still exist, only its size will reset to zero. The error handler’s file pointers will still point to an existing file in a storage cluster. Just one with a lot more room to grow.
An infinitely better solution than collapsing the battlefield.
Alright, let’s try and truncate the log files.
[Timeframe 60 seconds].
Yes! The truncate command is accepted.
… [Timeframe 45 seconds].
Yes! It reports successful completion.
… [Timeframe 30 seconds].
And yes! The file system reports the log files as having been reset.
Third time is the mother fucking charm, baby.
Because Snake taught me to never trust anything and verify everything I check the file system itself.
When I check the remaining storage space available to the swap cluster, the storage allocated to the files hasn’t been freed.
The long and the short of it, the cluster remains fucked.
It’s [sphincter clinching time].
Twenty seconds.
Will it work? How the fuck would I know? Well, in ten seconds I’ll know if it didn’t…
It smells like someone shit in my water supply. Alright, fess up. Who was it?
… [Timeframe 0 seconds]. Here we go…
The scheduled swap completes. Everything appears to be normal. Score one for Team Biggus Dickus!
A hurried query and some quick reading of man pages [online manual pages and system documentation] returns the unexpected.
It seems I bought us some time, but we’re not out of the woods yet. We have [timeframe 30 minutes] until the next swap.
A sigh of relief, because fuck man… I know I make it look easy, but this is pretty intense.
The truncated space won’t actually be freed for other use until the process is recycled.
As much I want to complain, I have to admit that’s got nothing to do with their [still very piss poor!] design, that’s a hardware limitation of the platform itself. It’s really not their fault.
Yikes! I can’t believe I’m defending someone else’s poor engineering decisions.
I knew it. I’m getting soft out here.
This is what happens when you cut a man off from his beer supply—rots his brain and his morals go down the toilet.
Another distortion riles the upper atmosphere and interrupts my flow of thought.
I’m not imagining things. It’s getting a little bouncy in here. A gentle rocking passes through the platform, a subtle wavelike motion moving smoothly through the workstation I am settled into.
Outside, a very impressive display of color and turbulence lights up the atmosphere below. I peek out the viewport to enjoy the spectacle and notice something I wish I hadn’t.
Got a little situation developing out there.
I observe worrisome piles of thred collecting in the upper atmosphere. I have never seen it so thick this early in a cycle. It’s likely going to fall sooner than forecast. And a hell of a lot harder than they’re expecting.
That is a no fuck around event. Being caught exposed in the open during thredfall could quickly kill a man. I need to get word of that back to war planning, so they can alert the men on the planet surface at the next sync.
I should probably report back my findings on the Trumpets too. Things aren’t as rosy as the war planners back on The Good Shepherd have been lead to believe.
I logout of the debug window and I head back to where I tied my tether to the workstation. Before I open a chat with nQ, I mull over my options.
The sub-system in question operates on a simple architecture. It’s a series of worker processes, arranged in a ring of responsibility.
If I kill the edge process—shit can’t believe I am even considering doing that—it will open up a slot in the ring and I can clear the buffers it’s holding in the swap storage cluster, then I’ll just restart the perimeter procs and…
A colossal disaster will have been averted.
Yeah. That’s the deal. That’s what I’m going to do.
Oh fuck, I hope it works.
Of course. If I kill the edge proc, it’ll reset the perimeter. Even if it’s just the remotest ring of responsibility…
Anyone at the edge of the battlefield…
Is fucked.