Posted on

Code-hosting shutdowns and the survival of repository history

A dead code-hosting site can leave behind a perfectly usable copy of the software and still lose half the story.

The obvious thing to save is the source tree: the files that compile into the program. But a repository can also contain years of commits, branches, tags, issue reports, wiki pages, release downloads, contributor names, timestamps, and discussions explaining why some ugly-looking line of code exists in the first place. That surrounding history is often what makes an old project understandable.

Google Code is a useful example because its shutdown was unusually well preserved. The hosting service was turned down in early 2016, but Google left behind the Google Code Archive, a read-only collection that reports more than 1.4 million projects, 1.5 million downloads, and 12.6 million issues.

That is the good version of a shutdown.

A repository is a timeline, not a folder

If all you preserve is the latest source snapshot, you can still read the program. What you cannot do is reliably reconstruct how it got there.

A Git, Mercurial, or Subversion repository may reveal when a feature appeared, who changed it, which release branch contained a fix, and whether a suspicious-looking file was temporary or intentional. Tags can connect code to a published release. Commit messages can explain design choices that were never documented anywhere else.

Then there are the things version control does not normally contain. Bug trackers may include reproduction steps and hardware details. Wiki pages may be the only installation manual. Release downloads can contain compiled binaries, sample data, or tools that were never checked into source control.

Google’s archive schema makes the separation unusually explicit: project metadata, wiki listings, issue summaries, commit summaries, downloads, individual issues, and source archives are stored as different objects. That is the preservation lesson. Copying the repository alone does not automatically save everything the hosting platform knew about the project.

Migration needs more than git clone

For Git projects, a mirror clone can preserve branches, tags, and repository objects. It does not preserve GitHub issues, pull requests, project boards, release notes, or externally hosted downloads unless those are exported separately. Other hosting systems have their own combinations of repository data and platform-specific records.

A complete rescue therefore needs an inventory. Save the repository. Export issue trackers and wikis. Download release artifacts. Preserve project descriptions and links. Record the original URL structure when possible so old references can be mapped to the surviving copy.

Even Google Code’s unusually thorough archive has limits. It is read-only, and resurrecting a project elsewhere still requires someone to interpret the preserved pieces and rebuild a working development environment.

When a code host closes, the question is not merely whether the source survived. The better question is how much of the project’s memory survived with it.

Posted on

Web games whose essential server code was never preserved

Most browser games were two pieces of software wearing one name. The client was the Flash, HTML, or Java the browser ran: the menus, the sprites, the load screens. The server was what the client talked to, and it owned the things that mattered: your account, your progress, other players. When a game closed, archives usually captured the client and let the server slip away. Club Penguin is the documented case of that asymmetry.

Disney shut down the original Club Penguin on March 29, 2017 as it moved users toward Club Penguin Island; contemporary coverage made clear that the replacement was a separate product and that old items and memberships would not transfer. The Flash client files survived in many places. Disney did not release the original game-server source code publicly. The parts that made it a game — accounts, igloos, coins, moderated chat — remained software nobody could run. The client was saved. The game was not.

Where a browser game actually lives

A game server does the remembering and the comparing: save files, inventories, coin balances, scores, queues, daily-reset events. It also does the judging. The official outcome of a battle, the rare item a loot roll produced — those are decided server-side, because a server is as much referee as host. The client is the interface plus a set of politely phrased requests.

Club Penguin leaned on this harder than most. The browser loaded a Flash world, but who you were, what you owned, and whether your chat cleared the filter all lived elsewhere — on Disney’s machines.

The client is not the game

Files alone do not bring a browser game back, because the client is built to ask someone something. Flashpoint’s technical documentation explains how its local proxy and web server recreate the URLs and responses that many archived web games expect. That works well for static dependencies. It cannot magically reproduce application logic that originally lived only on a remote multiplayer or account server.

Point a saved Club Penguin client at its old address and you get a login screen going nowhere. The screen survived; what answered it did not.

Rebuilding the missing half

Because the server was never preserved, running the game again meant constructing a replacement. Fan projects worked from the client end: decompile the Flash, learn what the game asks a server to confirm, then write software that gives the right answers.

Fan projects therefore rebuilt the missing half from the client side. The archived Club Penguin Protocol project documents the reverse-engineered packet formats and control flow used between client and server. That kind of work can recreate enough behavior for a private server to function, but it reconstructs the protocol rather than recovering Disney’s original server implementation.

Rebuilt is the honest word for it. Emulation reproduces how the world behaved, not the code that made it behave that way. Where fans had observed the server’s responses, recreation is close; where they had not, it is a guess wearing the game’s costume. The original is gone either way.

The limits of recovery

Reconstruction also cannot bring back what only the original servers held. Every fan server starts players at zero, because accounts, igloos, and friends lived in Disney’s databases and left with them. The world could be rebuilt; the population could not be restored.

Reconstruction has another limit: it recreates behavior that fans observed, not the hidden business rules, databases, moderation systems, or account state that were never exposed by the client. Preserved source code would remove much of that guesswork. Without it, the rebuilt server is an informed approximation.

The same outcome repeats across the web-game era: the client is kept, the server is reconstructed from memory and inference, and the reconstruction ends when the volunteers or the tolerance do. Browser games were services, and a service is the hardest thing to archive. The saved client is a souvenir. The game was the part nobody preserved.