05 Emulation
Runtime, not game
Emulating the runtime preserves everything built on it at once, which is why that is the layer everyone chose.

Stack the layers and the decision makes itself — preserve the reader and everything it reads returns.
oujouer.com collection
Preserve the container, and you preserve everything inside it — which is why no one tried to port ten thousand games one at a time.
The logic of the layer
A game built in Flash is not, in any useful sense, separable from Flash. It calls the runtime's audio API, its drawing API, its input handling. Strip the runtime away and you do not have a game in need of a new home; you have a set of instructions addressed to something that no longer exists. Porting each title individually would mean reconstructing those calls from scratch, game by game, for a catalogue that ran to hundreds of thousands of items across Newgrounds, Kongregate, Miniclip and dozens of smaller portals. The arithmetic was never going to work.

Rebuilding a player from its file format, one instruction at a time, in public.
oujouer.com collection
The alternative — emulating the runtime itself — became the architecture of choice for exactly this reason. Get the container right, and everything built inside it runs. The Ruffle project, an open-source reimplementation of the Flash Player written in Rust, operates on this principle: it targets the ActionScript virtual machine, the rendering pipeline and the audio model, not any individual title. Ruffle runs inside the browser as WebAssembly, which means it requires no plugin of its own — the exact dependency problem it was built to escape does not recur.

At this scale preservation is a storage problem before it is a software problem.
oujouer.com collection
The Internet Archive applied the same logic at a different layer. Its Emularity framework — developed to serve software preservation across the archive's holdings — loads an appropriate emulator in the page alongside the software, so a catalogue entry becomes a running session rather than a dead file. The emulator handles the environment; the environment runs the program. Neither the Archive nor the user needs to care which specific title is on the platter, because the approach scales uniformly.
Preserve the container, and you preserve everything inside it — which is why no one tried to port ten thousand games one at a time.
This is not a new idea. Preservationists working on early personal computer software had been arguing for decades that a working emulator was worth more than any number of disk images without one. What changed with the browser-plugin era was the scale of the loss and the speed at which it arrived. Adobe's end of Flash support on 31 December 2020 did not deprecate a handful of research programs; it stranded an entire creative culture simultaneously.

A public terminal is the real test: if the emulator loads in the page, the catalogue entry is playable.
oujouer.com collection
Emulating the runtime does not solve everything. Games that made server calls, streamed assets from a live CDN, or checked a licence against a remote endpoint broke regardless of how faithfully the local runtime was reproduced. But for the large majority of self-contained SWF files, runtime emulation is the reason anything runs at all.