August 25, 2010
This article was contributed by Nathan Willis
The GNU Flash player Gnash
released version 0.8.8 on August 22, the first release advertised as
supporting 100% of the Flash videos hosted at YouTube, in addition to GPU
acceleration and a host of new features. It is also the first release
following a public disagreement between the leading contributors about the
project's development process. In addition, although the Gnash project and
the alternative free software Flash player Lightspark continue to cover
different parts of the Flash specification, development is progressing on
ways for users to seamlessly integrate both into the web browsing
experience.
Gnash development
The disagreement started in mid-May, between Gnash maintainer Rob Savoye and leading contributor Benjamin Wolsey over development policies. Savoye was in favor of making frequent, experimental commits, while Wolsey argued that commits must be rejected if they broke existing tests — or else the stability of Gnash would suffer.
Eventually the two sides settled
on drafting a set of commit policies for the project, which clarified the
need to prevent test regressions and outlined a multi-step policy for
handling checkins, without the potential for conflict that can arise when
one developer reverts another's changes. Documented on the project wiki,
the policy deems
reversions "a last resort" to be taken only after discussing
the issue on IRC, on the mailing list, and blocking out the offending code
with #if 0/#endif.
Judging by the mailing list traffic and the progress of the code since
then, the policy and the discussion surrounding it seems to have succeeded,
and development returned to normal. A much bigger hurdle for the project is
lack of funding. Savoye is historically the only developer who works
full-time on Gnash, and donations to the non-profit Open Media Now project he established to
raise funds for paying developers have slowed down to the point where he has
started taking on other coding jobs.
Gnash's lack of sustained funding has been a problem for all of 2010,
even forcing the team to drop plans to develop support for newer Flash 9
features like ActionScript 3.0. The project is one of the Free Software
Foundation's high
priority projects, but that status does not bestow any funds to help
development, only publicity done by the FSF. Savoye told the Gnash mailing
list in early August that unless donations or other funding pick up, the
maintenance of the existing code — including the multiple rendering
paths targeting different desktop and embedded platforms — will
consume enough time that integrating new features will take a back seat, and
the release schedule may have to slow down.
As to the code itself, source tarballs are provided on the GNU FTP
mirrors, and the release is available via Git. The GetGnash.org site hosts
experimental packages of
the release, including Debian packages for Debian, gNewSense, and Ubuntu
via an Apt repository, as well as Fedora and OLPC packages via a Yum repository.
At the time of this writing, the "experimental" nature of the GetGnash.org packages is fully in evidence, at least for the Ubuntu package, which does not install due to an unresolvable dependency. Compiling Gnash from source was more successful, however.
Due to the number and variety of media formats that can be encapsulated
by Flash, the list of dependencies is long, however it can be reduced by
specifying only a subset of the rendering, GUI, and multimedia options.
For example:
./configure --enable-renderer=cairo --enable-media=GST --enable-gui=gtk
builds support for just the Cairo rendering engine, GStreamer media handler, and the GTK+ stand-alone player GUI. The default settings add OpenGL,
Anti-Grain Geometry (AGG), FFmpeg, SDL, and KDE4 dependencies.
The plugin for Mozilla-based browsers is built by default, but does not require Firefox development packages. Gnash's make install installs the standalone player; make install-plugins installs the browser plugin, by default placing it in $HOME/.firefox/plugins.
What's new
The flexibility in playback engines is one of 0.8.8's main new features, though. If built with FFmpeg and GStreamer media handlers, the choice between them can be made at runtime with the -M switch. Likewise, the -R switch allows runtime selection between Cairo, OpenGL, and AGG rendering (the latter being targeted for framebuffer-only devices).
In addition, Gnash supports switching between two hardware GPU acceleration APIs at runtime, XVideo, and the newer VAAPI. XVideo is not recommended, as the current builds may even reduce speed when compared to software video rendering due to video scaling. VAAPI hardware acceleration includes support for NVIDIA cards using VDPAU, ATI cards using using XvBA, and native support for Intel GPUs.
A major new functionality feature for the Gnash browser plugin in this release is support for ExternalInterface in Flash movies. Also referred to as "Scriptable Plugin" support, this is a gateway that allows JavaScript in an HTML page to interact with ActionScript (Adobe's Flash scripting language) inside an SWF file, including methods, variables, and movie controls.
The project also claims that 100% of the content hosted on YouTube will now play in Gnash. There have been many and varied reasons for YouTube breakage in the past (not the least of which is that the SWF player served up by YouTube changes regularly), but passing 100% of the tests is a milestone indeed. The Gnash developers suggest that everyone experiencing problems with YouTube and Gnash 0.8.8 clear out their YouTube cookies and try again before filing a bug report.
Finally, Savoye has been working on ARM support in recent releases, and Gnash 0.8.8 supports Android devices. This support is likely to be slower than Adobe's official Flash player, however, because for the time being it uses software rendering — but the availability of a free Flash player for mobile devices is an important step.
Interoperability and the future
A question that popped up several times during the last development
cycle was whether there was a chance that Gnash might join forces with Lightspark, another free
Flash player replacement that works as a browser plugin. Lightspark
focuses on supporting the current version of ActionScript, version 3.0,
which was introduced with Flash 9. Gnash focuses on supporting older
versions of ActionScript, which run on the AVM1 virtual machine from Flash
8 and before. Lightspark implements AVM2 for its ActionScript 3.0 support,
and maintainer Alessandro Pignotti has indicated that he cannot feasibly
add support for AVM1 in addition to maintaining AVM2. Complicating matters
is the fact that Flash 9 and Flash 10 files can incorporate AVM1
code if the developer so chooses.
Each plugin could test for the presence of AVM1 or AVM2 code in a given SWF file, though, so it is theoretically possible for Gnash and Lightspark to co-exist and allow users to view both generations of Flash content. Marek Aaron Sapota pointed out on the Gnash mailing list that the Chrome and Chromium browsers allow both plugins to be installed simultaneously, but that Firefox becomes "confused" in the same situation — even if one of the plugins is disabled.
Progress on that front came on August 2, when Pignotti released Lightspark
0.4.2.2. This release of the plugin tests for the virtual machine version
in SWF files, and calls the Gnash program if it uses AVM1 (assuming it detects that Gnash is installed). Consequently, a user could install the Lightspark plugin and Gnash standalone player, not install the Gnash plugin, and play Flash content using both AVM1 and AVM2, seamlessly.
There is a drawback to this approach, because Lightspark has not yet implemented ExternalInterface. So, for the time being, it is a toss-up whether Gnash or Lightspark will offer the best support for any arbitrary SWF file encountered in the browser. Savoye, however, encouraged Pignotti to make use of Gnash's ExternalInterface code, since both projects are released under the GPL.
Of course, the current habit of using YouTube as a test case is of dubious value, particularly in the long term. Not only does video playback test just a small portion of Flash's capabilities when compared to interactive education and game content, but HTML 5 is clearly a better platform for video delivery in the future. Already, YouTube itself allows users to opt-in to an HTML 5 version of the site, as do several other video hosting services.
Even if HTML 5 becomes the preferred web delivery method for audio and video, and HTML 5 with CSS 3 implements rich interactivity that obsoletes most of Flash's other major uses, both Gnash and Lightspark will remain valuable simply because of the millions of Flash files already in existence. In addition, mobile and embedded devices will likely remain a pain point for free software supporters for years to come, as device makers routinely include proprietary components like Adobe's Flash player, and do not make alternatives user-selectable.
It continues to be an interesting year for open source Flash playback. The level of interaction and cooperation between the two main projects is a welcome sign, as is the experimentation being done to bring future releases to previously inaccessible platforms. Case in point: there have been numerous threads in recent months documenting individuals' attempts to get Gnash running on iOS devices like Apple's iPad — which is certainly something the proprietary companies have no intention of pursuing.
(
Log in to post comments)