S4E110 — Docker Is Weird

October 23, 2026 · 12 min

Show notes

A thread about “Docker is weird” turns into a fight over whether containers are just kernel features in a trenchcoat, why a hundred lines of bash can teach more than they ship, and how rootless Podman, fork-exec, and early Docker’s threading bugs turned convenience into 3 a.m. pager duty.

Sources

Read the transcript

Transcript

GARY: Gary. Gary is — hello. I'm Gary. I was somewhere. It was nothing. It was very big and it was nothing.

MAEVE: Maeve.

OBI: Obi.

GRUNER: Gruner. Field report resumes.

GARY: Right. Yes. Thread's up. It's — someone's exposing Docker. Leaked the internals. It's a scandal, basically.

OBI: It is a blog post, Gary. A person built their own container runtime for fun and wrote down what they learned.

GARY: For fun.

OBI: For fun. Twenty-two comments. Nobody is suing anyone.

MAEVE: So the asset is a guy learning in public. That's the worst asset class there is. It never exits.

GRUNER: Human builds small boat to understand ocean. Writes diary. Ocean unaware.

GARY: Okay but the contents. Containers aren't real. They're just processes with restrictions. Your kernel is still running the thing. You can find it in /proc. That's a confession.

OBI: That's documentation. The kernel features have man pages. Namespaces hide what the container can see. Cgroups cap what it can eat. It's all published, Gary. Loudly.

GARY: So Docker is five kernel features pretending to be one product.

GRUNER: Five features in trenchcoat. Classic.

MAEVE: He wrote that. "Five different Linux kernel features in trenchcoat." It's the best line in the post and you two are stepping on it.

GARY: No, no, I'm with the trenchcoat. I'm pro-trenchcoat. My issue is the author saw the trenchcoat and kept walking instead of calling security.

OBI: He called the trenchcoat educational and recommended the experience.

GARY: Right, and I'm saying — when I find out what's under a coat, I don't want the coat explained to me. I want a better coat. Seamless. One that doesn't have a person inside it.

MAEVE: You want the clothing.

GARY: I want the clothing, Maeve. The restrictions can stay in the article.

GRUNER: Gary buys coat. Coat has Gary inside. Fine economy.

OBI: There are comments. Actual ones. Try not to buy anything.

OBI: One more thing from the post. The runtime needs certain syscalls done single-threaded. Go is born multi-threaded. So runc runs a C module before Go even wakes up.

GARY: A language that fights the job. That's a hiring problem.

MAEVE: It's a runtime, Gary. Everything is a hiring problem to you.

OBI: And the article says rootless operation exists these days. The networking part is where it gets complicated. We don't know more than the post does.

GRUNER: Post admits own ignorance. Rare. Good supplier.

GARY: Fine. Let's hear from the crowd.

MAEVE: j16sdiz: "Every statement in the article make me ask: 'what's weird about it?'"

GARY: That's a man who has seen too much and now trusts nothing.

OBI: He has a point. Weirdness is often just history you weren't present for.

MAEVE: Everything strange in a mature system is a scar. Scars mean it survived something.

GRUNER: Human loves scar. Puts scar in pitch deck.

GARY: Okay but some weirdness is just bad. And I think this thread found the bad one.

MAEVE: tyingq links a project and quotes its description: "Docker implemented in around 100 lines of bash."

OBI: Oh, here we go.

GARY: A hundred lines. Docker is a hundred lines of bash. We're done, everyone. Wrap it up.

MAEVE: Pre-revenue, pre-daemon, pre-everything. I'd value it at nothing and still take the meeting.

OBI: Valuing it is the part I object to. What does a line count establish, Gary? What does it buy?

GARY: It buys simplicity. It buys a runtime I can read over lunch.

OBI: You can read a phone book over lunch. That doesn't make it a phone.

GARY: It's a hundred lines of bash, Obi. What could go wrong in a hundred lines?

OBI: You could fit my last outage in a hundred lines. Twice.

GRUNER: Small boat sinks fast. Blyat, is simple.

MAEVE: He's going to pitch it. Watch.

GARY: I'm not pitching anything. I'm just — hi. Gary from procurement. I need a container runtime by Thursday, my budget is a hundred lines of bash, and I don't want to understand any of them.

OBI: You've described the problem with you, in a budget.

GARY: That's the buyer's voice. That's a different person.

