Flash Game CodesThe format · the portals · the work · the archive

The format and the machine

Adobe Open-Sourced the Virtual Machine and Mozilla Tried to Ship It in Firefox

In 2006 Adobe handed Mozilla the engine that ran ActionScript 3 — and Firefox never shipped it.

Short referenceThe Format · section 01

A man views lines of code on two computer monitors in a dim office

The Donation and the Dream

When Adobe released Flash Player 9 in June 2006, it introduced AVM2, the ActionScript Virtual Machine 2 built to execute compiled ActionScript 3 bytecode. AVM2 was a genuine engineering step forward: strongly typed, JIT-compiled, meaningfully faster than the interpreter it replaced. Within months of that release, Adobe donated the AVM2 source code to Mozilla under the name Tamarin, releasing it as open-source under a tri-license covering the Mozilla Public License, the GNU General Public License, and the GNU Lesser General Public License.

HTML code with table, form, and input tags displayed in colored syntax highlighting

The collaboration made a certain kind of sense. Mozilla was already maintaining SpiderMonkey, the JavaScript engine inside Firefox, and JavaScript and ActionScript share ECMAScript ancestry. The working theory was that Tamarin's JIT compiler — called nanojit — could accelerate JavaScript execution inside Firefox, closing the performance gap that was beginning to embarrass the browser on compute-heavy web pages. Adobe got the credibility of an open-source contribution; Mozilla got a battle-tested compiled runtime it had not had to build itself.

Split-screen code editor showing HTML counter divs on the left and CSS media query styles on the right

Why It Never Shipped

The integration effort ran from late 2006 into 2008 and ultimately stalled. Tamarin had been designed specifically around ActionScript 3's semantics, and splicing it into SpiderMonkey proved architecturally awkward. The two engines had different garbage collectors, different object models, and different assumptions about how a script's runtime environment should be structured. Merging them without breaking Firefox's existing behaviour was a harder problem than the initial proposal had acknowledged.

What ended the experiment was not the difficulty alone but a change in competitive pressure. Google launched the V8 JavaScript engine in September 2008 alongside Chrome, and V8's performance numbers reset everyone's expectations. Mozilla responded by developing TraceMonkey, its own tracing JIT, rather than continuing to fight Tamarin's integration problems. Nanojit was extracted from Tamarin and used briefly in TraceMonkey's early development — so a component of Adobe's donation did reach Firefox, just not the virtual machine whole.

Chronology

  1. June 2006Flash Player 9 ships with AVM2
  2. Late 2006Adobe donates AVM2 source to Mozilla; Tamarin project begins
  3. September 2008Google ships Chrome with the V8 JavaScript engine, resetting browser performance benchmarks
  4. 2008Mozilla pivots to TraceMonkey; Tamarin integration abandoned; nanojit briefly reused
  5. 25 July 2017Adobe announces Flash end-of-life; Tamarin's last active host enters countdown

Tamarin itself continued as a project inside Adobe, powering the ActionScript runtime in Flash Player and later Adobe AIR, until both products wound down after the end-of-life announcement in 2017.

Where this sits

FutureSplash to Adobe Animate: the software, the file format, and the virtual machine that ran inside a billion browsers.

What the Episode Reveals

The Tamarin collaboration is a small, clear window into browser politics around 2006–2008: a period when the browser was understood to be on the verge of becoming a serious application platform, and when every major stakeholder was deciding whether to cooperate or compete on the runtime layer. Adobe cooperated, briefly and sincerely, and the cooperation produced nanojit and very little else. The race to own fast JavaScript execution was already underway, and it was won by a different engine entirely.