175 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| =================================
 | ||
|  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
 | ||
| be required.
 | ||
| 
 | ||
| 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
 | ||
| LGPL license.
 | ||
| 
 | ||
| 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
 | ||
|     changes.
 | ||
| 
 | ||
|   * 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:
 | ||
| 
 | ||
| buildapp.sh
 | ||
| readme.txt
 | ||
| Jabber/Jabber-Info.plist
 | ||
| Jabber/libip.a [236MB binary with proprietary code]
 | ||
| Jabber/main.mm
 | ||
| Jabber/xcconfig/Application.xcconfig
 | ||
| Jabber/xcconfig/Debug.xcconfig
 | ||
| Jabber/xcconfig/Release.xcconfig
 | ||
| Jabber/xcconfig/Shared.xcconfig
 | ||
| Jabber/Resources/*.lproj/Localizable.strings
 | ||
| Jabber/Resources/{Images,Audio,Sounds,IB,Message Styles,Emoticons,Fonts}/*
 | ||
| Jabber/Resources/*
 | ||
| Jabber.xcodeproj/project.pbxproj
 | ||
| Jabber.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 | ||
| opensource/build/config.site
 | ||
| opensource/build/m4/movi.m4
 | ||
| opensource/build/scripts/clean-deps.sh
 | ||
| opensource/build/scripts/fixup-makefile.sh
 | ||
| opensource/build/scripts/MoviMaker.py
 | ||
| opensource/build.sh
 | ||
| opensource/env.sh
 | ||
| opensource/Makefile
 | ||
| opensource/external/glib/*
 | ||
| opensource/external/gstreamer/{gstreamer,gst-plugins-*}/*
 | ||
| opensource/external/openssl/*
 | ||
| opensource/external/proxy-libintl/*
 | ||
| opensource/toolchain/darwin-x86/bin/{misc autotoools,m4,glib-mkenums,glib-genmarshal,libtool,pkg-config,etc.}
 | ||
| opensource/toolchain/darwin-x86/share/{aclocal,aclocal-1.11,autoconf,automake-1.11,libtool}/*
 | ||
| opensource/toolchain/darwin-x86/share/Config.pm
 | ||
| opensource/toolchain/darwin-x86/share/Config.pm.movi.in
 | ||
| patches/glib/glib.patch
 | ||
| patches/gst-plugins-bad/gst-plugins-bad.patch
 | ||
| patches/gst-plugins-base/gst-plugins-base.patch
 | ||
| patches/gst-plugins-good/gst-plugins-good.patch
 | ||
| patches/gstreamer/gstreamer.patch
 | ||
| patches/openssl/openssl.patch
 | ||
| 
 | ||
| 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
 | ||
| 
 | ||
| [0] http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/
 |