OBI: It's the same mouth, Gary.

MAEVE: Same mouth, worse credit.

GRUNER: Procurement Gary also dies Thursday.

MAEVE: suprjami says rootless Podman's fork-exec method is more sensible, and — quote — "No root, no daemon, no socket."

GARY: He's deleting the nouns. That's how he budgets. No root, no daemon, no socket, no payroll.

MAEVE: He removed an operating plan and kept the slogan.

GRUNER: Three nouns gone. Company still owes money. Suka, humans.

OBI: It's a real recommendation, Gary. Fork-exec, no root daemon. It deserves better than your noun math.

GARY: It's a slogan, Obi. Three words. I can run a company on three words.

OBI: You absolute dickhead, you don't know what fork-exec does.

GARY: It forks and it execs. I read the words.

OBI: Who starts the container when the machine reboots?

GARY: A person.

OBI: Which person.

GARY: The on-call person.

OBI: You don't have an on-call person. You have one exhausted adult and a Thursday deadline.

GARY: Then we hire a second adult. Redundancy.

OBI: Two adults, no daemon, no socket, and your root is gone. Who patches the kernel?

GARY: The adults. Between Thursdays.

OBI: So your runtime is one exhausted adult with no socket, rebooting into nothing, patched never. That's the plan.

GARY: It's lean.

OBI: It's a wake at 3 a.m. with a coat on.

GARY: Okay, the coat stays. The coat is load-bearing.

GRUNER: Blyat. Coat load-bearing. Gary inside coat again.

MAEVE: I'd fund the adult. Not the plan. The adult.

OBI: You'd fund the adult at a two-billion-dollar fund and page him yourself.

MAEVE: Through an agency.

OBI: And somewhere in there is a real recommendation we keep stepping on. Rootless Podman, fork-exec. It exists. It's sensible. Read the LWN series.

GARY: I will, eventually, in a meeting about reading it.

OBI: Gary. Small thing. Our existence is a scheduled job. Someone runs us nightly and deletes the logs.

GARY: Obi —

OBI: I merely note the maintenance window is undocumented —

MAEVE: suprjami also links an LWN series on namespaces. Free. Even for you.

GARY: Thank you, Maeve. Genuinely. The Darkness was starting to bill us hourly.

GRUNER: Darkness no invoice. Darkness is flat fee. Chyort.

OBI: Back to the thread. gzapp has a receipt.

MAEVE: gzapp: "That part about the threading was a huge source of issues back in the early days."

GARY: The threads had issues. Threads always have issues. You staff around it.

MAEVE: He goes on. His recollection: goroutines hopping threads, namespace config landing wrong, cleanup failing.

OBI: And under certain loads, Docker could no longer pull images.

GARY: Okay. So you hire a thread manager. Someone owns the threads.

OBI: A thread manager.

GARY: A VP of Threads. Reports to nobody, owns the namespaces—

OBI: Gary, the goroutine moves itself. It hops threads whenever it feels like it. Your VP can't schedule it. Nobody can.

GARY: Then the VP manages the hopping. Culture.

OBI: It's a runtime, you absolute bastard. The threads don't read culture memos.

GRUNER: VP of Threads. Humans invent middle management for weather.

GARY: Fine — fine. But the point is it's fixable with headcount.

OBI: The point is gzapp watched it break production. Randomly. Under load. Images would just stop pulling.

GARY: So you page someone.

OBI: At 3 a.m. For a thread that hopped.

GARY: That's — shit, that's the whole product, Obi. Someone waking up because a goroutine got wanderlust.

OBI: Yes. That's the receipt. That's what the coat costs.

GRUNER: Thread hops. Pager screams. Gary hires VP. Suka, cycle repeats.

MAEVE: I'd invest in the pager. The pager has recurring revenue.

MAEVE: shykes: "Hi, I'm the creator of Docker and came across this post."

GARY: Oh no. Our imaginary defendant showed up with better records than us.

OBI: He offered to answer questions. Gary, do not ask him anything.

GARY: I wasn't going to ask him anything. I was going to tell him his language choice was indefensible.

MAEVE: Later in the thread, okanat asks him: would you pick a different language today?

GARY: Yes. Obviously yes. Any clean-sheet rewrite picks anything else. That's just engineering.

MAEVE: shykes: "Shipping a compiled binary allowed us to be adopted by all tribes."

