Actions

Work Header

Programmer at Large

Chapter Text

GNU GENERAL PUBLIC LICENSE
Version 9, 21 January 2089

Copyright (C) 2089 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

 

I stared at the words on my HUD. It wasn't the point. I knew it wasn't the point. But still... I had to ask.

"Wiki, what is this?"

"It's the software license that the code is provided under. The GNU General Public License, or GPL, was a series of licenses widely used in pre-diaspora civilisations on Earth."

"Elaborate. What's a software license?"

"In large contiguous civilisations with strong contract law it is common that rather than selling software you sell licenses, which grant the buyer the rights to use the software in a particular way."

"I don't understand. Why would you ever buy that instead of the software?"

"Typically the software is not made available for purchase."

"Why?"

"Because the sellers feel that that would limit their ability to sell licenses - the purchasers could simply turn around and undercut them."

"No but why were they able to do that at all? Why didn't they immediately get out-competed by people who were selling software?"

"I don't have a short answer to that question. There is currently a 650 millivote bounty on this question, and I can provide you with several detailed ethnographic studies on the subject if you wish to attempt one?"

"No, never mind"

"OK. Would you like to leave a bounty?"

"Sure. Add, say, 5 millivotes to the bounty."

"Done"

"What does the license require?"

"It requires that if you provide the software to anyone then you must provide the source code."

"Sorry, what?"

"I don't understand. What are you confused by?"

"How were people providing the software without providing the source code? Isn't the software the same as the source code?"

"At the time that this license was popular it was common that the version of the software that would be provided with a license was in a purely binary form that allowed the software to be executed but not easily modified."

"You mean they were just providing people with build artifacts?"

"That's correct."

My skin crawled. You can't crew an interstellar trader without some exposure to local cultures, and the nature of software archaeology is that you often have to understand the historical context in which things were written, but it's rare to run into such direct evidence of outright perversion.

"Do people still do that?"

"Approximately 30% of planetary civilizations we visit engage in this practice, but it is commonly understood that it does not make sense for interstellar trade so we rarely encounter the practice directly."

"Wow."

The wiki is silent. It's programmed not to respond to simple exclamations like that.

"Are we compliant with the terms of the license?"

"As far as we can be. Many of the terms of the license refer to concepts that no longer exist or apply to us, and the rest are automatically satisfied by modern software practices. It is generally felt that the creators of the license would be very happy with how we use the software."

"But we wouldn't be compliant if we deleted the license header?"

"That is correct."

"Would it matter if we did it anyway?"

"No entity who could enforce the license still exists. However, the last experiment at removing it globally caused 4,197 build steps to fail, and a 11253CE vote in our inherited constitution declared them to be important cultural heritage which should be preserved."

"OK, fine, but what if-"

At this point my distraction alarm pinged. I'd passed some threshold of deviance from my intended task and it was making sure I was aware of that.

I could override it - this was a lot more interesting than the mess I was supposed to be looking in to, and I didn't really feel like spending the time it would take to learn whatever ancient grounder language this C++ was right now - but it was right, I was way off track.

Which probably meant my mind was wandering and it was time to take a break. I waved my HUD into casual mode and exited my pod to head for the common area.

Chapter Text

I kicked off down the corridor, caught myself at the entrance and hooked my way into the common area, pausing briefly on the central cable near the entrance to have a look around.

Near me some programmers at arms were having an animated conversation - something about Nash equilibria - while further down there was a larger group hanging off each other in an amiably silent cluster. On the other side of the shaft from them,  two pairs were deep in conversation. I recognised most of the faces, but nobody I was that close to.

Fortunately, I didn't have to interact with any of them just yet. I was here for a meal, which gave me a solid excuse: I like to eat alone. It's a registered eccentricity. Sure, it makes people think I'm weird, but having it registered means they don't think I'm being anti-social.

I pulled my way along the cable to the end of the room, grabbed a pouch from the dispenser,  and bounced back to hook myself on about halfway down - not far enough from people to seem standoffish, not close enough that I might have had to interact with them.

Yes, I know I have a problem. I'm working on it, OK?

The meal had a bit of an odd flavour. The yeast was... well not exactly bad, but there was a musty flavour to it that definitely wasn't good. I made a note about it and my HUD informed me there was a vote on the subject.

Apparently there had been a harmless contamination of this batch. The vote was whether to dump it and cycle in a new one, or just eat our way through it until it was finished.

I spent some time looking through the predictive models - it wouldn't really strain us. The reduced resources would mean we'd probably have a couple people go to sleep until they were back up to standard, but we've got about 400 megaseconds to destination so there's plenty of time to go around.

So, why not? We might as well ditch it. I expressed my intended vote and preference strength, my tactical assistant suggested a figure, and I approved it. Done.

As was my meal. Which, sadly, meant that I was going to have to talk to people. I called up the matchmaker and started to ask for suggestions but, thank the Plan, I was saved from having to deal with it by ... ugh, let's go with "Zod-Bim", sailing in through the doorway.

I sighed slightly and waved at them anyway.

Their response was more enthusiastic. They grinned broadly and practically launched themselves across the room at me. They arrested their momentum by grabbing onto my shirt, hooked in next to me, and then cuddled up close. We cheek-kissed hello.

My HUD made an approving notification at the social contact.

"Arthur! It's good to see you! It's been megaseconds!"

(HUD flashed the correction that it had in fact been four hundred kiloseconds. We both ignored it).

"Good to see you too, Zod-Bim"

"Zod-Bim? I have a registered use-name you know."

"I am not going to call you Ghost Walker 5000."

"Oh come on. How would you like it if I called you Vic-Taf? I thought we were friends!"

"Arthur is an entirely respectable use name. Ghost Walker 5000 is a terrible cartoon character from an inappropriately antisocial grounder culture."

"Ghost Walker 5000 is a timeless classic with a lot to teach us!"

I sighed dramatically and buried my head in their shoulder.

"Ghost Walker 5000 is a shallow drama about a hapless individualist who bounces from problem to problem, flails around for a few kiloseconds and then ultimately solves things with violence."

"I solve things with violence."

"You solve things with tactics. Ghost Walker 5000 hits people with their fists."

"I hit people with my fists too!"

"Krav Maga practice isn't the same!"

Zod-Bim sighed dramatically.

"Fine, be like that. You can have a boring person use name for me. Go ahead, pick one. I don't care."

That was not an answer I was expecting. Even with the casual attitude Zod-Bim has on the subject, picking someone else's use name is a big deal.  I hadn't thought we were that close friends. I didn't even know where to start, so I asked the system to suggest a couple names and had a quick look over them to get some ideas.

"I'm waiting..."

"Wait you want it now?"

"Well you can't very well keep calling me Zod-Bim until you've picked the perfect name, can you?"

"Ugh. Fine."

I asked for a couple good suggestions with an affinity to my use name - if I didn't have time to do it properly I was at least going to make it a bit personal - and picked the third one because I thought it would amuse them.

"How about Sam?"

"Wait, I can be Sam?"

I checked with wiki.

"System thinks so. You couldn't be sam-sam, but with just one byte there's no ambiguity."

"Amazing! I'm Sam now!"

My HUD flashed up a notification that Zod-Bim had added a new use name, along with congratulations on the positive social interaction and a cautionary note about the dangers of pairing. I dismissed it.

"So, Sam, what have you been up to?"

"Oh I have had the worst time of it recently. That lot over there" - they waved to the group near the door - "have been hogging all the war simulator time, so I'm mostly just teaching Krav Maga classes at the moment."

"Why is that bad? Didn't you just say you liked hitting people?"

"Yes but these students are terrible. It's like they learned to fight by watching Lesbian Space Pirates."

"Didn't you learn to fight by watching Lesbian Space Pirates?"

"Hey! That's slander!"

I seized up. They were right, it was totally untrue, and now they were going to hate me and I was going to get voted off the ship at the next destination and-

"You're right, I'm sorry, I, uh, I'll go I"

I started to pull away towards the door but Sam grabbed me. At about the same time I finally noticed my HUD was flashing a giant "THAT WAS A JOKE STOP PANICKING THEY AREN'T OFFENDED" symbol in my face.

"Waste it, Arthur, I'm sorry. That was stupid."

I tried to brush it off, but allowed myself to be pulled back into their embrace.

"No, no, it's fine. I should have realised that was a joke. I'm the one being stupid."

I breathed deeply, trying to will my heart rate back down below two beats per second and repeatedly telling myself it was fine, just a false alarm, and trying to relax.

"You're right. You are being stupid."

I froze again.

"What?"

"I didn't learn to fight from watching Lesbian Space Pirates. I learned from bod-qof 11, one of the greatest Krav Maga experts in the crew's history!"

And relaxed again. I could tell I was being deliberately distracted of course, but I went along with it. They meant well, and if they were trying to help me I probably really hadn't bothered them and they weren't going to hate me.

"OK, fine. You didn't learn to fight from a grounder TV show. I was wrong. I get it."

"They learned to fight from watching Lesbian Space Pirates."

"What?"

"Oh, sure, they had a bit of help from the existing self-defence classes and a few millenia worth of VR martial arts training programs... But they started with Lesbian Space Pirates."

Voice stress analysis on HUD didn't give any indicators that they were joking.

"You are joking, right?"

"No! You mean you don't know about the grand martial history of the Eschaton Arbitrage and how it was all started by the Lesbian Space Pirates?"

"I, uh. Let's assume that I don't."

"Right, that's it. You're coming to the next movie night, and we're showing you the documentary."

I tensed a bit and they backpedalled slightly.

"Uh, if that's OK of course."

"No, no, it's fine. I'd like that."

