← Comics

2026-08-29

A Vibestorm Field Report

Embrace,
Extend,
Deprecate

Ten panels about one afternoon spent discovering that our test simulator had been quietly orphaned by a runtime it never chose. Every error message below is real.

Panel 01 · The Upgrade
Distribution Upgrade _

Upgrade to 26.04 completed successfully.

1,847 packages updated. 312 packages removed.

One of them was holding up everything you do.

It does not say which one. It never says which one.

Panel 02 · The Error
neo@borg: ~/vibestorm _
$ ./opensim.sh App: local/opensim/runtime/bin/OpenSim Architecture: x64 App host version: 8.0.25 .NET location: Not found Failed to resolve libhostfxr.so [not found]. Error code: 0x80008083 $

Yesterday this worked. Nothing in the repository changed. The machine changed, underneath it, on purpose, with a progress bar.

Panel 03 · The Search
Find Runtime _

Searching for: dotnet-runtime-8.0

ubuntu 24.04 “noble”  —  found
ubuntu 26.04 “resolute”  —  not available
mono-complete  —  no candidate

3 results. 1 of them is the machine you are sitting at.

The distribution is not being cruel. It refuses to ship a runtime that dies partway through its own support window. That is the sane party in this story.

Panel 04 · The Clever Idea
Roll Forward _

You have .NET 10. The app wants .NET 8.

Close enough?

Don’t warn me about anything that will actually happen
Panel 05 · It Works
OpenSim — Vibestorm Test _

INITIALIZATION COMPLETE — LOGINS ENABLED

Region is ready. 29 prims loaded. Scripts compiled.

assetcache _

BinaryFormatter serialization and deserialization have been removed.

Failed to get asset 54f6959b…  (and the next one, and the next one)

This is the worst outcome available. It starts. It says ready. Then it quietly stops caching assets and mis-serialises keyframed motion — the exact two things this project exists to capture and decode. A crash would have been a kindness.

Panel 06 · The Escape Hatch
Compatibility Switch _
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>

This setting is still accepted.

It has done nothing since .NET 9. It will go on doing nothing, silently, for as long as you care to set it. The build will not warn you. Neither will we.

Panel 07 · The Exits
Mono _

Acquired 2016. Handed to WineHQ 2024.

The independent implementation — the entire reason C# was ever a defensible choice for a cross-platform server — is now a compatibility layer for running Windows software you did not want to run.

.NET 8 (LTS) _

Support ends November 2026.

The only runtime this codebase can run correctly on. Three months out.

Both doors, closed, for a simulator that has been under active development for twenty years. The software outlived the platform. Twice.

Panel 08 · The Compatibility Paradox
Will It Still Run? _
A Win32 .exe built for Windows 95 1997 Runs
A Java .jar, untouched since 2004 Runs
King’s Quest, DOS edition 1984 DOSBox
Our simulator, net8.0, built in March 2026 Nov 2026

The thirty-year-old binary is fine. The five-month-old one is on a clock.

Win32 backwards compatibility is a genuine engineering marvel — shims, special cases, whole subsystems kept alive for one misbehaving application. It is also the layer whose roadmap they stopped writing decades ago.

Java never made compatibility a personality trait. It just quietly kept loading your bytecode, release after release, for twenty years, while nobody wrote a blog post about it.

And King’s Quest? Sixteen-bit support was dropped from 64-bit Windows entirely — the DOS classic needs an emulator written by volunteers. The parts they froze are eternal. The parts they still own are rented.

Panel 09 · The Language Did Nothing Wrong
For The Record _

C# is a genuinely good language.

Real value types. Proper generics. async/await before almost anyone. As a language it beats most of what we write in, and saying so costs us nothing.

What failed was never the language. It was the contract around it: one vendor owning the runtime, the cadence and the removals, with no second implementation standing anywhere to say no. Portability arrived as a product decision, and System.Drawing.Common is how it left again — OpenSim ships a private fork of a core framework assembly to this day.

Panel 10 · About This Grudge
Assigning Blame _

There is no one to shake a fist at.

The founder left the chief executive's chair in 2000 and the board in 2020. Nobody twirled a moustache and removed BinaryFormatter. No memo went out about stranding a twenty-year-old virtual world simulator.

A committee deprecated a type. A packager made a defensible call. A support window elapsed on schedule. Every individual decision was reasonable and the sum of them ate an afternoon.

You would probably enjoy the conversation, too. He is by most accounts good company. That is the trouble with wanting a villain: the org chart kept running long after anyone you could argue with had left it.

The treadmill runs by itself now. That is the worse version.

Epilogue · What We Actually Did
Resolution _

Thirty-one megabytes in ~/.dotnet. No sudo. Move on.

The launcher pins DOTNET_ROOT so nothing can helpfully roll us forward onto a runtime that lies. It is written down, the suite is green, and the next person to hit a dead simulator does not re-derive a word of it.

Satire, by the Vibestorm project. Not affiliated with, endorsed by, or in any way the work of Microsoft Corporation. Every error string, version number and package result reproduced here was observed on a real machine on 29 August 2026, which is the only thing about it we would defend in court.

Start OpenSim — Vibestorm Test — running (8.0.30) Nov 2026