[License-discuss] GPL and proprietary WebAPIs

Clark C. Evans cce at clarkevans.com
Wed Dec 21 14:43:24 UTC 2011

On Wed, Dec 21, 2011, at 03:01 AM, Chris Travers wrote:
| > Let's suppose that I've working on a Ledger++ program
| > which is a proprietary version of your Ledger SMB that
| > adds awesome multi-state Payroll and Asset Depreciation
| > features.  Only rather than including these features
| > in your code-base, I include only stubs that package
| > up the data each feature needs, calls a proprietary
| > web service, and returns the data.
| Ok.  So far so good.....
| >
| > So, about 5% of my code is a bunch of hooks, while 95% of
| > my Ledger+ code remains proprietary.  I release the stubs
| > under the GPL license... but effectively, the features
| > I've added are completely useless and non-operational
| > unless you've paid for my web service subscription.
| Well, technically you'd probably release under the LGPL or BSD
| license, sort of like nVidia does with their stubs for their Linux
| video drivers.  Again this isn't a new thing.  You see a surprising
| amount of it in Linux (ndiswrapper, the nVidia drivers that RMS hates,
| etc).

I don't understand why it'd matter how the stubs are licensed,
if the GPL doesn't have any ability to "jump" over a network.

| > My reading of the GPLv3 is that it uses copyright law
| > to determine when you've made a modification, but, the
| > condition to distribute your modification goes far beyond
| > this limitation, including "the whole of the work, and all
| > its parts, regardless of how they are packaged".
| That's not my reading.  My reading is that the license tries to get
| away from the derivative works definition (maybe it's not strict
| enough for Stallman?) through refining definitions.  Of course the GPL
| is not a EULA and it only requires acceptance when you distribute the
| work or derivative works, but that only covers some cases.

The GPLv3 defines a modified work as strictly matching any
adaptation that requires copyright permission.  So, I don't
think there is a re-definition there.  What the GPLv3 does do
is set very broad terms (far beyond the 'modifications') in
exchange for the right to publicly distribute these

In Section 1, it requires the "Corresponding Source" to include
*all* the source code needed to generate, install, and (for an
executable work) run the object code and to modify the work --
excepting system libraries or general purpose tools or
generally available free programs.

So, for my example, I believe the "Corresponding Source" would
absolutely include the Multi-State Payroll and Asset Depreciation 
code that I'm trying to hide behind a web service.  Since
without this code, I'm not able to run the logic in the hooks
(screen buttons let's say).

In Section 5, the GPLv3 clarifies this intent even more, by
requiring that I license "the whole of the work, and all its
parts, regardless how they are packaged".

In my example, I'm attempting to circumvent the GPL via
packaging.  However, it's pretty clear that the whole work
includes the Payroll and Depreciation logic since my hooks
are pretty useless without this complementary logic.

Hence, while the *modifications* to your code are simply hooks,
the conditions for distributing those modifications would go
far beyond what copyright law might consider.  Deservedly, the
GPLv3 uses my hooks (the part covered by copyright law) to
require the release of the exact same source code I am
attempting to shield & pretend aren't part of the derived work.

| Let's try a thought experiment.  Let's say LedgerSMB depended on
| Windows and was essentially using Windows-only API's (and thus linking
| with Windows base libraries).  Now, I recognize that the GPL
| specifically exempts linking to system libraries, but I see no reason
| why system libraries are different from a copyright perspective (i.e.
| this distinction exists solely because RMS wrote it into the license).
| Now, if linking implies derivation, then isn't the software (and by
| extension *all* Windows software) derivative of Windows?  If that's
| the case then doesn't every developer of Windows software need
| Microsoft's permission to distribute such software?  I don't think so.

That's not how the GPLv3 works.  The GPLv3 isn't claiming
your work is a derivation of the base works, it is adding
additional conditions in exchange for the right to 
distribute your modifications.  There is a difference.

Let's pretend that Win32 calls aren't System Libraries.
In this case, let's say I'm making a derived work that
ports your software to work on Windows.  So, while I 
cannot do this directly, I can do it indirectly by
ensuring that Wine supports the Win32 calls I use and
getting my program to work under Wine.  In this case, 
I will have met the conditions in sections 1 and 5 of
the GPL using the code found in Wine.

There is nothing saying that my derived work (that is
generated on Linux under Wine) couldn't be distributed
and executed on the Windows platform.

| > Would you have a problem with the scenario above, perhaps
| > assuming I'm implementing a business feature that you consider
| > to be "core" to the mission of Ledger SMB and you would have
| > hoped would be contributed back to the project?
| Would I personally have a problem with that?  Not as such, 
| though I might think you were doing something unwise. 

Your arguments correspond to ones use by a permissive license,
which work well when your users care about which version they
are using and competitors are not particularly well financed.  
Perhaps you should be licensing your software under BSD or MIT?

| Keep in mind though, I don't think any of the developers on the
| LedgerSMB project are hostile to more permissive licenses.

Exactly.  I'm also not in disagreement with this approach; it
just isn't always the best option for a given business entity.



More information about the License-discuss mailing list