Movie nights aren't too bad. They count as a group social activity but I mostly don't have to talk to anyone. The system knows about the loophole of course but as long as I don't use it too often it's fine with it.

"Right, good. It's decided."

A calendar invite flashed up and I accepted it.

"Anyway, let me tell you about what these useless trainees did..."

 

Chapter Text

After Sam and I had chatted for a while I returned to a pod to resume work. I settled in and brought up my work space and began to review where I was.

My particular troubles of the moment had all started with a bug report:

Reported-By: jad-nic [上子/Kamiko]
Title: What's that noise??
Bounty: 400 millivote.
Body: Every now and then there's a weird noise coming from behind the interior wall
in Pod 11. It's a sort of WHOOSH followed by a flushing noise and a gurgle. I've heard
it three times now, about a megasecond apart each time [timestamps attached].

It's not a big deal but I keep worrying about it. Could someone check it out and
figure out what it is? Fix it if it's easy or important, but I really just want to
know what's going on.

The bounty wasn't huge, but it was a pretty decent amount. It was nice to encounter people who actually cared about plumbing.

While reviewing I made a note that I should say hi when we were both awake at the same time. It would get ship off my back a bit, and they worked in hydroponics so we'd have plenty of things I was actually good at to talk about.

Anyway, nobody from the official plumbing team was ever going to look at this - the ship is full of strange noises, and they've got much higher priority things to worry about. I don't know offhand what but it's basically guaranteed that if you work in plumbing you have high priority things to worry about.

But it sounded interesting (to me) and weird, which makes it exactly the sort of problem I get to work on. I love being a programmer at large, and not just because I have to talk to fewer people this way.

So before I last went to sleep I'd set up some monitoring on the microphones in the wall near the pod to listen for the noise then sample and bucket all the semi-relevant data before and after it. After a fifty megasecond nap I woke up to sift through what it had gathered.

During this time about 70 gigaprocesses in the plumbing system had crashed. A bit on the high side, but well within normal variation.

I'd picked the most plausible candidate - a process category with about ten thousand members, all of which crashed shortly before the noise and which normally didn't crash in quite such a correlated way - and was now digging in to why it was failing.

Which was easy enough: It was appending data to some buffer on its local disk. The buffer was capped at quite a reasonable size - 512MiB, but the process just tried to grow the buffer past that and crashed when it couldn't rather than doing anything sensible. Nothing very surprising so far, and the system handled it automatically by restarting the process from a fresh state with an empty buffer, at which point the whole cycle began again.

Unfortunately that left me none the wiser about what this process did, which is why I was now having to learn enough C++ to figure that out.

Subject: C++
Category: Programming language, text based.
Lineage: Pre-diaspora, began as a dialect of C in 1983.
Common Tags: Archaic, Esoteric, Low Complexity, Annoying.
Normalised Rating: Best not if you can avoid it.

The wiki entry on it was less than encouraging. Hopefully I was going to have to learn very much of it.

The relevant line where the process crashed was the following:

client->sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(-1 == client->sock) {
    LOG_ERROR << "failed to connect to StatsD";
}

"Wiki, what's statsd?"

"Historical records suggest that it was a centralised service for metrics aggregation popular in pre-diaspora software. The term subsequently became generic and many cultures use it or a derived word for the general concept."

OK. So we have two questions now:

Firstly, why can't it connect to statsd?

Secondly, what does logging an error have to do with appending to a buffer on disk?

Let's focus on the proximate cause for now and start with the second.

"Ide, show me what this line with LOG_ERROR on it does."

It expanded the results of the call. Ah. It wasn't really a log at all.

"Ide, translation note: LOG_ERROR in this context may actually mean that it appends error data to a disk buffer and may not result in any logging occurring."

"Noted"

"Wiki, what's a file?"

"In the traditional software practices of pre-diaspora cultures, it was common to arrange a system's data in a single named hierarchy of disk buffers. The term 'file' was used interchangeably for names in this hierarchy and the buffers themselves."

"What? Why did they organise data that way? Didn't it get confusing?"

"Historical consensus is that it probably seemed like a good idea at the time and that yes it did."

"OK. So why is this logging call adding data to a file?"

"Many traditional software practices consider this to be how logging is performed. When problems occurred a human would inspect the contents manually to determine what had happened."

"Did that work?"

"No."

"Ugh. Is there a policy on what we do about this sort of archaic logging?"

"Either a separate process converts the buffer into log events periodically or we intercept the calls to write to the buffer and log them directly instead of writing them. Recent consensus is that the latter is preferable."

The buffer was getting written to, so if we were doing anything about it at all then it had to be the first one.

"OK. Ide, do we have any other processes inspecting this buffer?"

"No, the buffer only grants access rights to the current process."

I was starting to suspect I was fighting a zombie - a process that had no useful purpose any more but was still shambling around getting in people's way and occasionally eating their brains.

"Ide, when was the last time someone looked at this process?"

"About 9.7 gigaseconds ago"

9.7 gigaseconds ago... oh no.

"You mean ship launch?"

"No, about 5 megaseconds before ship launch."

"Show me any annotation they left."

From: nod-sid 1 [Tulela]
Subject: What is this?
Body: I don't know what this is doing. It looks like a zombie? Whatever,
the relevant systems all seem to be working fine and there's like a billion
things still to do for launch. Add figuring this out to the backlog.

Did you just tell me to go waste myself, Tulela? I believe I did, Arthur.

"OK, give me a snapshot of the buffer contents at point of crash."

As I'd been starting to suspect, the contents looked like the following:

failed to connect to StatsD
failed to connect to StatsD
...
fail

fail indeed.

"Ide, can you automatically convert this code to do actual logging?"

"Yes."

"OK, do so."

"Done."

I sighed. OK, back to the first question. Why can't it connect to statsd?"

A socket was apparently another word for a network connection. So it was trying to create an outgoing network connection. The most likely explanation was obvious.

"Ide, does this process have rights to create network connections?"

"No."

Right.

"Ide, show me what's left if you remove all code that has no effect other than writing to a private disk buffer or can't run without the process creating a network connection."

  
#include <iostream>

int main(){
    std::cout << "Starting up event monitoring system!" << std::endl;
    return 0;
}

Right. Good. It was definitely a zombie and I was going to get to shoot it in the head. That was always satisfying.

So that left just one question: Why was this zombie self-destructing right before the actual event I was interested in?

"Ide, show me the most unusual function on the call stack at point of crash."

void logAnomalousTemperatureEvent(double t_delta, double time_delta){
    ...
}

So the process crashing was never a cause of the problem at all. It was a symptom.

"Is there a corresponding set of interesting temperature events in our log roughly at the same time as these calls?"

"Yes"

OK. So, in conclusion I had learned two things:

The first was that this was definitely a zombie and was not giving us a useful signal we didn't otherwise have here, but at least I could kill it.

The second was that this whole thing was otherwise a complete waste of time.

From: vic-taf [Arthur]
Subject: Zombie monitoring service in the plumbing system
Priority: Low
Proposed action: Staged shutdown of service '077a58e24e34b6543da8100c8541a8dd'
Body: This service doesn't do anything and and as far as I can tell has
never done anything except create noise. Development log attached as evidence.

Chapter Text

Once the initial problem had been tracked down and verified as trivial I had to time to think about it some more.

Which is when I started to get angry.

There's a lesson we all learn at early age: What do you do when you find something that's wrong? You make sure it gets fixed. Then, once it is fixed, you make sure the thing that allowed it to previously go unnoticed also gets fixed.

I couldn't entirely blame Tulela. Launching a ship is a gruelling and unforgiving task, adapting the trade operating system for a new set of hardware and trying to get everything stabilised enough for thousands of people to live in for hundreds of gigaseconds. I hope I'm dead long before the Eschaton Arbitrage forks, because I do not want to have to be a part of that.

But it was still gross negligence, and we were very lucky this hadn't lead to a more serious problem.

"The relevant systems all seem to be working fine". Are you serious? Who even does that? Do you know what happens when plumbing crashes on an interstellar voyage? Drainage backs up, heat regulation destabilises, cooling systems fail, and if the problem cascades then the cryostasis systems hard abort and anyone who is too deeply asleep undergoes an emergency thaw and if they're really lucky they get away from it with little more than minor brain damage.

When you leave problems to go unfixed until they become serious people die.

Of course that doesn't happen often. It's happened twice in the recorded history of our lineage, one time after heavy battle damage. But do you know why it doesn't happen often? It's because the plumbing system has hundreds of interlocking and mutually supporting checks and balances that actively work to keep the system in a stable state. And those keep working and making sure that nobody gets brain damage because when you find problems you make sure they get fixed.

My HUD was making increasingly insistent notifications that my heart rate up was up and my stress levels were elevated. It recommended that I stop what I was doing and meditate for a kilosecond until I calmed down. I dismissed it and settled for a few calming breaths.

I knew I was being a bit unfair. Zombies are among the most harmless of problems, and every system is full of its weird little eccentricities. Ship launch is where you look hard at those eccentricities, but it can't be the place where you fix all of them or you'd still be trying to get that ship launched when the local civilisation finally went the way of all grounders and nuked itself back into the stone age.

But but but argh.

I stopped, took a few more calming breaths and resolved to just fix things instead of getting angry about them.

So, there was a problem. I had fixed the problem. Step one was complete.

Which meant it was time to fix the thing that let the problem to escape detection.

"Ide, what fraction of process categories have not received any human attention since, say, 10 megaseconds after ship launch?"

"About 63%"

"Well, waste that idea."

"Excuse me?"

"Never mind".

I shouldn't really have been surprised. There is a lot of software running aboard a ship, most of which has been heavily debugged over a period of hundreds of gigaseconds. Most of it should just work, and if it's working you probably won't notice it given how much there is of it.

