The problemI've written a application for Android licensed under GPLv3 which needs to use Google Play Services, a proprietary library, as a plugin to the app.Now I'd also like to add libspotify as a plugin.For all of the proprietary libraries used I'm providing alternative open source plugins but they are not as good as the proprietary ones, not even close.The user should then be free to disable all proprietary parts either at compile or runtime.Possible solutionsThe GPLv3 has a section 7. Additional Terms. under which you can add a classpath exception. I'd like to use this exception to do the following.The idea of a classpath exception is explained in the GPLv3 FAQ here:Linking over a controlled interface:http://www.gnu.org/licenses/gpl-faq.html#LinkingOverControlledInterfacehttp://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibsThe basic ideaImplement these interfaces:interface Plugin {}interface ProprietaryPlugin extends Plugin {}interface XYZ_1 extends Plugin {    public void someHook();    public void someOtherHook();    ...}interface XYZ_2 extends Plugin {    public void someHook();    public void someOtherHook();    ...}XYZ_3, 4, ...The above interfaces are part of the project and are under GPL.But I'd like to let all code that extend some subinterface of Plugin except ProprietaryPlugin to be able/allowed to be proprietary given that they mark themselves as ProprietaryPlugin.My intention is to make tight plugin hooks that all proprietary plugins must follow and a way to indicate to the user which plugins that we can remove at runtime.Also, I want the bridge code, the implementation of the plugin interfaces to be open source and under a GPLv3 compatible license. And the source code must provide at least one GPLv3 implementation, hopefully creating a concrete wall between the GPLv3 and proprietary code.Visual explanationIs this possible to do? I know that most guys here are not lawyers, but I find asking developers first enlightening.A suggestion from irc.gnu.org#gnuThe guys at irc.gnu.org#gnu gave me the following suggestion:https://raw.github.com/qcad/qcad/master/gpl-3.0-exceptions.txtIt states that:As a special exception, the copyright holders of QCAD hereby grant permission for non-GPL compatible plug-ins and script add-ons to be used and distributed together with QCAD, provided that you also meet the terms and conditions of the licenses of those plug-ins and script add-ons.Is non-GPL compatible plug-ins and script add-ons vague / a loophole, or is it clear and does it apply to my case?A second suggestionI got a second suggestion at #gnu: http://roundcube.net/license/It states that:This file forms part of the Roundcube Webmail Software forwhich the following exception is added: Plug-ins and Skins which merely make function calls to the Roundcube Webmail Software,and for that purpose include it by reference shall not beconsidered modifications of the software.If you wish to use this file in another project or create a modified version that will not be part of the Roundcube Webmail Software, you may remove the exception above and use this source code under the original version of the license. What do you think about this one?My attempt at a classpath exceptionMy first idea was to add the classpath-exception to Plugin with something like the following... does it accomplish my intent or is it filled with loopholes, etc.?Additional permission under GNU GPL version 3 section 70. DefinitionsFSF means the Free Software Foundation, Inc.Compatible License means any license the FSF considers to be compatible with the GNU GPL version 3.Plugin interface means any interface definition file in the Corresponding Sourcecontaining - in the file's header - the words The licensors of this Program designates this particular file as a Plugin interfaceProprietary interface mark means any interface definition file in the Corresponding Sourcecontaining - in the file's header - the words The licensors of this Program designates this particular file as a Proprietary interface markAllowed library means any library that is linked or combined with this Program, or any covered work that creates a derivative work of a subinterface of a Plugin interface not directly linking with the library.Such a subinterface provides at least the source code of one working implementation licensed under This License.The derivative work of the subinterface linking to the Allowed library implements a Proprietary interface mark.Such a derivative work is referred to as a Proprietary plugin implementation.A Proprietary plugin implementation is licensed under a Compatible License.1. ExceptionsIf you modify this Program, or any covered work, by linking or combining it with any Allowed library (or a modified version of those libraries),containing parts covered by the terms of those libraries, the licensors of this Program grant you additional permission to convey the resulting work.{Corresponding Source for a non-source form of such a combination shall include the source code for the parts of any Proprietary plugin implementationused as well as that of the covered work.}
GPL - Writing an exception for a plugin interface under section 7 of GPLv3
java;android;gpl;plugins;proprietary