# Gnash User Manual

This manual describes version 0.8.3 of Gnash.

Copyright © 2005, 2006, 2007, 2008 Free Software Foundation

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this link or in the file COPYING-DOCS distributed with this manual.

Revision History
Revision Gnash User Manual version 0.1 | Feb 2008
Rob Savoye `<rob@openmedianow.org>` The end user parts of the manual have been pulled out of the original version of the manual and rewritten. Open Media Now! Foundation

List of Tables

2.1. Gnash Command Line Options
2.2. Gnash Interactive Control Keys
2.3. User Configuration Variables
3.1. Build Matrix

## Chapter 1. Introduction

Gnash is a free SWF movie player. It is available as a stand-alone application or as a plugin for several popular web browsers. It supports playing media from a disk or streaming over a network connection. Some popular video sharing sites like YouTube are supported on a wide variety of devices from embedded ones to modern desktops.

Gnash has a better focus on security, allowing the user tight control of all network or disk based I/O. Gnash also supports extending ActionScript by creating your own classes. You can write wrappers for any development library, and import them into the player much like Perl or Python does.

## Audience

This manual is primarily focused on users interested in how to get Gnash installed from a package, and basic usage as a web browser plugin. For more technical details, please refer to the Gnash Reference manual.

## What Is Supported?

Gnash is known to compile for most any POSIX and ANSI C++ conforming system if you have all the dependent libraries installed. Systems we test on, and which Gnash is known to run on are Ubuntu, Fedora, Debian, Mandriva, OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily. Occasionally other platforms are built, primarily by those distribution maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris, Slackware, and Gentoo.

Gnash is capable of reading up to SWF v9 files and opcodes, but primarily supports SWF v7, with better SWF v8 and v9 support under heavy development. Since the 0.8.2 release, Gnash includes initial parser support for SWF v8 and v9. Not all ActionScript 2 classes are implemented yet, but all of the most heavily used ones are. Many ActionScript 2 classes are partially implemented; there is support for all of the commonly used methods of each class.

Gnash has implemented about 80% of ActionScript v2.0, and has begun implementing ActionScript v3.0. Gnash supports the majority of Flash opcodes up to SWF v9, and a wide sampling of ActionScript classes for SWF v8.

As ActionScript 3 is a more developed version of ActionScript 2, many of the same classes work for both. Support has been added to Gnash's ActionScript library to support the new ActionScript 3 filters, which get applied to every class. Implementing ActionScript classes is often the easiest way for new Gnash developers to make a contribution without a deep internal knowledge of Gnash.

Gnash has included video support since early 2007, but this is an ever changing field of reverse engineering. Many of the popular video sharing sites use SWF v8 or v9, which Gnash supports imperfectly. This is improving all the time, so often builds from a development snapshot will work when using the older release packaged in your distribution doesn't. You can find daily snapshots of the latest CVS tree at: http://www.gnashdev.org/dev_snapshots.

Gnash uses ffmpeg for codecs, so any file supported by Mplayer should work with Gnash. Gnash supports the loading of patent free codecs like Ogg Vorbis or Theora from disk based files, while work is being done to support these codecs when embedded in a SWF file. Ffmpeg contains the codecs used by the current SWF defintion, FLV, VP6 (ON2), H.263, H.264, and MP3.

## Chapter 2. Using Gnash

When used as a standalone player, you can play any SWF file from the command line by entering a command of the format:

          gnash <option> <flashfile.swf>

The only required argument is the name (and location) of the file to be played.

The available options are listed in the following section, or you may view them in the terminal window by executing the following at the command line:

          gnash --help | less

The source code download of Gnash includes several example SWF files. They are located in the `testsuite/samples/` directory of the Gnash source directory. If you have installed Gnash correctly, issuing a command similar to the following plays a short animation of a car swerving and crashing:

          gnash
          /home/<username>/gnash/testsuite/car_smash.swf

The above is useful for playing Flash files downloaded to your local system. It is also possible to play Flash files directly from the web. To do so, use the `-u` option along with the URL of the desired file.

          gnash -u http://example.domain.com/flashfile.swf

Note that this will not work with every website; some embedded Flash files are difficult to play.

## Gnash Command Line Options

No options are required for Gnash's default behavior. However, there are many options that can be used to change that behavior.

    	gnash <options>
    	filename.swf

Table 2.1. Gnash Command Line Options