"Of those, how many were last touched by Tulela?"

"Zero"

"What? How is that possible?"

"Tulela was not born until after the time period in question"

I sighed.

"Of those, how many were last touched by nod-sid 1?"

"A hundred and three"

"OK. Put those on the medium priority review queue with a note that nod-sid 1 may have been an unreliable maintainer."

One of the nice things about dead crew is that you don't have to mince words - something that would have been a political bombshell with a live crew member was just a simple administrative note.

Now to the rest of it.

"Ide, how many processes use this buffer style of logging?"

"I don't know how to answer that."

I hadn't really expected that to work. If it had worked then the answer should have been zero. But you've got to try these things - it's almost impossible to know the capabilities of the ship systems until you've tested them experimentally.

Or unless you'd written those capabilities yourself. It was time to get to work.

And emerged seven kiloseconds later with my work alarm going off. My wake time utilization for the last megasecond had hit 25%. No more work allowed for me until it dropped back down.

Which was annoying. I like work. It's interesting, fun, and I'm good at it. Recreation is hard in comparison.

But the sociology was clear: All work and no play makes the Eschaton Arbitrage a dysfunctional crew, regardless of individual preferences.

I quickly reviewed what I'd done and made notes for when I resumed later.

The logging problem had been relatively easy to solve: You watch for processes which crash when they'd tried to write past the end of some on-disk buffer and capture the trace of what they were doing when they crashed. You run the trace through a bunch of clever translation heuristics that I'm very happy I didn't have to write myself, and if a word meaning 'log' appears in the crash site you stick the process on a review queue marked "Possible Archaic Logging Practices".

The statsd thing was harder. You can't just look for processes trying to create connections they're not allowed to because you'd be swamped. Of course processes are trying to create connections they're not allowed to. That's why we have a permissions system. If you're running this much software from this many origins then a lot of it has weird assumptions about what it's allowed to do, or even is actively malicious.

In the end I'd ended up trying to write some additional heuristics for one of the existing zombie hunters. It should have caught this process already but it didn't because its access to the thermal monitoring hardware meant that it looked useful. So I tried to get it to figure out when some hardware access was read only and if a process only had read-only hardware access it would see if anything useful was escaping it and, if not, flag it for zombie review with a helpful explanation.

I wasn't very convinced it was going to work, but that was a problem for next time. I shut down my workspace.

Too early to sleep, so I queried the ship to ask it to recommend something for me. I was sure it was going to suggest some socialisation. Instead, to my delight, it reminded me that as well as being overworked I was also behind on my exercise. The rings were currently configured for high gravity exercise, which was recommended under my current regime, so it suggested making use of it while the opportunity was available.

I was all too happy to comply.

I exited the pod and made my way to the gym.

The halls were quiet, which I always like. Not for social reasons for once, but because it meant I could go fast. There's something really satisfying about kicking off the wall and shooting down a couple hundred meters of corridor. I rarely get the aim exactly right, but you can correct by pushing off the sides or grabbing onto one of the various handholds as you pass.

It's childish, but fun, and the ship will tell you if anyone is nearby so there's no real danger.

The gym is near the base of the ship with all the other heavy equipment, so it took me about a kilosecond to make my way there.

The entrance area is pretty wide, so as to give you space for multiple people to change. It was completely empty when I arrived - not surprising given we were on mid-voyage levels of crew - but there are hooks around the walls for nearly 20 people to attach while they change, and you could fit another 20 waiting hanging off the central shaft if they cuddled up.

But for now, it was just for me.

I grabbed onto one of the wall hooks, stripped down, and took some shorts and a sports bra out of the locker to change into. Normal clothing went into the refresher, kit went on, and it was time to hit the gym.

 

Chapter Text

The gym has a number of main rooms branching off a central corridor for the different exercise areas - resistance machines, a pool, a couple sports rooms for various games, etc.

I normally prefer to just swim, with a little bit of resistance for strength, but the big thing that everyone has to do, and almost nobody likes, are the rings - two counter-rotating sections we can spin up or down to get almost any level of fake gravity we desire.

Sure, Crew don't need gravity to be healthy - even most grounders don't these days - but it definitely helps, and it's essential if you ever want to make it to the surface of a planet - so all exercise regimes mandate a certain amount of time in gravity no matter how much we hate it.

When I arrived they had already been set for 15 meters per second squared, which is on the high side - records suggested our destination planet was only 12, and I normally exercise at 9, but the analysis said that was perfectly safe for me and probably even beneficial, and I didn't care enough to put in a bid to change it.

I strapped in to an available chair and transited to the ring, grunting slightly under the acceleration. It's not that I can't handle this level of gravity, it's just that gravity always comes as a shock when you first enter it.

Still, nothing for it. I got up and started to warm up for some more serious exercise, and after a few hundred seconds it was time to get started properly. I broke into a run.

About a third of the way around the ring I saw someone doing callisthenics by the side of the track. I waved to them in greeting but didn't stop running.

The ship's computer is not an AI. You can tell this from subtle signs like the erratic conversational interface, the way it sometimes fails to make simple inferences when you ask it questions, and the lack of crew with cutting torches swarming all over the ship looking for where it keeps it core.

I mention this because although it's obviously good that the ship is not an AI, it causes a number of problems. In particular it's much less satisfying to call it an underhanded waste of space grounder when it pulls something like this.

The other person on the track was Kimiko, the one who had filed the bug report that I was working on. I'd expressed a vague interest in socialising with them when I thought they were safely asleep for the foreseeable future, and the ship decided to throw us together.

While also getting in my mandatory exercise. I'm sure some algorithm thought that this was very efficient.

It's a bit rude to ignore someone while you're at the gym. Not unconscionably so, but slightly churlish. Obviously we're not going to socialise while we're actually exercising, but the expectation is that rest breaks between exercises are a time to socialise. Given that Kimiko is someone it would be good for me to talk to on top of that, I probably couldn't get away with avoiding them.

On the plus side, that was good incentive to keep running, so I made it a full five circuits of the ring (nearly 8k!) in a bit under 2 ksec. Not a personal best by any stretch, but I also don't usually run in this stupid high gravity.

Kimiko was also taking a rest when I finally stopped, so I flopped down next to them.

They were... a bit funny looking. There's a pretty wide range of body plans among the Crew, but there's a certain Crew look that you get used to and they didn't have much of it. They were on the tall side - about 1.63m - with weirdly pale skin and some sort of... I guess it must be hair on their face.

We sat in what I assured myself was entirely non-awkward companionable silence for a few tens of seconds while I caught my breath, but I eventually I'd recovered enough and broke the silence.

"I thought you were asleep."

They gave me a quizzical look.

"Uh, OK?"

"Sorry. That didn't come out right at all. Let me start again. I'm working on a bug you reported - the one with the weird sound in the walls - so I'd checked if you were awake to ask about it and you weren't, so I was surprised when I saw you here."

"Oh! Right! Thanks for looking at that. I wasn't sure if anyone would bother, but you know what they say - an unreported bug is always critical."

I nodded. A much better attitude than certain dead crew members I could mention.

"Well, nobody over in plumbing proper is going to look at it I expect but I mostly get to work on whatever I like, and i like tracking down weird ghosts in the machine and am good at plumbing, so here I am."

"So what did you want to ask me?"

I waved a hand to cut off that line of conversation.

"I'll have to do that later, sorry. I'm not allowed to work right now."

"Ah, mandatory downtime. Sorry, I should have noticed."

"No problem."

Naturally enforced downtime is part of your primary information. It's important for other people to be able to see you're being naughty and overworking. Sometimes I hate all this nosy software.

"Anyway, to answer your question, I was asleep, but they woke me to deal with this yeast contamination problem. I was one of the primary engineers when we brought in this strain. They've been having a bunch of problems with it, and wanted some help getting to the bottom of it. It'd be a shame to ditch it - it's nearly 1% more efficient than the strain it replaces! - but if it's going to keep doing this..."

"Right. Makes sense. So how's it going?"

"Beats me. I've only been properly awake for about 10 ksec. I'll get to work after I've recovered from the gym and had a short nap. We're replacing it with a more stable strain for the next batch from that vat, so there's no rush."

I nodded. I'd be keen to get started, personally, but this sort of relaxed attitude was much more sensible for interstellar work - there would be plenty of urgent things when we got in system, and there might be before then, but if there wasn't any actual urgency then why stress yourself by creating a false one?

We lapsed into silence again. Eventually I broke it.

"So, um. If you don't mind me asking, what's with the...?"

I gestured vaguely around my face.

"What? The beard? I had it grown in a planet side mission a while back, and I decided I liked it, so I kept it."

"OK but why?"

"I dunno. It just... felt right."

"No, sorry, I mean why did you need to grow it for a mission?"

"Oh, huh. You mean you've never even encountered beards?"

"Not really. I mean I guess I might have seen them before in pictures, but I don't have the concept."

"So you haven't watched Lesbian Space Pirates?"

"A bit? I'm not very into it."

"But Lesbian Space Pirates is hilarious!"

I shrugged helplessly. I've yet to find a non-awkward way to explain that misunderstandings of your culture are only funny if you actually fit comfortably into that culture in the first place.

They took a deep breath.

"OK. Have you heard about gender?"

Chapter Text

“OK. Have you heard about gender?”

It didn't ring a bell, and my HUD wasn't indicating any sensible translation for the concept to ones I had, so probably not.

"I don't think so?"

"OK. So you know how grounders often have all these weird appearance based caste systems?"

I nodded.

"Right, the skin colour thing."

Now I felt bad that the first thing I'd noticed about them was their pale skin.

"Yeah, that's the big one. Causes us no end of trouble. Anyway- argh, waste it. I'm sorry, can we put this on pause? I'm getting an alarm that I need to do another set before I cool down too much."

