| GStreamer Static Linking README
|DRAFT, April 2013
| I. INTRODUCTION
|It is possible to link GStreamer libraries, plugins and applications
|statically, both in case of free/libre/open-source software applications
|and proprietary applications. On some platforms static linking may even
|However, distributing statically linked binaries using GStreamer usually
|requires additional effort to stay compliant with the GNU LGPL v2.1 license.
|The purpose of this document is to draw attention to this fact, and to
|summarise in layman's terms what we believe is required from anyone
|distributing statically linked GStreamer binaries. Most of this also
|applies to dynamically linked GStreamer binaries.
| II. DISCLAIMER
|This document is not legal advice, nor is it comprehensive. It may use
|words in ways that do not match the definition or use in the license
|text. It may even be outright wrong. Read the license text for all the
|details, it is the only legally binding document in this respect.
|This document is primarily concerned with the implications for the
|distribution of binaries based on LGPL-licensed software as imposed by
|the LGPL license, but there may be other restrictions to the distribution
|of such binaries, such as terms and conditions of distribution channels
|(e.g. "app stores").
| III. THE SPIRIT OF THE LGPL LICENSE
|The GNU LGPL v2.1 license allows use of such-licensed software by
|proprietary applications, but still aims to ensure that at least the
|LGPL-licensed software parts remain free under all circumstances. This
|means any changes to LGPL-licensed source code must be documented and
|be made available on request to those who received binaries of the
|software. It also means that it must be possible to make changes to the
|LGPL-licensed software parts and make the application use those, as far
|as that is possible. And that recipients of an application using
|LGPL-licensed software are made aware of their rights according to the
|In an environment where GStreamer libraries and plugins are used as
|dynamically-loaded shared objects (DLL/.so/.dyn files), this is usually
|not a big problem, because it is fairly easy to compile a modified version
|of the GStreamer libraries or LGPL plugins, and the application will/should
|just pick up and use the modified version automatically. All that is needed
|is for the original, LGPL-licensed source code and source code modifications
|to be made available, and for a way to build the libraries or plugins for
|the platform required (usually that will be using the build system scripts
|that come with GStreamer, and using the typical build environment on the
|system in question, but where that is not the case the needed build scripts
|and/or tools would need to be provided as well).
| IV. THINGS YOU NEED TO DO
| * You must tell users of your application that you are using LGPL-licensed
| software, which LGPL-licensed software exactly, and you must provide them
| with a copy of the license so they know their rights under the LGPL.
| * You must provide (on request) all the source code and all the changes
| or additions you have made to the LGPL-licensed software you are using.
| For GStreamer code we would recommend that the changes be provided either
| in form of a branch in a git repository, or as a set of "git format-patch"-
| style patches against a GStreamer release or a snapshot of a GStreamer git
| repository. The patches should ideally say what was changed and why it
| was changed, and there should ideally be separate patches for independent
| * You must provide a way for users of your application to make changes to
| the LGPL-licensed parts of the code, and re-create a full application
| binary with the changes (using the standard toolchain and tools of the
| target platform; if you are using a custom toolchain or custom tools
| you must provide these and document how to use them to create a new
| application binary).
| Note that this of course does not mean that the user is allowed to
| re-distribute the changed application. Nor does it mean that you have
| to provide your proprietary source code - it is sufficient to provide a
| ready-made compiled object file that can be relinked into an application
| binary with the re-compiled LGPL components.
| V. THINGS TO LOOK OUT FOR
|While most GStreamer plugins and the libraries they depend on are licensed
|under the LGPL or even more permissive licenses, that is not the case for
|all plugins and libraries used, esp. those in the gst-plugins-ugly or
|some of those in the gst-plugins-bad set of plugins.
|When statically linking proprietary code, care must be taken not to
|statically link plugins or libraries that are licensed under less permissive
|terms than the LGPL, such as e.g. GPL-licensed libraries.
| VI. SPECIAL CONSIDERATIONS FOR SPECIFIC USE-CASES
| 1. Proprietary GStreamer/GLib-based Application On iOS
|Let's assume an individual or a company wants to distribute a proprietary
|iOS application that is built on top of GStreamer and GLib through
|Apple's App Store. At the time of writing the Apple iPhone developer
|agreement didn’t allow the bundling of shared libraries, so distributing
|a proprietary iOS application with shared libraries is only possible using
|distribution mechanisms outside of the App Store and/or only to jailbroken
|devices, a prospect that may not appeal to our individual or company. So the
|only alternative then is to link everything statically, which means the
|obligations mentioned above come into play.
| 2. Example: Jabber on iOS
|Tandberg (now Cisco) created a Jabber application for iOS, based on GStreamer.
|On request they provided an LGPL compliance bundle in form of a zip file, with
|roughly the following contents:
|Jabber/libip.a [236MB binary with proprietary code]
|readme.txt starts with "This Readme file describes how to build the Cisco
|Jabber for iPad application. You need to install Xcode, but the final package
|is built by running buildapp.sh." and describes how to build project,
|prerequisites, the procedure in detail, and a "How to Include Provisioning
|Profile Manually / Alternate Code Signing Instructions" section.
| 3. Random Links Which May Be Of Interest