Gnash 0.8.8 Released!

The release of Gnash 0.8.8 brings various improvements to rendering, ActionScript execution, compatibility, and flexibility.

But the most significant change is more of a removal than an addition: Gnash no longer has any AVM2 code. AVM2, the ActionScript Virtual Machine introduced in the Flash player 9, is increasingly used in new Flash movies.

It was becoming clear that the original implementation (started in about 2006) of the newer ActionScript Virtual Machine was fundamentally flawed. So fundamentally that it was obstructing code for the old virtual machine without any benefit to Gnash at all.

Removing the code had various advantages:

  • Gnash's AVM1 code is far cleaner and easier to work with.
  • The executable size is smaller and compile time reduced by half.
  • It avoids crashes when attempting to execute AVM2 code.

There are no immediate disadvantages because the AVM2 code was not functional. We don't know if Gnash will ever have an AVM2 implementation, but writing it from scratch will be quicker than continuing to struggle with the old code.

For the present, the only free AVM2 player is Lightspark. This leaves us with two separate players: one that plays only AVM2, and one that plays only AVM1. Lightspark's author, Alessandro Pignotti, has implemented a 'fallback' to Gnash when it encounters AVM1 movies. There are rough plans to do the reverse in Gnash.

The other things I've personally worked on since the last release include LocalConnection, media handlers, some drawing API improvements, and the usual numerous, minor, but important compatibility fixes.

The ActionScript LocalConnection class is newly and fully implemented on POSIX systems. This is a form of inter-process communication for the Flash player, and Gnash is now able to interact with the proprietary player using LocalConnection.

The drawing API now has beginBitmapFill(), which allows dynamic use of bitmaps as a fill. Also newly implemented are focal gradients, as well as two new spread modes for dynamic and static gradients. These are all SWF version 8 features.

Gnash has supported two media handlers for some time, but from 0.8.8 they are selectable at runtime.

Features written by other developers include a partial implementation of ExternalInterface, experimental hardware acceleration using VAAPI, and selection of renderers at runtime.