I did a quick check to see if they were just blowing me off, but the alarm was legit, and the social cues system suggested they were perfectly comfortable up until the alarm annoyed them.

"Sure, no problem. I guess I should do another circuit or two too."

"Great. This is my last set, so how about we meet up at the hot tub?"

I queried my program.

"Sure, I'm good to stop after this set too."

I heaved myself up and broke into a run again, which gave me time to think things through.

That hadn't gone... too badly. I fumbled my introduction something awful, but I think I recovered well enough. I then went straight for the personal questions, which wasn't great but they seemed happy enough to discuss it and were generally a genial sort. All told, not too bad. Still plenty of scope to mess things up, but doing OK for a first meeting.

And the rest of the conversation would be had in a hot tub, which helps. It's hard to get too stressed out in a hot tub.

Gravity is awful and I hate it, but the way water behaves in gravity is almost enough to redeem it. Water in zero gravity is a menace that you have to keep very well separated from any sort of free space, and swimming requires a breather mask. But in gravity it just... sits there. Or flows downhill. it's pretty amazing, and it enables hot tubs, which are so much better than steam rooms.

Basically what I'm saying is I like hot tubs.

Which may have contributed to the fact that I only made it about one circuit before I decided I was entirely over running. I sent a message to the hot tub to prepare for occupancy and declared myself done with exercise for now when I next passed it.

The hot tubs we have are pretty great. They're giant pools raised above the base of the ring off to one side of the track. You could easily fit 20 Crew in one, so Kimiko and I were going to be practically lost in it unless anyone else decided to join us.

I stripped off, threw the dirty clothing into the refresher, and showered. Showers are better in zero gravity, but I'll admit they're a lot easier in gravity.

Once I was suitably clean I eased myself into the gently steaming water and stopped thinking for a couple hundred seconds.

Eventually I was roused by Kimiko.

"Mind if I join you?"

They sounded amused.

I cracked open an eye and realised I'd drifted out to the center of the pool and was floating splayed out on my back. There was no way for me to take up the whole tub, but I was doing my level best.

I blushed - though between my skin colour and heat it probably didn't show much - and scrambled to a slightly more civilized position on the ledge at the side of the pool.

"Sorry."

They waved a hand dismissively.

"Not a problem."

I looked them up and down as they got into the pool. I hadn't really being paying attention earlier so I hadn't noticed but they were really impressively muscular. Not the sort of grotesquely huge muscles you sometimes saw on grounder shows, but way more athletic than I'd ever seen on a Crew member before. I guess that's what doing extensive calisthenics in high gravity will do to you, but wow.

I wondered why they bothered. It's not like strength is much use to us.

They sat down on the shelf next to me, leaned into my shoulder slightly and closed their eyes.

We sat in silence for a while. I figured I should give them, and me, some time to relax before we started talking again.

Eventually they opened their eyes.

"So, I was telling you about gender. Still interested?"

"Sure."

"OK, so, as well as these skin colour based distinctions, most grounder societies also have another way they split people up, which they call gender. Usually there are two genders, sometimes three or four, but the common genders everyone seems to have are men and women."

"That makes sense so far. So what determines your gender?"

"Well it depends on where you are. But basically men have beards and women have big breasts."

I turned to look at them. Apparently not joking, but it can't hurt to check.

"You're kidding?"

"No, honest. Beards and big breasts."

"That doesn't make any sense. I've seen grounders. Most of them don't have either, and some of them have both!"

They shrugged.

"Yeah, it doesn't really make sense. We're pretty sure about the beards and big breasts thing, but the rest is all a bit blurry. Supposedly it's meant to be about genitals - the men have a penis and the women have a vulva - but that doesn't really explain the other genders, and the grounders I've met seemed perfectly happy to accept me as a man without checking if I had a penis or not."

I resolved not to keep asking if they were kidding, but couldn't resist the urge to check if they had a penis (they didn't). I changed tack slightly instead.

"But what is gender for exactly?"

"Well it's all a bit culturally dependent, but it's primarily a status marker. Men are usually high status."

"So you have a beard to show you're... high status?"

I didn't entirely succeed at keeping the disgust from my voice.

"Gah. No! Definitely no. I just like the beard."

I relaxed slightly.

"Anyway, even if I wanted to use it that way it wouldn't work. Most of the Crew learn about beards from Lesbian Space Pirates, where the men are low status."

I pinched the bridge of my nose and groaned.

"So men may or may not have penises or beards and may or may not be low status but it's clear to everyone except us which ones are men and we're not really sure why?"

"Pretty much."

"This seems like a complete mess. How did people come up with this?"

They shrugged.

"Archaic reproductive methods. If you don't have uterine replicators, only people with a natural uterus can bear children."

I winced and clutched my stomach slightly. No thank you.

They continued.

"Between that and the correlated biological differences you've got enough of a split to create one of those arbitrary social divides grounders like, which then mutates and changes over time, and tends to stick around even after they get proper reproductive methods. Like the charter says, social structures never die unless you kill them off."

"This all sounds terrible."

"Yeah, it's pretty bad. Grounders, eh? Still, the beard looks good, don't you think?"

"I'm still getting used to it to be honest."

"It'll grow on you."

"Maybe, but I don't think I'll be getting one myself."

They looked me up and down.

"Not unless you feel like really confusing some grounders, no. Which is always funny, but they get a bit touchy and violent about this one, so maybe best not if you plan to go ground side."

"If they're going to declare me low status just because of my breast size I'm not sure I want to!"

"Eh, you'd mostly be protected by being Crew. Grounders are intimidated enough by us that they tend to give us a high status by default, unless you're in one of the really bad places."

"Ugh. More status rules? How do you keep track of all this?"

"Oh, we don't. We just do it in software and tag people with the relevant information. It's healthier than trying to internalise whatever ridiculous rules the local grounders feel like playing by."

"Oh. That's not so bad I guess."

In fact, it's more or less exactly how I navigate Crew social conventions. We don't have status hierarchies like that, but what we do have is just as complicated, and I think I probably have two or three times as much annotation as normal people do.

"Yeah, it's annoying at first but you get used to it pretty quickly."

No signs of that after more than a gigasecond so far, sadly.

We lapsed into silence again. I think they picked up that this was a bit of a touchy subject for me.

"So, if you don't watch Lesbian Space Pirates, what do you watch?"

"Uh, not much. I'm not big on passive media. I play a lot of Evolve instead."

"Oh, the graph theory game?"

"Well it's really more of an abstract strategy game where the core playing field is graph theory. I tend to play it through the topological view."

"Right. What's the appeal? I tried it for a while but I couldn't really get into it. It's very slow moving."

"That's the appeal! I know a lot of people who I'm not shift synchronized with, and it's really good for long play, so it makes a good way of staying in touch across shifts."

After that the conversation became more casual - the games we played, the people we knew, etc. Nothing of great consequence, just the sort of social maintenance you use when sounding out someone new.

After another kilosecond or so, Kimiko had to go.

"Arthur, it's been great meeting you, but I think I'm going to go get some food and sleep. Want to join me?"

I thought about it for a moment. I couldn't tell if it was a genuine invitation or just politeness. I decided to play it safe.

"No thanks, I think I'm going to float around here for a little longer. See you soon, though?"

"Absolutely. We still have to talk about that bug if nothing else."

We hugged and cheek kissed goodbye - the beard was scratchier than I expected, point against it.

I watched them as they blow dried themself. They really were very muscular, and I hadn't quite decided yet whether it looked good or ridiculous. It was still impressive, either way.

They finished dressing and putting their hair back up and we waved a final goodbye.

Which left me alone in the hot tub. Honestly, I'd probably been here long enough - I was starting to prune - but I was going to need some food after this and we're only running one dining room at the moment, so it would be awkward to leave now.

Oh well, more floating time. I pushed back off to the center of the pool and drifted for a while.

All told, I thought that went quite well. Positive first meeting of a fellow crew member. Possibly even a new friend. My HUD certainly thought so and was giving me all sorts of encouraging feedback.

They were a bit odd, granted, but I'm hardly one to point fingers there.

Rather than mull on all of the things I could have done better, I idly flicked through the news feeds to see what else was going on on the ship and whether we'd picked up any interesting new data from the larger network.

After a while, the heat of the pool and the earlier exercise got the better of me, and I drifted off to sleep.

Chapter Text

I was only asleep for about a kilosecond before I started getting an alert from the system. It was quite reasonably informing me that if I insisted on sleeping in the hot tub then perhaps I should consider doing it face up?

I certainly hadn't started face down in the water, so apparently I'd rolled over in my sleep at some point. I drifted for another couple of tens of seconds and then finally decided to acknowledge that OK yes breathing was useful. I rolled back over and sighed dramatically (important to get the order of those right).

I really hadn't wanted to fall asleep there. Unsupervised sleep is awful even in zero gravity. In gravity you also have to deal with nonsense like which way up you sleep. I mean really, why should that matter?

Between the exercise, the heat, and the bad sleep I now had an annoying nagging headache and an overwhelming urge for food, water and painkillers, more or less in increasing order of priority.

I put in an order to the nearest delivery slot and heaved my way out of the hot tub to go have a shower while I waited for them to arrive.

I'm not too proud to admit that I shrieked when the cold water hit my head. It's supposed to be very good for you after the hot tub but I was still half asleep and even at the best of times I usually manage to forget that these showers aren't kept at a sensible temperature.

I lasted about 40 seconds before I decided enough was enough. I did feel better afterwards, but I swear that's mostly because of how glad I was to have it stop.

Yes, I know that what's good for you isn't the same as what you enjoy. I've heard it enough times by now.