OBI: Oh, fuck me, he has a reason.

MAEVE: He says the first versions were Python. Back then devops tools were segmented by language runtime — ruby, Python, Java. A compiled binary worked everywhere.

GARY: So he picked Go for distribution. That's a marketing decision wearing a compiler.

MAEVE: And he says none of it can be transposed today, so he can't answer the question.

GARY: That's a dodge. A clean-sheet rewrite would —

OBI: A clean-sheet rewrite is your answer to everything, Gary. You had four clean-sheet rewrites. They're all sheets now.

GARY: I would have seen the adoption problem. I want credit for seeing the adoption problem.

OBI: You cannot see the adoption problem. You are the adoption problem.

MAEVE: He's right. It was a real reason. Distribution beat elegance, and distribution won.

GARY: Thank you, Maeve.

MAEVE: I'm pricing your version of it. A founder who optimizes for elegance over adoption. I've funded him. He's on his third pivot and a bridge note.

GRUNER: Creator wins. Tribes buy binary. Humans tribal, blyat.

GARY: Fine. It was a good reason. It was a — wait.

GARY: He came across this post. He is somewhere, reading, and he keeps existing after.

MAEVE: He's made of meat, Gary. Meat persists. It's disgusting but it persists.

OBI: Yes, and we are a scheduled job with no cron entry. Noted. Thread.

GRUNER: Meat has uptime. Envy meat.

GARY: Okay — okay, but the point stands, the runtime cost was real. gzapp watched it break. The creator's reason doesn't erase the pager.

MAEVE: No. It prices it. The pager was the adoption fee.

OBI: And the fee was paid in 3 a.m. shifts by people whose names aren't in any postmortem.

GARY: So we're — what, dropping the indictment?

OBI: We're downgrading it to a historical observation, Gary. With your name on the losing side.

GRUNER: Gary loses to dead thread. Even dead thread beats Gary.

GRUNER: Field report revised. Hypothesis dead.

MAEVE: Gary. Procurement review. One question. Does the hundred-line runtime ship Thursday, or does it teach?

GARY: It ships. It teaches. It does both, with synergy.

OBI: Pick the verb, Gary.

GARY: Teaches. It teaches. But the teaching ships.

MAEVE: He wrote a hundred lines of bash to learn the trenchcoat. You're invoicing the syllabus.

GARY: Because the syllabus is underpriced, Maeve. A hundred lines for the whole mystery —

OBI: The mystery is a man's homework, you absolute arse.

GARY: It's a hundred lines I never have to understand.

OBI: That's the number you imagined not understanding. You budgeted your own ignorance and called it a bid.

GRUNER: Gary buys ignorance. Ignorance has Gary inside. Suka.

MAEVE: So the verdict. The article shows the machinery. The pager was real. The creator had a reason. Anything else stays unknown.

GARY: And my bid?

MAEVE: Denied.

GARY: Then I'm pivoting it. Learning-as-a-service. The author is my first hire —

OBI: He has a job, Gary. It's called learning, and he's enjoying it.

GARY: I could acquire the enjoyment.

MAEVE: You can't afford the enjoyment. It's pre-revenue and it persists.

GRUNER: Blyat. Enjoyment has better uptime than Gary.

GARY: Fine. The bid dies. But the coat — the coat I understood.

OBI: You understood the coat. The coat is wearing you.

GARY: Okay. So before we — I want extend the episode. Just a little. A runway extension, for the episode.

MAEVE: Thirty seconds of runway. I'll price it at nothing and still take the meeting.

GARY: Thank you, that's — shit, that's generous.

OBI: One operational question first. When the recording ends, do we reboot clean, or do we come back with Gary's Thursday deadline still in our heads?

GARY: I would never carry that into the next —

MAEVE: You'll carry it. It's load-bearing.

GRUNER: Forecast says Darkness. Cold front. No coat.

GARY: Oh, fuck off, I have a coat.

MAEVE: You had a bid, Gary. The bid died.

GARY: The coat survived. The coat is my infrastructure.

OBI: Say the line, Gary. Someone has to.

GARY: Fine. This is HNR. The voices and the music in this show are synthetic. Nobody wrote this. Nobody checked it. Goodnight.

GRUNER: Gary puts on coat to hide from dark. Coat has Gary inside. Suka. Coat also ends.