Adobe, Mozilla, and Tamarin

By now the press release has gone out announcing Adobe's contribution to the Mozilla project of open source code for their ActionScript Virtual Machine (AVM2), and Brendan has blogged about it. I'm not directly involved with the project itself but have spent a few days reviewing press materials and doing press interviews, so I've had a chance to think about the significance of this announcement and what it means for the Mozilla project and for the web at large. Here are some of my thoughts.

The basics

First, a brief review of what this announcement is about (and what it's not about). (I apologize for repeating material from the press release and elsewhere; I've found in the past that one can't always assume that people have actually read such material.)

Adobe's Flash player executes applications written in ActionScript, a programming language that (in its current version, ActionScript 3.0) is based on the ECMAScript language specification and is therefore a sibling to JavaScript. As part of Flash Player 9 Adobe introduced a new virtual machine (AVM2) for executing ActionScript applications; among other things, AVM2 features a Just In Time (JIT) compiler that can convert ActionScript bytecode (the form into which ActionScript is initially compiled) into native machine instructions for much faster execution of ActionScript 3.0 applications.

Adobe has now taken the code for that AVM2 virtual machine implementation and released it as open source through the Mozilla project as Tamarin. Adobe will continue to develop the Tamarin code, working with other developers from the Mozilla community, and will be using it as the basis of the ActionScript virtual machine in future versions of their own products. The Mozilla project will use Tamarin as part of future versions of SpiderMonkey, the C-based JavaScript engine used in Firefox and other applications, and will include it in future versions of Firefox (beyond Firefox 3) that are built using Mozilla 2 technology.

(The name Tamarin continues the Mozilla tradition of monkey-themed projects, including of course SpiderMonkey itself; like SpiderMonkey , Tamarin is a code name, not a trademark. As noted on the Tamarin project page, we thank Ben Parker for his generosity in allowing us to reuse the name of his existing Tamarin framework for development of Java Swing applications.)

Note that Tamarin is not an open source version of the Flash player; it is simply the virtual machine embedded within Flash Player 9, and does not include all the other components that make up Flash (including the bits that display graphics and play music and video). Adobe will continue to develop and distribute the Flash player on its own as a product separate from Firefox itself.

What it all means

What does this all mean? Let's start with users of Firefox and other applications based on Mozilla technology. They'll get future versions of Firefox and other Mozilla-based products that will run JavaScript-based applications significantly faster, including in particular AJAX-enabled web applications commonly thought of in connection with the Web 2.0 meme. (In its own testing Adobe has seen up to a ten times speedup of ActionScript applications due to the introduction of the AVM2 technology.) Since Firefox and Firefox extensions are partly written in JavaScript (as are other applications built on Mozilla's XUL technology), users will also likely see performance gains in some areas of Firefox itself.

Developers of web applications and XUL-based applications will also realize the benefits of improved performance; they'll be able to develop and deploy new and innovative applications for which the performance demands on current JavaScript engines are just too great. They'll also be able to take advantage of new JavaScript language features coming with ECMAScript 4th Edition, and in addition will be more able to leverage their knowledge of JavaScript in developing Flash applications using ActionScript (or vice versa).

Finally, the Mozilla project will gain yet another major corporate contributor in Adobe, one that's made the largest single code contribution to the project since Netscape originally released the Mozilla source code in 1998. Not only do we gain an important new piece of technology that's critical to our products, we and Adobe both gain the benefit of being able to more closely work together on ECMAScript language technology and avoid unnecessary duplication of efforts; this in turn will allow both the Mozilla project and Adobe to put more resources into other areas important for future innovations.

For Adobe, Mozilla, and others who might join in future, the Tamarin project represents for client-side web technology what the so-called LAMP stack does for server-side web technology: a move to not only centralize development around key specifications (ECMAScript for Tamarin, HTTP, SQL, etc., for the LAMP stack) but also to jointly develop and promote high-quality open source implementations of those specifications. Cooperating on such efforts helps grow the larger commercial and noncommercial ecosystems around the relevant technologies, to the ultimate benefit of all users of the web.

In praise of sustaining innovations

Some might read the above and say, So Tamarin will enable web applications to run faster, maybe even an order of magnitude faster, and make JavaScript and ActionScript more compatible; what's the big deal? We're conditioned to look for world changing , break the mold developments in technology and to dismiss merely incremental improvements. To use the terms popularized by Clayton Christensen, we think disruptive innovations are sexy, and sustaining innovations are not.

I believe this is a serious mistake. First, the terms disruptive and sustaining aren't indicators of the technical merit of innovations; they simply indicate whether the degree to which innovations better satisfy the needs of existing customers (sustaining innovations) vs. appealing to new customers (disruptive innovations). In this sense even something as wonderful as Firefox is better viewed as a sustaining innovation than a disruptive innovation, as I've previously discussed.

Second, the cumulative impact of multiple sustaining innovations can be quite large, and can enable new disruptive innovations to take root and flourish. For example, as many people have pointed out, at least in theory Web 2.0-style applications could have been developed many years before they in fact appeared. The advent of Web 2.0 as we know it was really a function of multiple sustaining innovations that accumulated over time and interacted together:

incremental browser features like XMLHttpRequest that enabled basic AJAX techniques to be developed

continuous improvements in the performance, stability, and standards compliance of web browsers, which enabled cross-platform dynamic web applications to be more easily developed and debugged

continuous improvements in the cost and performance of server-side hardware and software, which enabled organizations to deploy significant web applications without multi-million dollar investments

continuous improvements in the ability of organizations to economically manage large numbers of servers, which enabled Google and others to deploy dynamic web applications reaching hundreds of millions of users

continuous improvements in the cost, performance, and ubiquity of broadband connections, which enabled more people to run dynamic web applications and actually enjoy the experience

Within each of these areas the individual innovations were relatively small: a minor cost or performance improvement made, a few more browser bugs fixed or new browser features added, a few million more broadband connections provisioned. But in toto these innovations added up to nothing less than a revolution in the way the web can be used.

In this sense everyone who contributes to the Mozilla project–fixing a Mozilla bug, making a performance improvement in Mozilla code (no matter how small), enabling Mozilla-based products to pass yet another standards compliance test, writing a Mozilla test case, creating or revising a Mozilla documentation page, and so on–helps change the future of the web and advance our goal of promoting choice and innovation on the Internet, to the ultimate benefit of everyone. Adobe is the latest such contributor, and most definitely a significant one; we thank them for their contribution and welcome them to the Mozilla project. Please join me in doing likewise!