Gnash is a media player for playing SWF files. Gnash is available both as a standalone player for desktop computers and embedded devices, as well as a plugin for the browsers still supporting NPAPI. It is part of the GNU Project and is a free and open-source alternative to Adobe Flash Player. It was developed from the gameswf project. Gnash was first announced in late 2005 by software developer John Gilmore. (As of 2011), the project's maintainer is Rob Savoye. The main developer's web site for Gnash is located on the Free Software Foundation's GNU Savannah project support server. Gnash supports most SWF v7 features and some SWF v8 and v9, however SWF v10 is not supported.
Writing a free software Flash player has been a priority of the GNU Project for some time. Prior to the launch of Gnash, the GNU Project had asked for people to assist the GPLFlash project. The majority of the previous GPLFlash developers have now moved to the Gnash project and the existing GPLFlash codebase will be refocused towards supporting embedded systems.
The primary distribution terms for Gnash are those of the GNU GPL. However, since Gnash was started using the codebase of the gameswf project, which is in the public domain, code developed by the Gnash project which might be useful in gameswf is placed in the public domain.
Adobe only provides an outdated version (11.2) of its official player for Linux on IA-32 and an AMD64 developer preview release in a binary-only form. Gnash, however, can be compiled and executed on many architectures, including x86, ARM, MIPS, and PowerPC. It also supports BSD-based operating systems. An early port for RISC OS, which has never had Macromedia/Adobe Flash support beyond Flash 3, does exist, as well as an early port for BeOS, where Flash support terminated at Version 4. Development of a port to AmigaOS 4.1 has also recently begun. A port to the Haiku Operating System also exists.
Gnash requires one of AGG, Cairo, or OpenGL for rendering. In contrast to most GNU projects, which are typically written in C, Gnash is written in the C++ programming language because of its gameswf heritage.
Gnash can play SWF files up to version 7, and 80% of ActionScript 2.0.
The goal of the Gnash developers is to be as compatible as possible with the proprietary player (including behavior on bad ActionScript code). However, Gnash offers some special features not available in the Adobe player, such as the possibility to extend the ActionScript classes via shared libraries: sample extensions include MySQL support, file system access and more. For security reasons the extension mechanism must be compiled-in explicitly and enabled via configuration files.
Gnash supports playback of FLV videos and allows playing some FLV files from YouTube, Myspace, ShowMeDo and other similar websites (older files with sound – newer files without playing sound). FLV support requires FFmpeg or GStreamer to be installed on the system.
Some other free-software programs, such as MPlayer, VLC media player or players for Windows based on the ffdshow DirectShow codecs can play back the FLV format if the file is specially downloaded or piped to it.
Version 0.8.8 was released 22 August 2010. Rob Savoye announced that Gnash should now work with all YouTube videos. Version 0.8.8 has GPU support, which pushed it ahead of the proprietary Adobe Flash Player in Linux, until Flash 10.2 came out with hardware acceleration built in. Gnash still suffers from high CPU usage. A Flashblock plugin can be installed by the user, turning on the Flash support on a case-by-case, as needed basis. YouTube video controls and full screen mode is functioning, although version 0.8.8 has a bug that can cause YouTube to display "Invalid parameters". Many popular Flash games do not work with Gnash 0.8.8.
Cygnal is the Gnash Project's Flash Media Server-compatible audio and video server. It handles negotiating the copyright metadata exchange, as well as streaming the content. It will need to handle many thousands of simultaneous network connection, and support running on large Linux clusters. It should support handling multiple streams with differing content, as well as a multicast stream with a single data source.
Due to the patent issues surrounding MP3, and the fact that FLV and ON2 are closed formats, one of the main goals of this project is to support free codes and free protocols as the primary way of doing things. There is an optional support for MP3, FLV, and ON2 (VP6 and VP7) when playing existing Flash content. Both FLV and the VP6 & VP7 codecs are included in ffmpeg. Users can use the ffmpeg plugin for GStreamer 0.10 to use these proprietary codecs.
Gnash has successfully run on Microsoft Windows, Darwin (OS X), Irix, Solaris, BeOs, OS/2, and Haiku. Gnash has also run on the following 64-bit systems: PowerPC, Itanium, UltraSparc and AMD64.
Gnash has been ported to Windows and the plugin works best with Firefox 1.0.4 or newer, and should work in any Mozilla-based browser. However, in newer browsers the plugin may become unstable or inoperative.
Newer Gnash binaries for Windows do not include a plugin and currently there is no newer working Gnash plugin on Windows.
As of March 2012, the lead developer reported donations were barely enough to pay for hosting the project on the web.
One problem for the project is the difficulty of finding developers. The current developers have never installed Adobe's Flash player, because they fear that anyone who has ever installed the Adobe Flash Player has at the same time accepted an agreement not to modify or reverse engineer Flash player. Therefore, the Gnash project has only about 6 active developers, as of November 2010.
Such generic clauses, however, may be against national anticompetition laws when used in normal software license agreements. On May 2, 2012, the Court of Justice of the European Union ruled in case C-406/10 of SAS Institute Inc v World Programming Ltd that the functionality of a computer program is not covered by copyright in the European Union and that contractual provisions are null and void if they forbid observing, studying and testing a computer program in order to reproduce its behavior in a second program. This holds as long as no source code or object code was copied.