← Back to blog

Moongate: Preserving Ultima Online in .NET 10

gamingopen-sourcedotnetpreservation

Ultima Online came out in 1997. I was three years old. The game has been running continuously for 29 years, which makes it older than most of the engineers I work with.

Today, Moongate is trending. It's a server emulator for UO, rebuilt from scratch in .NET 10. And I think it represents something beautiful about the open source community that doesn't get enough attention.

Why this matters beyond nostalgia

Game preservation has a corporate problem. When EA or Blizzard decides a game isn't profitable enough to keep servers running, they kill it. Your hundreds of hours, your guild, your memories, gone. They flip a switch and the world stops existing.

Server emulators are the insurance policy. RunUO existed for years as the go-to UO emulator, but it was built on ancient .NET Framework code. Moongate rewrites the whole thing for modern .NET 10, which means it'll actually run well on current hardware, ARM servers, Linux boxes, even a Raspberry Pi if you're feeling ambitious.

The UO community has kept their game alive for almost three decades through projects like this. No corporate backing. No funding rounds. Just people who love a game enough to reverse-engineer its network protocol and rebuild the server from scratch.

The technical beauty of emulator projects

What I respect about Moongate is the engineering discipline involved. You're not building a game. You're building a perfect replica of someone else's game, bugs and all. You need to understand the original server's packet format, movement validation, combat formulas, spawn tables, and hundreds of other systems that were never publicly documented.

The Moongate team is essentially doing clean-room reverse engineering of a commercial MMO server. They're reading client packets, figuring out what the server should respond with, and replicating that behavior exactly. This is the same discipline that built compatible BIOS chips in the 80s and open-source printer drivers in the 2000s.

Choosing .NET 10 was smart. The performance characteristics of modern .NET are genuinely impressive. Span-based memory handling, native AOT compilation, and the networking stack improvements mean a UO server emulator can probably handle thousands of concurrent players on a $20/month VPS.

A pattern worth watching

Moongate isn't an isolated case. The game preservation community is going through a modernization wave right now:

Private WoW servers have been rebuilding on modern C++20 for the last two years. FFXI emulators are rewriting Lua scripting layers. Even MUD codebases from the early 90s are getting Rust rewrites.

The pattern is always the same. Passionate community keeps ancient code alive for years. Eventually someone says "what if we rebuilt this properly" and ports the whole thing to a modern stack. The game gets faster, more stable, and easier to run.

What the game industry should learn

Every live-service game launched today will eventually be unprofitable. Every single one. The question isn't if the servers will shut down, it's when.

Companies that open-source their server code (or at least don't sue emulator projects into oblivion) are giving their games a shot at immortality. Ultima Online is still playable in 2026 because EA hasn't aggressively pursued emulator shutdowns. That tolerance, whether intentional or not, is the reason we're talking about Moongate today.

I'd argue there's even a business case here. Every active UO emulator community is a pool of people who might buy the official game's cosmetics, expansions, or remastered editions. Preservation isn't competition. It's a fanbase keeping your IP relevant for free.

Some games deserve to outlive their servers. The people building Moongate understand that. I wish more companies did too.