By Nathan Willis
November 21, 2012
Adobe's proprietary and often annoying Flash format is dying, to be
replaced by a bagful of open technologies like HTML5, CSS3, SVG,
JavaScript, and royalty-free media codecs. Or so we are told. Of
course, we have been told this story often enough over the years that
it is difficult to muster genuine excitement at the news.
Nevertheless, the most recent combatant to enter the ring is Mozilla's
Shumway, which
constitutes a distinctly different life form than existing free
software projects like Lightspark and Gnash. Rather than implement Flash
support in a browser plugin, Shumway translates .swf content
into standard HTML and JavaScript, to be handled by the browser's main
rendering engine.
The sparking and gnashing of teeth
Gnash and Lightspark are both reverse-engineered implementations of
a Flash runtime (and, naturally, come with an accompanying Netscape
Plugin API (NP-API) browser plugin), but they cover different parts of the
specification. Gnash, the older of the two projects, implements
versions 1 and 2 of Flash's ActionScript language, and the
corresponding first generation of the ActionScript Virtual Machine
(AVM1). This provides solid coverage for .swf files up
through Flash 7, and partial support of Flash 8 and
Flash 9 (including a significant chunk of .flv video
found in the wild). Lightspark implements ActionScript 3 and the
AVM2 virtual machine, which equates to support for Flash 9 and
newer. Lightspark does have the ability to fall back on Gnash for
AVM1 content, though, which enables users to install both and enjoy
reasonably broad coverage without having to know the version
information of Flash content in advance.
As is typical of reverse engineering efforts, however, neither project
can claim full compatibility with the proprietary product. In
practice, development tends to focus on specific use-cases and popular
sites. Gnash, for example, was founded with the goal of supporting
Flash-based educational games, and previous releases have been pinned
to fixing support for popular video sites like YouTube. Lightspark
maintains a wiki
page detailing the status of support for common Flash-driven web
sites. But the sheer variety of Flash content makes it virtually
impossible to implement the full specification and offer any
meaningful guarantee that the plugins will render the content without
significant errors.
But an even bigger problem remains one of time and funding. Gnash in
particular has struggled to raise the funds necessary for lead developer
Rob Savoye to devote significant time to the code. Gnash has been a
Free Software Foundation (FSF) high-priority project for years, and
Savoye was the 2010 recipient of the FSF's Award for the Advancement
of Free Software, but fundraising drives have nevertheless garnered
low returns — low enough that as recently as March 2012, Savoye
reported
that the hosting bills for the site were barely covered. The last
major release was version 0.8.10 in February 2012, which included
OpenVG-based vector
rendering along with touchscreen support. A student named
Joshua Beck proposed
a 2012 Google Summer of Code (GSoC) project to add OpenGL ES 2.0
support under Savoye's mentorship, but it was not accepted. Traffic
on the mailing
lists has slowed to a trickle, though there are still commits from
Savoye and a devoted cadre of others.
Lightspark has made more frequent releases in recent years, including
two milestone releases in 2012. In June, Version 0.6.0.1
introduced support for Adobe AIR applications and the BBC web site's
video player. Version 0.7.0
in October added support for LZMA-compressed Flash content and
experimental support for runtime bytecode optimization.
Both projects regularly make incremental additions to their suites of
supported Flash opcodes and ActionScript functions, but neither has
much in the way of headline-grabbing features in new releases. This
is a bigger problem for Gnash, which does not have Adobe's newer
enhancements to Flash to worry about (and is probably a key reason
Gnash has had a hard time attracting donations). Lightspark can
still tackle a host of new features with each update of Adobe Flash.
Of course, both projects' real competition has come from the easy
availability of a freely-downloadable official browser plugin for
Linux, but Adobe announced in February
2012 that Flash 11.2 would be the last release available as an NP-API
plugin for Linux. Subsequent Linux releases would only be made as
the built-in Flash plugin in Google's Chrome. The move has seemingly
not motivated Flash-using Linux fans to cough up support for Gnash and
Lightspark — but perhaps the next major update to Flash will.
I did it Shumway
Mozilla developer Jet Villegas wrote a blog
post introducing Shumway on November 12, but the code has been
available for several months. Shumway is described as an
"experimental web-native runtime implementation" of
the .swf format. Shumway essentially pushes handling of the
formerly-Flash content to the browser's rendering engine and
JavaScript interpreter. This protects against misbehaving plugins
that eat up too many resources or simply crash. Shumway is available
as a Firefox extension [XPI], though it is only expected to work on the most recent Firefox
beta builds.
The recent Firefox build is required because Shumway parses Flash
content and translates it into HTML5 elements, such as
<canvas> and <video> elements, WebGL
contexts, and good-old-fashioned embedded images. Shumway translates
ActionScript into JavaScript to handle interactivity. Both AVM1 and
AVM2 are supported, as are ActionScript versions 1, 2, and 3. The
extension supports the use of <object> and
<embed> tags to incorporate Flash into the page. As
for multimedia codecs, Shumway can automatically take advantage of
whatever codecs are available on the system.
At the moment there is not a definitive compatibility list, so
Shumway's support for any particular Flash file is a gamble. Villegas
did say in a comment
that the project is targeting Flash 10 and below, which he said
accounts for "the vast majority of existing content."
The idea of translating Flash content into HTML5 is not original to
Shumway, but its predecessors have been focused on Flash-based
advertising. Google offers a web service called Swiffy
that translates uploaded Flash files into JSON objects, targeted at
advertisers wanting to deploy animated ads. Smokescreen
was a JavaScript player designed to render Flash ads on iOS devices.
Slaying the Flash gorgon
Mozilla's goal with Shumway is to remove Flash from the equation
altogether, replacing it with "open web" technologies. By
demonstrating that HTML5 content is capable of reproducing anything
that can be done in Flash, the thinking goes, the browser-maker can
encourage more content creators to drop Flash from their workflows.
One might think it fair to ask whether supporting Flash in any sense
genuinely "promotes" the use of Flash alternatives. After all, in
December 2010, Mozilla's Chris Blizzard told
Joe Brockmeier that the organization was not interested in funding
Flash support, open source or otherwise:
Our strategy is to invest in the web. While Flash is used on the web,
it lacks an open process for development with open specifications and
multiple competing implementations. Creating an open source version of
Flash wouldn't change the fact that Flash's fate is determined by a
single entity.
Blizzard's comment was in response to a question about supporting
Gnash and Lightspark development. Sobhan Mohammadpour asked the same
thing on the Shumway blog post, to which Villegas replied:
Processing SWF content in C/C++ exposes the same security & device
compatibility problems as the Adobe Flash Player. It also doesn’t help
advance the Open Web stack (eg. faster javascript and canvas
rendering) with the research work.
Such a distinction might seem like splitting hairs to some. In
particular, Villegas suggests that Gnash and Lightspark are a greater
security risk than an .xpi browser extension. The Gnash team
might take offense at that, especially considering the work the project has done to enforce a
solid testing policy. But it is certainly true that massaging Flash
content into generic web content has the potential to bring
.swf and .flv support to a broader range of
platforms. Both Gnash and Lightspark are developed primarily for
Linux, with only intermittent working builds for Windows. On the
other hand, Gnash and Lightspark also offer stand-alone, offline Flash
players, which can be a resource-friendly way to work with Flash games
and applications.
History also teaches us that it would be unwise to embrace Shumway too
tightly, writing off Gnash and Lightspark as also-rans, for the simple
reason that Shumway is still an experimental Mozilla project. Sure,
some Mozilla experiments (such as Firefox Sync) move on to be fully
integrated features in future browsers — but far more are put
out to pasture and forgotten, with nary an explanation. Firefox Home,
Chromatabs, Mozilla Raindrop — the list goes on and on.
It is also not clear exactly what to make of Villegas's statement
about Flash 10 being the newest supported version. If that is
long-term limitation, then Shumway may be of finite usefulness. True,
Flash may die out completely before there is ever a Flash 12, and
Flash 11 may never account for a significant percentage of the web's
.swf files. In that case, users everywhere will enjoy a
blissful HTML5-driven future with plugin-crashes a forgotten woe, and
free unicorns as far as the eye can see. But where have we heard that
one before?
(
Log in to post comments)