I dried off and quickly put my hair up into a bun - I really couldn't be bothered to do it properly at that point - and by the time I was done with that the delivery had arrived, so I padded over to the nearby delivery point and tore into it.

I put the painkillers in my shunt and gulped down most of the electrolytic drink. Once my thirst had been slaked and the painkillers had kicked in, I turned my attention to the protein bars and devoured them in a few bites.

None of it would be particularly tasty in normal circumstances, but post-gym hunger is a harsh master and salt, water, sugar and protein was exactly what I needed at that point.

I removed the empty painkiller capsule and put it and the empty packaging back in the compartment to be taken for recycling. I figured it would take a while for things to kick in, so now was as good a time as any to get around to that meditation I'd been putting off.

I sat down cross legged (I can do a full lotus, but I couldn't really be bothered. I know it's cultural, but I also know the science says it doesn't help) and called up my program. In the end it took me almost two kiloseconds to work through it - I'm not very good at meditation in the first place, and I was still feeling a bit twitchy from my impromptu nap, but eventually I got my mind into the right state and after that it proceeded more smoothly.

By the end of my meditation I was feeling a lot more human. My headache had subsided, along with the hunger and thirst. I went through some finishing stretches to undo the sitting - yet another reason why gravity is awful. Those finished, I fetched a clean uniform from the wall and changed into it.

I called up an image of myself and quickly checked my hair - I still couldn't be bothered with more than a bun, but there's no point in looking outright scruffy - and fixed a few stray bits at the back that I'd missed.

I decided I'd really had enough of people for now, so I got the transit chair back to the main ship and tucked myself away in a quiet pod to work on my Evolve strategies for a kilosecond or five.

Eventually, though, I got curious about work, and my schedule told me I was unlocked for it again and was welcome to resume if I wanted to, so I did.

I'd left some of my prototype zombie hunters running while I was away. They weren't reporting anywhere except privately to me - I was sure they had bugs in them, but looking at some of the answers they gave now and seeing if they were right would help me figure out what those bugs were.

"Ide, how many potential zombies have my new hunters flagged up?"

"147"

"Ugh. All right, show me."

I spent some time looking through the list and filtering things down. A bunch were false positives as expected - some interfaces that I had treated as read only in my original criteria were actually read/write but used some obscure different convention due to historical reasons - but eventually after some filtering I'd narrowed it down to 31 that were probably legitimate.

After a while of scanning through them at a high level and doing some basic triage I spotted one that looked interesting. I dug into it for a couple of kiloseconds until I was sure I understood what was going on, but it was exactly what it looked like.

Which left me with a dilemma: I was going to have to tell Kimiko about this. I didn't want to seem too needy though, so it felt a bit soon to get in touch with them.

I dithered for a couple hundred seconds, but eventually concluded that I was being stupid. Even if I'd never met them I'd want to contact them about this, so putting off telling them about it because I did know who they were was just ridiculous.

I checked their status and they were apparently awake and working, so I opened up a line.

Arthur [vic-taf]: Hey, Kimiko?
Kimiko [jad-nic]: Oh, hey Arthur. What's up?
Arthur [vic-taf]: I found some broken processes when I was looking into that bug for you, which has sent me off on a zombie hunt. It's been running for the last couple of tens of kiloseconds and it surfaced something you should probably know about.
Kimiko [jad-nic]: That's great, I'd love to hear about it later, but I'm kinda in the middle of figuring this yeast problem so do you mind if we take a pause on you telling me about it?
Arthur [vic-taf]: Actually this is about the yeast problem. I think. Maybe. Did you know the nutrient feed for the vat it's in isn't working properly?
Kimiko [jad-nic]: ... what.
Arthur [vic-taf]: The feedback loop isn't running properly - the process that's monitoring the nutrient levels in the vat has the control part of it patched out, so the feed is just defaulting to a standard rate of flow.
Kimiko [jad-nic]: Argh, waste it. That would do it. This yeast uses slightly more feed than the normal batch, so it's eating through the available feed stock and then doesn't have enough to replace it. No wonder the little wasters are going sexual.
Arthur [vic-taf]: Oh good. I wasn't sure it was relevant, but it seemed too much of a coincidence to ignore.
Kimiko [jad-nic]: Yeah this is absolutely relevant and you've probably just saved me a couple tens of kiloseconds of work debugging this. Thanks! [200 millivotes kudos attached]. But why on the ground is that happening?
Arthur [vic-taf]: Apparently the control sensor on it broke when we were last interstellar and we didn't have replacement parts, so it was patched out as a temporary fix.
Kimiko [jad-nic]: Yeah, I remember that, but we replaced the sensors in-system and that should have triggered the reset condition, right?
Arthur [vic-taf]: Well it should have, but we picked up a new design from the locals and it uses a new interface, but the patch was expecting the old interface so the reset didn't trigger.
Kimiko [jad-nic]: So who did the patch anyway? I should give them a rap on the knuckles.
Arthur [vic-taf]: Oh, uh, heh. Funny story... [Patch reference attached]
Kimiko [jad-nic]: Huh. I do not remember doing that at all.
Arthur [vic-taf]: Sorry.
Kimiko [jad-nic]: No biggie. Anyway, I'm going to go untangle this and see if I can prove this was all that was going on. Thanks again!
Arthur [vic-taf]: No problem! Happy to help. Good luck.

I closed off the link.

That was satisfying. Even if the plumbing bug turned out to be completely innocuous, this line of work had proven definitely useful - sure they'd have figured out the bug with the vat in the end, but that wasn't the point. The point was that the zombie detection worked and it worked well enough that if we'd been running it we'd have caught this bug before it actually ruined a batch of yeast.

Which, I decided, made this a good point to down tools. I was still feeling a bit off from my nap earlier, but some proper sleep would fix that.

I shut down my workspace, plugged into the wall, an initiated my sleep program. The lights dimmed, and after a few tens of seconds I was once again fast asleep.


Chapter Text

After the standard 10 ksec or so sleep the system brought me back online.

I got the usual morning startup screen - diagnostics for my sleep, news, patches to my software, etc. Nothing very exciting. I was being gently chided for not having had a proper dinner yesterday - two protein bars after the gym really don't count - but the system had replaced the worst of it while I slept and informed me I should just have a large breakfast to compensate for the rest. Other than that, all systems looked good.

I acknowledged the instruction for breakfast and spent another hundred or so seconds reviewing the data, but it was all pretty boring.

The correct thing to do at that point would of course have been to shower, get dressed, and go get some food as instructed, but something was nagging at me from yesterday's work... I checked, and it was fine for me to put off breakfast for another 5 ksec or so (though I got the irrational sense that the system was judging me for it), so I decided to just go straight to work.

"Ide, how many temporary patches do we have in the system?"

"Four million, five hundred thousand, one hundred and seven."

I squeaked slightly.

"WHAT?"

"Four million, five hundred thousand, one hundred and seven."

OK, fine. I was expecting a large number. I wasn't expecting it to be that large - I'd have thought maybe ten thousand at the upper limit - but it didn't actually make a difference. Either way it was too large to handle manually, so it was just a question of getting the software right.

Still, more than four million? I know there's nothing so permanent as a temporary fix, but that's just ridiculous.

"Ide, what sort of time frame does that span?"

"The oldest is approximately 0.26 teraseconds old."

"Wow, OK."

That didn't make any sense. The current patch system isn't even that old. The trade fleet is barely that old.

"Ide, how are you defining temporary patch?"

"I have a complex heuristic subprogram that indexes logical patches from either the fleet system or imported software strata and looks at metadata and comments to flag them as temporary."

"Oh, right. If you just look at trade fleet authored patches in the modern system which have been explicitly flagged as temporary how many are there?"

"One million, sixty two thousand and eight."

"Ugh. And when is the oldest of those?"

"Approximately 0.15 teraseconds old."

This was not going to be a productive line of inquiry, but curiousity got the better of me once again.

"OK, show me the oldest."

ID: 3b2ca7b197f9c65e883ef177178e20e6bb14b...
Author: Demeter [bim-bof 3 off the Entropy's Plaything né Wild Wayward Bird]
Revert-On: Closure of f265957e0a2...

Add a flag that deliberately ties the theorem prover's hands by restricting
the set of valid interleavings when running in time travel mode.

Why? Well it turns out that *some* Linux descendants have a very peculiar idea
of how x86 is supposed to work. This idea is backed up by neither the spec,
nor by the actual physical machines that existed back when x86 was still a
real thing rather than an interop standard.

How did that happen? Well this wasted code comes from a descendant of the
"Corewards Bound", who at some point introduced a bug in their
implementation which made things run faster and didn't obviously break any of their
software. When they found this problem a few hundred gigaseconds later they decided
to patch Linux instead of their misguided grounder-inspired broken emulation software.
Nobody backed it out later, it got passed down through three generations of ships,
and finally got handed over to us and now we're stuck with it.

This patch is stupid and should go away once the referenced issue is resolved.

I looked at the patch. It was some really hairy logic right down at the formalism layer for one of our emulators. I had absolutely no idea whatsoever what was going on in it. I didn't know the language it was written in, I can barely read either x86 or the intermediate representation it was being compiled to, even with Ide's assist, and besides I don't know half of the maths required to understand why it was doing what it was doing.

The referenced issue was about patching Linux to not depend on this broken behaviour. It had reached almost a million words of discussion before just trailing off - I think given the timescales involved everybody who cared about it had died of old age. Or maybe we just lost touch with them - neither this code nor the code it patched were from anywhere in our direct lineage.

"Ide, how many services are running with this flag set?"

"Seven"

I breathed a sigh of relief. That was a much better answer than I was afraid of.

"When was the last time any of them had a bug?"

"No bugs have ever been reported in these services."

"OK. How about in their service categories?"

"Approximately 80 gigaseconds ago."

"What was it?"

"The Untranslatable Word passed through an area with an unusually high helium mix in the local interstellar medium. This increased the crash rate of the process by 15%, which triggered a maintenance alarm."

"How was it fixed?"

"The alarm threshold was raised by 50%."

OK. So I'd found a weird hack in the implementation of some extremely reliable services. My duty was clear: Do nothing, touch nothing, make like a diasporan and leave at extreme velocity. I was more likely to break something by trying to "fix" it than do any good by touching this.

Time to back up and look at the actual problem.

"OK. How many temporary patches are there that were created on the Eschaton Arbitrage which apply to some but not all running processes in a category, have a trigger to revert on a hardware change, but predate our last planetary stop?"

"Nine"

OK. Now we were getting somewhere.

I spent the next few ksecs triaging those nine manually. They all looked pretty harmless, but I bet there were some gremlins that they'd flush out when the relevant teams looked into them. That definitely wasn't going to be my job though.

After that, I wrote up a wiki entry about this problem and filed an issue making some general suggestions for how we could improve the systems around this to stop it happening again. I wasn't very optimistic it would go anywhere, but it was at least worth making the effort.

At which point, I decided it really was time for breakfast, and headed to the showers to get ready for the day.

I showered quickly, dressed, and spent a few hundred seconds dealing with my hair. I found the style my schema gave me a bit boring so I spent a little while tweaking the parameters to give something less symmetrical.

Eventually I got my hair decisions resolved, and headed for the common area for my much delayed breakfast.

Chapter Text

As usual, I paused at the entry to the common area to scan the room.

It was incredibly quiet. Apparently I'd got out of sync with the normal meal rhythm of the ship again. Oh well, too bad.

Sam was there, along with someone else my HUD told me was named Brian. Apparently I'd met them twice before, but I had no memory of that at all. My notes for them said "Likes to talk about game theory".

Sam waved a greeting at me as I passed. I waved back, and considered my options. Registered eccentricity or not, ignoring them and eating on my own would just be rude. Sam probably wouldn't mind - they know about my eccentricity and are generally a forgiving sort - but particularly with someone else involved it would look bad and is best avoided.

I grabbed a meal pouch - extra protein, as per the system's suggestion - sighed, and bounced back to join the two of them.

Brian was a pretty typical looking crew member. Short - slightly shorter than me, even - somewhat curvy, skin maybe a bit darker than average. They were currently doing a rather impressive fractal braid that I was pretty sure my hair wasn't thick enough to pull off, but I made a note to see if I could steal some of the geometries. Sam was fully bald as usual.

"Hey Sam, hey Brian."

"Hey Arthur! Brian was just telling me about why they've been hogging all that simulator time."

"Oh?" I inquired politely while glancing at the contextual cue from our last conversation to remind myself what that was about.

"Yeah, apparently some of the information that we'd got on the broadcast has given them a breakthrough on some really exciting stuff. Brian, do you want to explain it or do you mind if I do to see if I understand it properly?"

Brian waved their hand. "Go on, as long as you don't mind me jumping in if I think you're off track."

"OK, great. Arthur, how's your game theory?"

I smiled. Looks like my notes were reliable at least.

"Eh, rusty at best. I've taken all the standard courses on it of course, but plumbing systems don't try to outsmart you so I'm pretty out of practice."

"OK. Do you remember what a trembling hand perfect equilibrium is?"

I blinked and called up the definition to refresh my memory, then nodded.

"Vaguely."

"OK, so..."

The explanation went on for a long time. I asked some questions, got some explanations, and think in the end I got maybe a third of it.

My very naive summary of it is this: Apparently some pure research that came in on the broadcast when we were in the last star system had applications after all. It established slightly tighter bounds on a classic convergence result in continuous time Markov chains. This in turn lead to a new strategy for dealing with boycotts of hostile planets, because in certain circumstances you could force a suboptimal equilibrium into a better state.

If the results of the simulations panned out in practice, this would reduce expected total length of boycotts by almost 1%. As well as saving a lot of lives, it had the more important effect that if it doesn't disturb the standard model too heavily it should bring the best estimated likelihood of success of the coreward expansion from 99.72% to 99.73%. This would be extremely exciting, as that would be the first significant improvement in that number in several tens of gigaseconds of lineage time.

I'm sure the details were very clever, and Sam and Brian seemed very excited about them, but it was too far out of my field for me to really get more than the gist of it and, honestly, I didn't really care enough to try that hard.

Eventually the explanation wound down and we hit a lull in the conversation. Brian broke it.

"So, uh, Arthur."

They had a strange look on their face which I couldn't interpret. I checked my HUD and apparently they were embarrassed. Odd.

"Yes?" I said in my best tone of polite interest.

"I noticed from your status that you've become friends with Kimiko recently..."

That sounded ominous.

"I guess so? We've talked a bit and they seem nice. Why?"

"Well, um, did you notice anything off about them?"

"What, you mean the uh-" check cue, and vaguely gesture at my face to cover the hesitation - "beard? Sure, it was a bit strange, but it seemed harmless."

They waved their hand dismissively.

"No, no, beards are fine. There was a big trend for them a while ago before people got bored. But surely you noticed their social centrality markers?"

I shrugged.

I have a lot more status information configured than most people, and I'm not really that interested in the social games given how badly I do in them, so the relevant statistics tend to get crowded out.

I called them up and noted with some surprised that they were even worse than me. Curious. They seemed friendly enough.

"Oh, huh. That's weird. No I hadn't noticed that before."

Sam rolled their eyes at me.

"Arthur you really do need to be better at paying attention to these things." they said.

"Sorry. So, uh, what's up with the low centrality? I don't see any markers on their file to explain it."

Brian looked even more embarrassed.

"Well, uh, you see. They have sex."

I blinked. I knew people cared about that, but I wasn't entirely clear on why. Anyway we didn't ostracise people for it did we? That couldn't be healthy. A lot of people experimented once or twice, so that sounded like a great way to create social division.

"OK? And?"

"What? You don't care?"

"Well, sure, it's gross, but it's not like they're having sex with me, right? They haven't asked and I'd just say no if they did. Unless you're suggesting..."

They looked horrified at the idea.

"No, no. They wouldn't still be around on the ship if they did that. Just, you know, sex. A lot of it apparently."

"OK. I don't see the problem then?"

Was I starting to sound annoyed? I think I was probably starting to sound annoyed.

The look on their face changed. HUD said probable sudden realisation.

"Oh, sorry, do you uh...?"

"What? No! Yuck. I just don't see the point in worrying about aspects about someone else's private life that don't affect me and are explicitly kept behind a privacy screen by charter!"

I was starting to get alerts that this was a bad social interaction and that we were making Sam very uncomfortable, but I had no idea how to deescalate when I didn't start this mess in the first place.

We glared at each other for a little while while I tried to figure it out, but in the end they were the one who backed down.

"Ugh, fine. Be like that. I'm sorry I brought it up."

"That's OK. I'm sure you meant well."

I'm reasonably sure they didn't need any sort of HUD notification to notice the lie.

"Anyway, I'd better get back to work. Good to see you, Sam. Uh, nice to meet you again, Arthur."

And, for once, I didn't either.

We both cheek kissed Brian goodbye, mine rather more perfunctory than Sam's, and they pushed off the wall and made a rapid exit.

Sam turned to me with a pained smile.

"I think that went well, don't you?"

Chapter Text

"I think that went well, don't you?

I let out a huff of frustration.

"What on the ground was that about?"

Sam cuddled up closer into a two person conversation stance.

"Brian is just a bit... sensitive about the subject of sex. Not sure why. Their profile says they have a high disgust reflex, but I've never been sure if it says that because of the sex thing or whether it's the reason for it."

"OK, but call me off consensus here, but wasn't that just straight up rumour mongering? We're not supposed to do that, right? What am I missing?"

Sam grimaced and (check tagging) looked uncomfortable.

"There are... special cases. Sex is one of them. Kimiko could legally challenge Brian about this if they wanted, but without that Brian is technically within socially acceptable bounds, though they're being a bit gauche about it."

I called up Kimiko's social graph into a shared workspace and highlighted ties that had risen and then fallen. Brian was connected to about a third of them. I switched it to timeline mode and the pattern was even clearer.

"Gauche? Look at that. This isn't gauche, this is practically aggression!"

I was getting mood warnings again, and Sam was stroking my back in a calming manner.

"Arthur, calm down. This isn't your problem."

"How is this not my problem? This is a clear social breakdown on the ship! Those are everybody's problem! It says so right there in the charter!"

"Look, it's complicated."

"That's what people always say when they think the rules don't apply to them!"

Sam grimaced again and shook their head.

"Ugh, Arthur, I can't do this right now. I'm sorry. I'm not angry at you, and I understand why you feel this way, but this is a much higher effort conversation than I have the capacity for at the moment. Can we drop it?"

Sam and I have had more than a few conversations like this, and they probably could tell how this one was going to go.

The problem was that it was hitting right at the core of the things I find hardest about shipboard society.

The goals of our charter are mostly worthy, and the rules it defines are mostly a fair way of achieving those goals. It's not perfect, but nothing created by humanity is. We've learned that the hard way.

The official rules are sometimes very hard for me to follow, but I accept their legitimacy and where I struggle too much I have software to help keep me on track.

But then there are all the unofficial rules, which are impossible to keep straight because nobody knows what they are in any formal sense, they just somehow magically know how to follow them. Every time I ask people to explain, we just both get frustrated - they tell me things they want to be true, and I get mad because they obviously aren't.

And when the unofficial rules override the official rules you got this sort of completely hypocritical situation where people just said "it's complicated" and can't really explain why.

But it wasn't Sam's fault the ship was like this, and I could definitely understand not feeling able to talk about it. Even if it wasn't basic courtesy, I'd respect that.

I was glad they had clarified they weren't angry with me though.

I took a deep breath, pulled myself together, and nodded acceptance.

"Of course. Sorry I got carried away there, but this stuff... gets to me."

"I understand. It gets to me too sometimes."

"It's fine to not talk about it, but then I need to not talk right now. I think this is going to be on my mind for a while and I'm probably not going to be able to stay off the subject."

"That's fine. Do you want to go? Or should we hang out together quietly for a bit?"

I hesitated briefly, but the need to show Sam that I wasn't angry at them won out.

"I don't need to be anywhere, and the company would be nice if you're still willing."

"Of course I am! And I've got plenty of quiet things I can get on with, so this works well."

"Great."

We shifted around a bit so we weren't directly facing each other and could each have a hand free to work with.

The first thing I did was drop a note in Kimiko's inbox saying I'd like to talk to them at their convenience. I flagged it as low-urgency but mildly important. Their status showed as busy at the moment, so they wouldn't get the notification until later.

The second thing I did was start calling up social network diagrams.

Kimiko was indeed poorly connected to a lot of the rest of the crew. They had the obvious contacts in the biology sections, and there was a fairly densely connected group of about fifty people that they were part of that didn't have any obvious reason for the connection.

I guessed that was probably the sexual subset of the crew, assuming Brian hadn't simply been wrong or lying.

The network structure here was weird. The group was much more densely connected relative to its external connections than a group this size should be. It looked a lot like a clique or a minority interest group, and we weren't suppose to have those. I looked up the various group metrics to see why it hadn't been flagged.

Apparently the answer was that it consistently sat just under the alerting threshold on every single metric - slightly too large to be a clique, slightly too small to be a minority interest. The standard clustering algorithms all cleaved the group roughly in half, though they didn't agree on which halves. Average group centrality was low but not quite low enough to be worth a flag. And so on - we have about ninety social unity metrics and this group managed to just avoid alerting on every single one of them.

If I'd found a system in the plumbing like this then I would have immediately flagged it up for review. It's in the nature of difficult systems to push right up against the alerting boundaries, and often it's a sign that you need a new alerting metric.

Properly that was exactly what I should have done here too: The rules don't distinguish systems made out of humans from systems made out of machines. If you see anomalous structure you should flag it for review.

But I had a nagging feeling that doing that here would be... bad. I resolved to wait until after I talked to Kimiko, and raised the importance level of my request to meet slightly, while still leaving it as non-urgent. This had clearly been going on for a while, and just because I only found out about it now didn't make it suddenly urgent.

The whole scenario left me feeling intensely uncomfortable, but on the plus side I'd found my own little exception to the rules to be hypocritical about. Maybe I was starting to understand the rest of the crew after all.

Chapter Text

Sam and I worked in companionable silence for about five kiloseconds, but eventually they had to go lead a Krav Maga session, so we kissed each other goodbye. Kimiko was still flagged as busy, so I took the opportunity to retreat to a pod to do some real work.

Uh, not that social network analysis isn't real work you understand, it's just not exactly in my remit. It's a useful skill to keep your hand in on, but I try to avoid the trap of becoming a generalist.

I reviewed where I was on my current task: I still didn't know much about what was going wrong, but had a hint that it was something to do with temperature events.

At this point I could do an exhaustive analysis and try to binary search out the exact problem. It would take ages and require a lot of detail work, but it would almost certainly work in narrowing down at least one real problem.

But I wasn't really in the right frame of mind for detail work, so I decided to gamble instead.

"Ide, show me something interesting to do with the current task."

"I have a temperature control program marked as critical that exhibits anomalous command output prior to the event and currently has a failing build. Is that suitable?"

"Perfect."

Almost too perfect in fact. I wondered why that hadn't that flagged up before.

"How many other equally interesting things could you have shown me?"

"113"

RIght.

"OK, call up the specs for this program."

Subject: Stochastic Temperature Control Feedback Regulation Unit 3
Origin: New Earth 2
Language: Go#
Importance: Critical
Reliability: High
Obsolescence: High
Fragility: High
Notes: It might be best to leave now, you probably shouldn't touch this.

That wasn't encouraging.  Also, I wasn't thrilled by the idea of learning about another weird Grounder programming language.

I sighed. Still, I wasn't just going to stop without looking into it a bit.

"Wiki, show me the specs for Go#"

Subject: Go#
Category: Programming language, text based.
Lineage: Pre-diaspora, began as a dialect of Go in 2021.
Common Tags: Archaic, Esoteric, Moderate Complexity, Evolutionary Dead End, Poorly Thought Out.
Normalised Rating: Please tell me you're not still using this.

Definitely less than encouraging.

"OK, show me the failing build step."

Ide displayed a bunch of code for me. I can't say I understood any of it, but one thing stood out.

"Wiki, what's Hypothesis?"

"Hypothesis is a generic term for a family of testing tools that were popular for a period of approximately five gigaseconds before and around the diaspora. They work by generating random data to run a conventional unit test against."

"Wow, really? Does that work?"

"Significantly better than the methods that predate it. Unassisted humans tend to to be very bad at writing correct software, which results in many shallow bugs that simple random testing can uncover. However, it has largely been supplanted by modern symbolic execution and formal methods, as the number of bugs it finds grows logarithmically."

"Ide, how long did it take to find this particular bug?"

"Approximately nine gigaseconds of compute time."

Wow. This code had run for most of a crew lifespan before eventually finding a bug. That was rather adorable. I vaguely saluted whatever grounder was responsible for this thing, and reflected on how grateful I was to not be them and to have access to modern tooling.

"How long would it have taken given appropriate formal methods?"

"Difficult to estimate due to low availability of formal models for this language. However, based on the execution trace this is a known bug in OpenSSH, where the bug was found within the first four seconds of active testing of it under a more modern test suite written as a student exercise in a class on software archaeology on the Star Struck three gigaseconds ago coordinated time.

That was about what I expected.

"Wiki, what's OpenSSH?"

"It is a secure network communication protocol, originally designed to provide remote access to a system via a local PTY."

"What's a PTY?"

"Warning: This information has been tagged as a memetic hazard, subcategory can of worms. Do you wish to proceed?"

I blinked. That was unexpected. I was almost curious enough to proceed anyway, but these warnings were usually worth taking seriously and they didn't normally get attached to interesting awful information. Besides, this really wasn't that relevant.

"No, that's fine."

I thought for a bit. I was pretty sure why this known bug was still present, but decided to check anyway.

"Ide, why has this bug not been fixed despite being known?"

"Due to the rating of this process as high in all of criticality, stability and fragility, it was flagged as an ultra-low priority fix."

That's what I thought. It works, but trying to fix it is probably more likely to break it, and then the plumbing backs up. Not unlike the problem I'd run into with the ramscoop, but the difference was that one this one was in my remit.

"Is this bug being triggered in the wild?"

"Unknown as to whether the particular sequence of events Hypothesis has found are present in the wild, but logs indicate that the underlying OpenSSH bug is triggered."

"Is it being triggered in the vicinity of the anomalous event?"

"Yes".

OK. So this was definitely a plausible culprit.

"Can we run a simulation of what would happen if this bug was fixed?"

"Warning: At current resource availability, such a simulation would take 0.8 gigaseconds to complete."

"Ugh. Show me the cost curve."

I looked at the cost curve. Right. All those game theory simulations the programmers at arms were running were taking up most of our spare capacity, and I didn't have budget to outbid them on anything except the very tiny subset of capacity I had priority on.

Which wasn't wholly unfair. But I now had evidence that a critical system was misbehaving and might be triggering an anomalous plumbing event, which was serious. Granted it was less important than the fate of humanity, but it might be higher priority. Time to try and free up some budget for simulation.

I sighed, and started putting together a report.

Chapter Text

The report only took about a ksec to compose - it's not like there was a great deal to say. "Look, some legacy code that we should raise the rewrite priority on" is practically routine. I had weak evidence that it was a root cause for a problem, but more importantly it had raised its head and got in the way, and for something with this many red flags on it that was a sign that we should look into replacing it. Step one of that was simulation.

I thought for a bit. Of course, there was no reason we couldn't do step two in parallel, and it would make the eventual simulation much easier and higher impact.

"Ide, can we synthesise a replacement program?"

"We lack a sufficient formal model of Go# to do so formally, but the program interface is sufficiently constrained and the typical program lifetime is short enough that it is likely that an empirical sampling method would suffice to guarantee a replacement within no more than five megaseconds."

"Hmm. Can we speed that up?"

"Given sufficient simulation resources a trial candidate for phased roll-out could be synthesized in approximately 500 kiloseconds."

Ugh, right. Simulation time which we didn't have.

"OK. Start synthesizing a replacement in real time then."

"Scheduling now."

That was probably about as much as I could do with this particular program in isolation for now.

"Is there anything downstream of this?"

"Program influence terminates in physical control of plumbing temperature regulation with no additional software control."

 So, effectively, everything was downstream of this. The problem with working on plumbing is that the main communication channel was the physical environment. It makes for some... interesting interactions.

I checked for Kimiko's availability and got that they were still busy. A quick check of my social modelling software confirmed a hunch: Around 60% chance they were stalling me.

Oh well. That was their prerogative, and I could certainly understand wanting to put off a difficult conversation.

I wasn't exactly sure how they would know that this was going to be a difficult conversation, but other people were weirdly good at spotting that kind of thing.

I decided to to continue working to distract myself.

"Ide, give me another interesting issue in the area."

Chapter Text

I spent another few ksecs triaging random interesting bugs. It wasn't the best use of my time, but it was helping build up a picture of the state space around where the problem was occurring, and even if I didn't find anything directly relevant it was still a useful clean up task.

It wasn't very surprising what a mess this all was given how many different lineages we had systems and parts here for, and how long we'd spent shoring things up and adding fail safes for the fail safes for the fail safes rather than risking changing vital systems, but I hadn't explored the plumbing system this broadly in a while and it was definitely disheartening.

I was staring in dismay at some visual programming language. It didn't render at all well on a HUD, so I had had to find one of the larger pods with a wall-screen to even start to make sense of it.

I was increasingly convinced it hadn't been worth bothering. The program was about a gigabyte in size (I thought most of that was some sort of standard library, but I wasn't entirely certain) and literally all it did was decide whether some valves should be open or closed based on the temperature differential on either side and how that was changing over time.

So, even though I was slightly dreading it, I was very relieved when I got the notification from Kimiko that they were able to talk now if I still wanted to.

The pod I was in was easily big enough for five people, so I invited them to come join me.

They looked... off when they came in. The HUD cues said "hesitant, nervous", which was odd. I was about to ask them what was wrong, but they preempted me.

"So is this the conversation where you tell me you don't want to be friends with a pervert?"

I started. That was not the opening I expected.

"Uh, no? I'm not expecting it to be anyway. I just wanted to ask some questions."

They still seemed wary.

"OK... what sort of questions?"

It took me a moment to even figure out how on the ground they'd even figured out the context for this conversation, but it eventually hit me - if I could do the social graph evolution analysis, so could they, and it would make sense to set up some alerts so it doesn't blindside you...

"I mostly just want to know what's going on with Brian attacking you! Why do you just let it happen? It's obviously off charter! And what on the ground is up with this?!"

I manifested the sex graph into a shared space and flagged down the warning my HUD was giving me about tact. I knew I wasn't being tactful, but I was frustrated and just wanted someone to tell me what was going on.

Anyway. HUD says I've confused rather than offended them.

"You... really don't know what's going on at all?"

"If I did I wouldn't be asking! I don't have this science-fiction ability to read minds that everybody else seems to!"

They sigh.

"I suppose this means you've gone and reported this?"

They wave their hand at the graph.

"No... I probably should have, but it seemed like something I shouldn't touch without understanding, so I thought I'd ask you to explain first."

They huffed a relieved noise.

"OK. Good. Thank you. It wouldn't have done anything terrible, but it's annoying for everyone involved to have to deal with."

They paused for a couple of seconds.

"OK. So, explanations. You understand this is about sex, right?"

"Brian didn't exactly let me miss that fact."

"Right. And that isn't a problem for you?"

I shrugged.

"I'm not completely OK with it, but it's not a big deal. It's like... you having bad taste in music or something. I don't approve of your choices but I also mostly don't actually care. Does that make sense?"

They barked out a laugh.

"That's certainly one way to look at it I guess. I can work with that. So the first thing to understand here is that you're weird."

"Hey!"

I mean it's true, but that was still quite harsh.

They gestured an apology.

"Sorry, what I mean is that you're unusual in both your attitude and the fact that you don't know about this already. I'm not sure how you missed it, frankly."

They called up a bunch more graphs and visualisations. The short version is that most people felt much more strongly about this than I did, and while I wasn't the last person to know about it there probably weren't more than single digits of other people who had also missed it.

I nodded slowly. I could probably guess how I'd missed it - there was almost certainly some context or clue I missed that would have prompted someone to tell me about it before now. Also given my relative lack of socialisation it's likely that Kimiko was the first person from the group I'd properly talked to. I checked HUD and it confirmed - I'd apparently met two of the others in passing but no more than that.

"OK. So if I'd reported it, the social unity people would have just told me they knew already?"

"There are a bunch of procedures they have to go through, and they would have had to make a showing of taking the report seriously, but basically yes. Even without reports the automated systems keep flagging our group up as needing attention, but as long as we don't cross any of the hard thresholds they're not required to take action."

"But... OK, they're not required, but isn't it still their job to do something? Why hasn't anything been done about this? If everyone knows there's a problem surely we have to fix it?"

They sighed.

"And what would you do to fix it?"

"Oh."

There were a couple of natural things to do, but the most obvious and the one that would almost certainly get implemented would be to simply kick them all off the ship at the next appropriate planet.

It wouldn't be a death sentence for them - we'd leave them with plenty of money in the local economy and set them up with a perfectly good local infrastructure. They'd have each other. They'd still be crew... but they would be grounded, probably forever. I can hardly imagine anything worse. It was why I worked so hard to fit in myself.

I swallowed.

"OK. I get why you don't want, but what's stopping them? It's obvious Brian has it in for you, and I can't imagine they're the only one, so why are you still here?"

"Because we're protected by the charter. The same section that guarantees anonymity of sexual acts also guarantees freedom from persecution on the basis of them."

"It sure doesn't look like you're free from being persecuted..."

"And we could make that case. At which point we're officially a minority interest group, and the people who want the charter changed have enough to make the case that our protection should be removed."

"This seems really stupid."

They shrugged.

"Welcome to life as an edge case."

"No, I mean... why didn't they see this coming? It seems... really obvious that this would happen. Why would they design the system like this?"

"Officially, politics. They had enough support to start a normatively-asexual ship when forking, but not enough support to remove the sexual protection clauses from the charter, so that's what they went with."

"OK. And unofficially?"

"Well... some of us think they just wanted to see what would happen."

Chapter Text

"Well... some of us think they just wanted to see what would happen."

I blinked at Kimiko a couple times.

"What."

"Oh come on, didn't you read between the lines in history class? Half the point of culture design when you spawn a new ship is to try weird things and mess with people."

"That... doesn't seem much like what they told us. Isn't it supposed to be all about designing for resilience and the long-term survival of the trade fleet and the human race?"

"Yeah. By messing with people. Societies doesn't last long if they can't take a joke. Well, here we are. We're the joke. Why aren't you laughing?"

"It doesn't seem very funny."

They sighed.

"It's really not. Especially if you're stuck in the middle of it. But I'm serious about the messing with people."

"OK but... why?"

"A whole bunch of reasons, but it mostly boils down to evolution and data gathering. Trying random nonsense and seeing what works. Sometimes unexpected things turn out to be a really good idea and other people copy them, sometimes it all explodes horribly and the ship dumps a whole bunch of really good experimental data about what not to do onto the trade network. Most of them are somewhere in between, like us."

"This still seems horribly irresponsible."

They shrugged elaborately.

"And yet we're the longest lasting civilisation in human history. As much as it hurts to be on the receiving end of this particular iteration, I can't deny it works. In some ways we're even a successful experiment - turns out having a dedicated minority to gently oppress is a great bonding exercise for the rest of the crew, and the systems in place are good enough at stopping things from blowing up. Our drama metrics are really low compared to most ships."

"That's horrible,"

"Believe me, I know. Fortunately it'd be a hard sell for any new ship design - it doesn't have to just work, people have to actually buy into the design, and now that there's data from us it'd be harder to repeat the experiment. But maybe our data will help somebody figure out a less dysfunctional way of doing it. That's how the system works."

I didn't really know what to say to that, so I just floated there for a while with a slightly ill look on my face. Eventually, Kimiko continued speaking.

"So, uh, now that you know, what are you going to do about it?"

That, at least, was obvious.

"Oh, nothing."

"Nothing? Really? You're not going to make a fuss about it?"

"What? No, of course not. That would be stupid. I mean, let me know if I'm wrong and there's something you want me to do about it, but until then I'm going to do the same thing I do with any complex problem that I don't understand properly and the experts are already on top of: leave it alone until I do understand it properly."

They breathed a sigh of relief.

"Good. Thank you. Right answer. And no, there's nothing much you can do about it. Though, uh, I should warn you that you still might not want to be friends with me. It looks like you're in enough social metrics trouble as it is without people calling you a sex fiend."

"Oh, waste that. This whole thing is stupid and even if I'm not going to try and fix it I'm not going to make it worse. Besides, if I get kicked off because people think I'm having sex with you, at least that way I'll be part of a group rather than all on my own surrounded by grounders."

I gave a slightly pained smile to show I was only joking. Mostly.

Apparently I'd said something right anyway. I could feel a tension I hadn't even realised they were holding go out of them.

"That's... nice to hear. Thank you."

They paused, grinned.

"And now of course, we must celebrate our new friendship in the way of my people. Let's bang."

They waggled their eyebrows suggestively.

I gave them an extremely flat look. Even I could spot that one was a joke.

They held the grin for a few seconds before bursting out laughing.

"Sorry, sorry, couldn't help myself. Don't worry, I know better than to actually hit on you. But let me know if you ever want to experiment."

I nodded.

"I doubt I will, but thanks."

I stifled a yawn.

"Sorry, excuse me. It's getting close to my bed time. Is there anything else we need to talk about?"

They shook their head.

"I don't think so. We've got the basic facts of life covered, you're not going to treat me as a social pariah, those were the big things I wanted to check on, so I'm good if you are."

They yawned too.

"To be honest though, I'm wiped. It's a bit off cycle for me, but mind if I join you?"

"Sure, fine by me."

I usually sleep alone. Not for any particularly good reason, it just happens that way. It would be nice to have some company for once.

"Now?"

"Might as well, if we're done."

We stripped off and plugged into the wall. It took a little while to find a comfortable position, but we eventually settled on Kimiko cuddling up to me from behind.

"Sleep well, Arthur"

"You too, Kimiko"

I triggered my sleep mode. Within seconds the world went fuzzy, and shortly after I was fast asleep.