Option | Function
--- | ---
`-h, --help` | Print usage information.
`-s, --scale` `<factor>` | Scale the movie up/down by the specified factor.
`-c` | Produce a core file instead of letting SDL trap it. By default, SDL traps all signals, but sometimes a core file is desired to assist with debugging.
`-d, --delay` `<num>` | Number of milliseconds to delay in main loop. The main loop polls continuously with a delay to adjust how long Gnash sleeps between iterations of the loop. The smaller the number, the higher the CPU load gets, and of course, the more iterations of the main command loop.
`-v, --verbose` | Be verbose; i.e. print important messages to stdout.
`-vv` | Be very verbose; i.e. also print debug messages to stdout.
`-va` | Be verbose about movie actions (for ActionScript debugging). This usually generates very large amounts of text and will affect Gnash's performance.
`-vp` | Be verbose about parsing the movie. This generates a fairly large amount of text, and is likely to affect Gnash's performance.
`-A` `<file>` | Write the audio output to a wave format file.
`-D` `<file>` | Write the video output to a raw video file. This option is only valid with dump-gnash.
`-w, --writelog` | Write the log messages to disk using the file specified in the gnashrc file. The default is gnash-dbg.log.
`-j, --width` `<num>` | Specify the starting width of the window. This is mostly used only by the plugin.
`-k, --height` `<num>` | Specify the starting height of the window. This is mostly used only by the plugin.
`-1, --once` | Play once; exit if or when the movie reaches the last frame.
`-r, --render-mode` `<0|1|2|3>` | 0 disables rendering and sound (good for batch tests). 1 enables rendering and disables sound. 2 enables sound and disables rendering. 3 enables rendering and sound (default).
`-t, --timeout` `<sec>` | Timeout and exit after the specified number of seconds. This is useful for movies which repeat themselves.
`-g, --debugger` | Start Gnash with a Flash debugger console so one can set break points or watchpoints.
`-x, --xid` `<ID>` | This specifies the X11 window ID to display in; this is mainly used by plugins.
`-u, --real-url` `<URL>` | Set the _url member of the root movie. This is useful when you download a movie and play it from a different location. See also the -U switch.
`-U, --base-url` `<URL>` | Set base URL for this run. URLs are resolved relative to this base. If omitted or empty, it defaults to the _url member of the top-level movie (see the -u switch).
`-P, --param` `<parameter>` | Parameters are given in the syntax "ParamName=Value" and are mostly useful for the plugin to honour EMBED tags attributes or explicit OBJECT PARAM tags. A common use for -P is to provide FlashVars (ie: -P "FlashVars=home=http://www.gnu.org").
`-F, --fd` `<filedescriptor>` | Use the given filedescriptor to send requests to the host application. This is currently only used for GETURL requests. The protocol is not documented yet, and also needs improvement. Primary use for this switch is for the NPAPI plugin to properly support javascript and target windows in geturl requests.
`--max-advances` `<num>` | Exit after the specified number of frame advances.
`--fullscreen` | Start Gnash in fullscreen mode as long as the GUI and window manager support this.

## Gnash Interactive Control Keys

While a movie is playing, there are several control keys. These can be used to step through frames, pause the playing, and control other actions.

Table 2.2. Gnash Interactive Control Keys

Key Combination | Function
--- | ---
`CTRL-Q` | Quit/Exit.
`CTRL-W` | Quit/Exit.
`ESC` | Quit/Exit.
`CTRL-P` | Toggle Pause.
`CTRL-R` | Restart the movie.
`CTRL-L` | Force immediate redraw.
`CTRL-T` | Debug. Test the set_variable() function.
`CTRL-G` | Debug. Test the get_variable() function.
`CTRL-M` | Debug. Test the call_method() function.

## User Configuration File

Individual user preferences may be set by editing variables with the `.gnashrc` file:

          ~/.gnashrc

Each line must begin with an action: either set or, in the case of lists, also append.

The values in this configuration file apply only to an individual user, and become the default settings of the standalone player and the plugin. Note that any command line options take precedence over `.gnashrc` settings.

The variables in the `.gnashrc` file support three types of arguments: on/off, numeric values, or in the case of the whitelist and blacklist, a list of hostnames as ASCII text.

Table 2.3. User Configuration Variables

