More than a year has passed since the beginning of the Lightspark project. It was a long time indeed, but not wasted. I’m extremely pleased with the current level of support and the robustness of the system. You may be wondering “What the heck is lightspark?”, so let me introduce it.
Lightspark is an open source Adobe Flash implementation, designed from the ground up to be efficient on current and (hopefully) future hardware.
The long term objective of this project is not only to deliver a free as in freedom flash player, but also to give to the Flash technology the dignity of a real open standard. I really believe Flash is a powerful technology, it’s main weakness being it’s closedness. Lightspark has been entirely designed after Adobe released the SWF file format documentation, so no reverse engineering has been done.
- OpenGL based rendering allows for fast rendering of geometries and video frames. Moreover, although those are not yet supported, blur and other effects can be implemented using shaders for maximum efficency. Using OpenGL textures to display video frames is a bit less efficent than using XVideo, but make it possible to support any overlaying/transformation effect that flash provides.
- Mostly complete support for the newer version of the flash scripting language: ActionScript 3.0, introduced with Flash 9. Both an interpreter and a JIT engine based on LLVM are provided. The previous versions of the language (supported by Gnash, which does not support 3.0) run on a completely different, and quite weird, virtual machine. Currently Ligthspark does not support the older engine, but most sites (e.g, YouTube) are migrating to the newer engine, so we will be fine just with 3.0
- Beside the Virtual Machine Flash provides a huge runtime libraries that ranges from Video Rendering services to XML parsing. Implementation of the runtime is of course far from complete, but the architecture of the VM makes it possible to easily implement the various objects in plain C++. Moreover, an arbitrary degree of mixing between VM generated and C++ code is possible. This means that functions can be called from whatever context without worrying about their origin.
- A mozilla compatible plugin is provided, I’ve spent a lot of time trying to make the code robust to unexpected conditions and it should fail gracefully and display a gentle message. But, as plugins runs inside the browser process, there a not-so-slight possibility of crashes. Please report any crashes using the bug reporting system of launchpad
- As an added bonus, during development I’ve also added a couple of interesting performance profiling/debugging features which are not provided by the original Adobe player. Keyboard shortcut can be used to enable a profiling overlay, and a primitive inspector of the objects on screen