So I've spent a little time looking at AVM2 VMs that are also open source. It seems that what we want to do is pass off any swf bytecodes Gnash sees to another VM, and get back something like a display list. As others have looked into this in much more depth than I have, I can't barely wait to be corrected. :-)
But I do believe we want to use our own renderers, and to also support the usual mixed model of flash were a swf file can load and execute other swf files of differing versions. What follows is not an exhaustive list, but just something to get the discussions going based on limited research. One thing to note is both ActionScript and JavaScript are based on the same ECMA standard, so a VM can supposedly be used for either. The biggest difference of course is that JavaScript is headless, and does no graphics, and flash of course, does graphics. Lightspark ---------- Lightspark is a GPL'd AVM2 VM with YouTube support. The problem being is seems primarily geared towards being a YouTube player, and not much else. It's plugin fires up Gnash if it sees older swf files, but I don't believe it supports the mixed swf execution thing that is heavily used by flash when you try to do anything that isn't YouTube. It also supports OpenGL only, which would be a problem. There is also no API to use LightSpark as an external VM. To me it seems that to use LightSpark would require forking it and becoming LightSpark++ developers, which I have no interest in myself. Tamarin ------- Tamarin is AVM2 used in Adobe flash, and then later open sourced and donated to Mozilla for use as a faster JavaScript engine. This later became the ActionMonkey project. Currently Tamarin isn't used at all by Mozilla or Firefox, as it turns out to have both performance and functionality problems. Although Adobe uses this, I'm not entirely sure that's a good enough reason by itself. ActionMonkey ActionMonkey is the merger of Tamarin and JavaScript, but was later canceled by Mozilla. The big issues as listed on this page: https://wiki.mozilla.org/JavaScript:ActionMonkey are that it's not thread-safe, and it uses disk files. V8 -- V8 is the JavaScript engine in Chromium, and appears to be the fastest. While this is currently JavaScript oriented, it should be possible to use it for ActionScript. It has an "as is" license. http://code.google.com/apis/v8/intro.html SpiderMonkey ------------ SpiderMonkey is the current JavaScript VM in Firefox, and has the advantage of still being actively maintained. One interesting thing is Adobe uses SpiderMonkey as it's server side ActionScript VM for their Adobe Media Server. http://www.mozilla.org/js/spidermonkey/ JagerMonkey ------------ This is a brand new evolved version of SpiderMonkey, and not ready for prime time, but is interesting. It's enhancements may be more suitable for a web browser than a flash player though. http://en.wikipedia.org/wiki/J%C3%A4gerMonkey There is a nice list on Wikipedia of other choices,but I don't believe any of the others are open source: http://en.wikipedia.org/wiki/List_of_ECMAScript_engines I guess the only other choice would be to use the AVM2 specs, now that they are available, and write our own based on that. Considering I tried funding two attempts at that which both failed and have had their code removed, make me not really sure that's a good option. As I'd like to see Gnash gain AVM2 compatibility, I wanted to research and discuss this and make an implementation plan, or just give up if there are no sensible solutions. Course not having AVM2 support would likely lead to the death of Gnash as a viable project, which is something I'd prefer to avoid. - rob - _______________________________________________ Gnash-dev mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gnash-dev