Variable | Value | Function
--- | --- | ---
localdomain | on/off | This value can be set to either on or off, and controls the loading of external Flash movies over a network. This option tells Gnash to only load Flash movies from the existing domain.
localhost | on/off | This value can be set to either on or off, and controls the loading of external Flash movies over a network. This is a stricter version of the localdomain setting as this allows the loading of Flash movies to the same host that is running Gnash.
whitelist | hostnames | This is a list of hostnames separated by spaces, or off to disable the whitelist. The hostname must be given without a protocol (http://, https://). If this list is populated, Gnash will only load external Flash movies from the specified hosts. The whitelist takes precedence over the blacklist. Because several files can be parsed in succession, each file can override or add to lists in other files. Use set to override all other lists or append to add your blacklisted hosts to lists in previously parsed files.
blacklist | hostnames | This is a list of hostnames separated by spaces, or off to disable the blacklist. The hostname must be given without a protocol (http://, https://). External flash movies from these domains are never allowed to load. If whitelist is present and not empty, blacklist is not used. Because several files can be parsed in succession, each file can override or add to lists in other files. Use set to override all other lists or append to add your blacklisted hosts to lists in previously parsed files.
localSandboxPath | dirs | This is a list of directories separated by spaces. Only resources from these directories and from the directory portion of movie filename (if loaded from filesystem) are allowed to load. Because several files can be parsed in succession, each file can override or add to lists in other files. Use set to override all other lists or append to add new sandboxes. Note that there's currently no way to drop the directory of base dir from the list of allowed local sandboxes.
delay | Number | Gnash uses a timer-based event mechanism to advance frames at a steady rate. This option overrides the default setting in Gnash to play a movie slower or faster.
verbosity | Number | This is a numeric value which defines the default level of verbosity from the player.
MalformedSWFVerbosity | on/off | This value can be set to either on or off, and controls whether malformed SWF errors should be printed. If set to true, verbosity level is automatically incremented. Set `verbosity` to 0 afterwards to hush.
ASCodingErrorsVerbosity | on/off | This value can be set to either on or off, and controls whether ActionScript coding errors should be printed. If set to true, verbosity level is automatically incremented. Set `verbosity` to 0 afterwards to hush.
debuglog | Absolute path | This is the full path and name of debug logfile as produced by Gnash. On systems with a UNIX-type shell, a tilde prefix (~) will be expanded as by Posix shell requirements (see http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).
writelog | on/off | This value can be set to either on or off, and controls whether a debug log is always written by Gnash, or not at all.
sound | on/off | This value can be set to either on or off, and controls the sound of the standalone player. By default Gnash enables playing the sound in any Flash movie.
pluginsound | on/off | This value can be set to either on or off, and controls the sound of the player when running as a browser plugin. By default, sound is enabled when using Gnash as a browser plugin.
EnableExtensions | on/off | Set to on to enable extensions. This option is off by default
StartStopped | on/off | Set to on to have the GUI start in "stop" mode. This is useful in particular for the plugin, so you have to explicitly start any movie on a webpage. This option is off by default.
flashVersionString | string | Set the string returned by $version and System.capabilities.version. Useful to get around some flash version detection movies. Note that the version advertised by the plugin is NOT affected by this setting, instead you need to set the GNASH_FLASH_VERSION environment variable for the latter (which doesn't affect $version and System.capabilities.version).
flashSystemOS | string | The string that Gnash should return for System.capabilities.OS
flashSystemManufacturer | string | The string that Gnash should return for System.capabilities.manufacturer
StreamsTimeout | double | Set the number of seconds after which streams download time out. Timeouts only occur after the given number of seconds have passed without anything being received.
insecureSSL | on/off | If set to on, no verification of SSL connections is performed. This means that, although the connection is encrypted, the server certificate could be invalid, may not belong to the host, or both. Equivalent to curl --insecure. By default, this option is off and connections will fail when a host cannot be verified.
SOLsafedir | Absolute path | The full path to a directory where Gnash should store Shared Object files ("flash cookies") if they are enabled.
SOLreadonly | on/off | If set to on, Gnash will not write Shared Object files.
ignoreFSCommand | on/off | If set to on (default), Gnash will ignore fscommands in standalone mode. Fscommands are requests from the playing movie to the operating system or user interface: the most common are quit, fullscreen, showmenu and exec. Gnash always ignores fscommands when running as a plugin.
URLOpenerFormat | string | Set the format of an url opener command. The %u label would be substituted by the actual url to be opened. Examples:
    	      set urlOpenerFormat firefox -remote 'openurl(%u)'
    	      set urlOpenerFormat xdg-open %u
    	      set urlOpenerFormat open %u
    	      set urlOpenerFormat kfmclient exec %u

The following example `.gnashrc` file allows a user to only play Flash files saved locally to the machine on which Gnash is running. It also specifically forbids content from doubleclick.com and mochibot.com. Gnash's error output is set to be fairly verbose, with the debug log placed in a location convenient for the user. Finally, sound is turned on for both the standalone player and the plugin.

        #
        # Gnash client options
        #

        # Only access remote content from our local domain
        set localdomain on

        # Only access content from our local host
        set localhost on

        # These sites are OK
        # uncommenting the following line will allow load of external
        # movies *only* from the specified hosts.
        #set whitelist www.doonesbury.com www.cnn.com www.9news.com

        # Disable whitelists set in any other gnashrc files, because
        # these could override our blacklist.
        set whitelist off

        # Don't access content from these sites
        set blacklist www.doubleclick.com mochibot.com

        # The delay between timer interrupts
        set delay 50

        # The default verbosity level
        set verbosity 1

        # Be verbose about malformed SWF
        set MalformedSWFVerbosity true

        # Be verbose about AS coding errors
        set ASCodingErrorsVerbosity true

        # The full path to the debug log
        set debuglog ~/gnash-dbg.log

        # Write a debug log to disk
        set writelog on

        # Enable or Disable sound for the standalone player
        set sound on

        # Enable or Disable sound for the standalone player
        set pluginsound on

        # Make sure SSL connections are always verified
        set insecureSSL off

        # Use firefox to open urls
        set urlOpenerFormat firefox -remote 'openurl(%u)'

## Chapter 3. Installing and Configuring Gnash

There are two ways of installing Gnash: using a package manager, or installing from source.

## Requirements

Before downloading and installing Gnash, check that your hardware and software meet the following requirements.

### Hardware Requirements

One of the goals of Gnash is to make it portable enough to install on small devices. As a result, the hardware requirements are minimal. Gnash has even run on an ARM9 at 200 MHz with 32 MB of RAM! (It ran without video support in this case.) While firm minimums have not been established, Gnash has been shown to run successfully with the following:

- 336 MHz processor

- 128 MB RAM

- Gnash will run on anything from a raw frame buffer up to an OpenGL-supporting graphics card.

The following table provides a list of the Operating System/CPU combinations on which Gnash has been shown to run.

Table 3.1. Build Matrix

Operating System | Processor
--- | ---
OpenBSD, FreeBSD, NetBSD | Alpha AXP, AMD64, i386, Itanium, PC-98, PowerPC, SPARC64
Debian | Alpha AXP, AMD64, ARM, hppa, i386, Itanium, MIPS, PowerPC, IBM zSeries (s390), SPARC
Fedora | x86-32, x86-64, Geode GX, Geode LX
Gentoo | AMD64, PowerPC, SPARC, x86
Maemo 2.1 | i385, ARMv5t
Scratchbox | i386, ARMv5t
Access Linux Platform | i386, ARMv5t
Mandriva | i386, x86-64, MIPS
Open Embedded, OpenMoko | ARM
YellowDog Linux 6 | PowerPC, PS3
OpenSuSE 10 | i586, x86-64
Red Hat Enterprise, CentOS | x86-32, x86-64
Ubuntu | x86-64, x86-32, PowerPC, UltraSPARC
Haiku | i386
Syllable | i386
Irix 6.5 | MIPS R10K
Darwin (MacOS X) | PowerPC and x86-32
Windows XP, Windows Vista | x86-32

### Software Requirements

The 0.8.3 release of Gnash has been designed to run on UNIX/Linux variants, and has been run on most of the free ones. However, Gnash has successfully run on Windows, Darwin (Mac OS X), Irix, Solaris, BeOs, OS/2, and Haiku. Gnash has also run on the following 64-bit systems: PowerPC, Itanium, UltraSparc, and AMD64. For now, it is important to be sure that the following code, testing, and documentation dependencies are met before installing Gnash. If you will be downloading Gnash with a package manager, these dependencies may be solved by the package manager. Otherwise, you must first verify that each of these dependencies are installed on the target system.

## Downloading Gnash

There are two ways to download Gnash: using a package manager or by downloading the source code and building it on your system. If possible, it is advisable to use a package manager to download Gnash, as it will resolve dependencies for you. However, if you want the very latest features, or a Gnash package is not available for your operating system, it is better to download the source code and build Gnash locally.

### Getting the Source

Gnash is available as a release tarball, a development checkout, or a development snapshot.

#### Releases

The source can be acquired from a GNU FTP Mirror. The release version is intended to be stable, and is probably your best choice if the release took place recently. If you need features or fixes which were introduced after the release, consider a CVS checkout or the daily snapshot.

To download, select a mirror near you, then choose the `gnash` directory.

#### Snapshot

The daily development snapshot can be downloaded from http://www.gnashdev.org/dev_snapshots/. This is the best option if you need changes which were introduced after the last release of Gnash, but are unable to download directly from the repository.

#### Repository

The latest development sources are available via anonymous CVS. This is recommended if you need features or bug fixes which were introduced after the last release. Look at the daily snapshot if you experience difficulty accessing the repository.

To download via anonymous CVS, first set the environment variable CVS_RSH to ssh, then check out the source code. The example below uses the GNU Bourne-Again shell (bash):

    	    export CVS_RSH="ssh"
    	    cvs -z3 -d:pserver:anonymous@cvs.sv.gnu.org:/sources/gnash co gnash

It is also possible to browse the repository http://cvs.savannah.gnu.org/viewcvs/gnash/?root=gnash on the web.

### Getting Codec Support

Gnash requires codec support to handle audio and video correctly. Some platforms like Ubuntu or Fedora under the GNOME desktop will automatically notify the user that the proper codecs aren't installed, and pop up a dialog box to let the user download the codecs Gnash needs to make site like YouTube work correctly. If you have installed Gnash on any other platform, and video doesn't work, it's highly likely you need to install the proper codecs. For most platforms, this is the Gstreamer-ffmpeg plugin, available from your distributions repository.

## Chapter 4. Reporting Bugs

The Gnash project relies on the community of Gnash users to test the player. Feedback is critical to any successful project. Not only does it let us know that people use Gnash, but it helps us understand the community's needs. Gnash uses a bug tracker on http://savannah.gnu.org to manage these reports.

When filing a report, please follow the guidelines below. The better your bug report is, the easier it will be for the developers to address the issue. Bug reports without enough information will be asked to provide this information anyway. Adding critical details, like the Operating System you are on, its version, and any relevant error messages from Gnash that you get.

## Get a Fresh Binary Package

For starters, it's a good idea to obtain a copy of the latest snapshot. Although Gnash is primarily released as source, the Gnash build infrastructure allows the automated building of binary packages. Often the version of Gnash as packaged by a GNU/Linux or BSD distribution is based on the last official release, which could be months out of date. It helps us, if this is the case, for you to try a newer packaged build of Gnash.

You can get a fresh binary package of Gnash, as well as recent source packages from http://www.getgnash.org/packages .

## Determine if the bug was previously reported

Search the Gnash bug tracker to see if the bug has already been identified.

If the issue has already been reported, you should not file a bug report. However, you may add some additional information to the ticket if you feel that it will be beneficial to the developers. For instance, if someone reported a memory issue on Ubuntu GNU/Linux, and you noticed the same problem on OpenBSD, your stacktrace would be useful. Conversely, adding a "me too" note to a feature request is not helpful.

## Review the bug writing guidelines

A good bug report should be precise, explicit, and discrete. This means that there should be just one bug per ticket, and that a ticket should contain the following information:

- An overview of the problem;

- Instructions on how to replicate the bug;

- A description of what happened when you performed the steps to replicate the bug, and what you expected to happen;

- Your system information: operating system name and version, as well as the versions of major development dependencies;

- The release number or checkout timestamp for the version of Gnash where you observe the problem;

- The file `config.log`, which should be attached as a file;

- A descriptive title.

Include any additional information that you feel might be useful to the developers.

## Filing a bug report

After following the steps described above, you can file a bug report at https://savannah.gnu.org/bugs/?group=gnash.

## Glossary

### A

ActionScript

  ActionScript, or "AS", is the scripting language for Flash applications. It is compiled to bytecode, which is a subset of the SWF format.

AGG

  AGG is the AntiGrain 2D graphics library, which can be used as a renderer in Gnash. It is faster than OpenGL on systems without hardware graphics acceleration. As of Gnash version 0.8.2 it is the more feature complete renderer.

AMF

  AMF is the object format used by Flash for shared objects and streaming video.

as_environment

  In Gnash terms, the as_environment, or ActionScript execution environment, contains a stack of objects, characters and values which are in the immediate environment of the current fn_call. Please refer to the Gnash ActionScript manual for more information.

### C

Cairo

  Cairo is a 2D graphics library with support for multiple output devices. Can be used as a renderer in Gnash. A useful feature of Cairo is that it will automatically use graphic card acceleration when available. Cairo has an experimental OpenGL backend.

### D

DejaGNU

  DejaGNU is a framework for testing software.

DocBook

  DocBook is a markup language for presentation-neutral documentation, such as manuals.

Doxygen

  Doxygen is a documentation generator for for multiple languages which uses comments in the source code to create stand-alone documentation.

Drupal

  Drupal is a CMS/blog system used for the main Gnash website.

### E

extensions

  A Gnash extension is a plugin (not a browser plugin) which implements additional functionality beyond what is covered by Flash specification. These are shared libraries which are loaded at runtime.

### F

ffmpeg

  ffmpeg is an audio and video decoding library which can be used by Gnash to decode mp3, FLV and other media types.

Flash

  The term Flash is used to describe both the Adobe IDE for creating SWF files, and the technology itself. Flash is a registered trademark belonging to Adobe. Unfortunately, neither Macromedia nor Adobe have done a good job creating a generic name for all things having to do with Flash. They risk loss of their trademark.

FLV

  FLV is a proprietary file format used to deliver Flash video. It is used by YouTube, among others.

FLTK

  FLTK, or the 'Fast Light ToolKit', is a portable GUI library which is intended to replace the SDL GUI. Currently in Gnash, FLTK may be used with the Cairo and AGG renderers. FLTK has an experimental Cairo backend.

FrameBuffer

  In Gnash, this is a GUI library that outputs directly to the Linux Frame Buffer and so does not need a window system to run. This makes it particularly suitable for use on small devices.

### G

Gnash

  Gnash is the GNU Flash movie player.

Gstreamer

  Gstreamer is a multimedia framework which Gnash can use for decoding audio and video. Gstreamer itself cannot decode anything, so it needs some appropriate decoding-plugins to do the work for it. Remember to install them if you use Gnash with Gstreamer enabled. To get the best out of Gnashs gstreamer-parts, it is recommended to install the gst-plugins-good, gst-plugins-good and gst-ffmpeg plugins packages.

GTK

  GTK is the GIMP Toolkit GUI library. It is one of the GUI options for Gnash. As of Gnash 0.7.2, this is the more performant and feature-rich choice. GTK uses Cairo internally.

GUI

  A GUI is a "graphical user interface". In Gnash, the GUI library provides a wrapper for mouse and keyboard events, menus, windowing (where available) and a drawing area. You must choose a GUI library during the configuration stage of building Gnash.

### K

kde-gnash

  kde-gnash is the name given to the stand-alone instance of Gnash which used the KDE GUI. It has been replaced with an implementation using Qt. The Konqueror plugin runs kde-gnash and is called Kparts.

Kparts

  Kparts is a plugin for Konqueror which is enabled with the configuration option --enable-kparts.

### L

libmad

  libmad is a mp3-decoding library, which used to be an option for Gnash handling of sound (dropped since 0.8.2).

### M

Mesa

  Mesa is the free software OpenGL implementation. Gnash documentation will sometimes use the glossterms 'OpenGL' and 'Mesa' interchangeably.

Ming

  Ming is a C library for generating SWF ("Flash") format movies, plus a set of wrappers for using the library. It is used by the Gnash project for generating testcases.

### N

Nellymoser

  Nellymoser is a proprietary audio codec introduced in the Flash Player in version 6. For more information, please see Wikipedia.

### O

OpenGL

  OpenGL (Open Graphics Library) is a standard specification defining a cross-language cross-platform API for writing applications that produce 3D and 2D computer graphics. Accelerated graphic cards usually provide OpenGL at the hardware level. Please refer to Wikipedia for availability of free software OpenGL hardware drivers. A free software implementation of the API is available (Mesa). OpenGL can be used as a renderer in Gnash.

ORM

  ORM is a system for ensuring the rights of the creator over a piece of digital content. It is more passive than DRM.

### P

plugin

  The glossterm plugin is used in Gnash to refer to both any Gnash browser plugin, as well as the Firefox plugin specifically. The Konqueror plugin is called Kpart. Sometimes, the term is used in an even more generic sense to refer to extensions.

### Q

Qt

  Qt is a GUI library which is used by KDE. The plugin version of Gnash using this GUI library is Kpart. The standalone version is enabled with --enable-gui=kde.

### R

renderer

  The renderer is the subsystem of Gnash which renders content. Only one renderer may be used; it is selected at configuration time if building from source.

  Available renderers are: AGG, OpenGL, and Cairo. In terms of feature completeness, AGG comes first; followed by OpenGL and then Cairo. In most cases, AGG is preferred for performance, except cases where it is beneficial to have hardware accelerated rendering (for example, when you have a very slow CPU but a very fast graphics card). In this case OpenGL should be used.

RTMP

  RTMP is the Real Time Messaging Protocol primarily used with to stream audio and video over the internet to the Flash Player client.

RTMPT

  RTMPT is basically a HTTP wrapper around the RTMP protocol that is sent using POST requests from the client to the server. Because of the non-persistent nature of HTTP connections, RTMPT requires the clients to poll for updates periodically in order to get notified about events that are generated by the server or other clients.

RTMPTS

  RTMPTS is the same as RTMPT, but instead of being a HTTP wrapper, it is a HTTP SSL wrapper (HTTP secure connection).

### S

SDL

  Simple DirectMedia Layer is a cross-platform multimedia free software library that creates an abstraction over various platforms' graphics, sound, and input APIs. Gnash can use it as a GUI and/or as a sound handler. Note that the two usages are independent of each other: you can use it for a task and not for the other if you wish. This version of Gnash does not implement menus in the SDL GUI; the SDL sound handler is the most feature rich, supporting video through ffmpeg.

sound handler

  The sound handler is the part of Gnash which handles both event sounds and streaming sound. Audio from external sources is sent through the sound handler when SDL is used. The sound handler must be selected during configuration of Gnash when compiling.

  There are currently two sound handlers available in Gnash: ffmpeg and Gstreamer. The ffmpeg sound handler uses SDL for mixing. The Gstreamer-sound handler uses the available plugins to decode the audio, so it might not work if some important plugins are missing. The GST sound handler is recommended (the default).

sprite

  A sprite is an element of an Flash Movie. It's basically a Movie inside another, having its own timeline.

Stage

  The visible area of a Flash movie. The name derives from a theater analogy. Graphical elements are referred to as characters.

SWF

  SWF is the file format for Flash movies.

### T

Tamarin

  The Tamarin project seeks to create an open source implementation of the ECMAScript 4th edition language specification. The code is used by Adobe as part of the ActionScript Virtual Machine within the Adobe Flash Player. Gnash does not use Tamarin; it already has a working virtual server and most ActionScript classes are implemented.

timeline

  In Flash technology, a timeline is a sequence of "frames". A single Flash movie can contain multiple timelines, each independently controlled (STOP or PLAY). At regular intervals (FPS) the player advances all timelines in PLAY mode to the next frame, looping back when last frame is reached.

### X

X.org

  X.org is the most commonly used X server; it was forked from XFree86.

## Chapter 5. Authors

Gnash is maintained by Rob Savoye. Other active developers are: Sandro Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad Musick, Benjamin Wolsey, Zou Lunkai, and Russ Nelson. Please send all comments and suggestions to `<gnash-dev@gnu.org>`. Past and sometimes current developers are Tomas Groth and Markus Gothe.

Gnash was initially derived from GameSWF. GameSWF is maintained by Thatcher Ulrich `<tu@tulrich.com>`. The following people contributed to GameSWF: Mike Shaver, Thierry Berger-Perrin, Ignacio Castaño, Willem Kokke, Vitaly Alexeev, Alexander Streit, and Rob Savoye.

## Appendix A. GNU Free Documentation License

Version 1.1, March 2000

Copyright © 2000 Free Software Foundation, Inc.

Free Software Foundation, Inc. 59 Temple Place,
Suite 330, Boston, MA
02111-1307 USA

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

## 0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or non-commercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

## 1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

## 2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

## 3. COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

## 4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

- A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

- B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

- C. State on the Title Page the name of the publisher of the Modified Version, as the publisher.

- D. Preserve all the copyright notices of the Document.

- E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

- F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

- G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

- H. Include an unaltered copy of this License.

- I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

- J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

- K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

- L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

- M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

- N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version .

## 5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

## 6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

## 7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document , on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

## 8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

## 9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

## 10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

## Addendum

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

> Copyright 2008, Free Software Foundation.

> Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with noInvariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.