Ming is a free software library for writing SWF (aka Flash) files.

It's written in C using opaque data types to effectively provide an object-oriented (yet ABI stable) interface. This is the code I've been inspired by when designing the long-lived C-API for GEOS (thank you opaque ndst, whoever you are!).

The library provides binding for different programming languages: PHP, Python, Perl, Ruby, Tcl, C++, Java and more ! Interesting enough, the C++ interface is a simple header-only wrapper around the C API.

Ming and I

I've started working on Ming as part of a project to publish location-based informations with a rich-internet application (September 2003). The web guys insisted on Flash so I had to find a way to produce it without moving a mouse around a screen...

The biggest frustration during that work was the inability to _run_ what I was writing using free software. This wasn't an ideological position, but rather practical: there was no help in debugging my application from the playback platform. This is one of the main reasons why I started working on Gnash right after its announcement.

Ming was an excellent choice for the project as it integrated very well with other pieces of the architecture.
It was used in conjunction with PostGIS as a PostgreSQL stored procedure (written in C) to generate SWF datasets to be loaded by an SWF application module. In that occasion I worked on a simple garbage collector to avoid memory leaks during generation of hundreds of megabytes of vectors within a single postgres process.

The application module itself was written in pure actionscript using Ming's actionscript compiler trough a command line application written in that occasion for that exact purpose (makeswf).

SWF versions and free software support

As of version 0.4.4 (2011), Ming fully supports versions of the SWF format from 4 to 8. Partial support for SWF9 is available, but the biggest new feature in it, ABC bytecode, isnt' supported by Ming's action compiler.

Although this may be seen as an issue, limiting the SWF version to a low number ensures better accessibility to the produced content. All of the Adobe players support all of the SWF versions but older players or independently developed ones may only support older versions of the format. The most notable independent player is Gnash which only fully supports up to SWF7 (only partially SWF8) as of version 0.8.9 (2011).

Making SWF content supported by free software players is especially important for free software SWF applications.
If you need a proprietary software in order to _run_ another software, the latter can't really be considered free. Freedom to use it is limited to those who own a license of use for the proprietary dependency.

This is what happened in the Potlatch case. Older versions of the Openstreetmap editor (Potlatch 1) were written using the Perl binding of Ming, and work with Gnash. The newer version requires installing the binary-only plugin by Adobe.