I want to use a GPL v2 licensed library(esper) for commercially distributed non-GPL softwares but I need to make sure non-GPL software not violate GPL license.

Can I use this library indirectly using a wrapper service(can be a windows service, web service, rest api etc.) ? This wrapper service will provide a generic interface to utialize this library and will be licensed with GPL. Any commercial software can communicate with this service using its plugins.

Lets explain through the figure below.

enter image description here

alternative image link : https://ibb.co/nRjxr7

  • E is GPL licensed library that is I want to use. It is not modified in any way.
  • C is my GPL licensed service that using E and running independently of A/B . Any client software can use it.
  • A and B are my commercial web apps that will use C over adaptors. A and B can work without C. So there is not strong dependency for C. A, B and C are not running in the same process. They can work even on different machines.
  • Adaptor A/B will call C over tcp/http.
  • C service will provide generic operation interfaces. Adaptors will use the data contracts that provided by C. So, Adaptors needs to know what data models are supported on C operations

Is this scenario appropriate? Is there any proper way to achive my problem ?

How should I distrubute Adaptor A/B ? Are they need to be GPL licensed ( A/B distrubuted with an .exe file to installation without containing adaptors)

Lastly, what is the way of I distributing C and mentioning in my commercial applications to tell users to install it and integrate with other applications. (I can specify with a description that explains how to utilize C service for the A/B users. Also I can make C program source and installation file available on my server for download.)

  • What is the mechanism for these calls? are A, B and C running in the same process? Is E modified in any way? – Philippe Ombredanne Jan 3 '18 at 9:36
  • 1
    The OP notes above that C is running independently of A/B, but I agree that your question is an excellent one! – MadHatter Jan 3 '18 at 9:43
  • @PhilippeOmbredanne I edited post. – agit Jan 3 '18 at 10:05
  • And I edited my answer in the light of your edit. – MadHatter Jan 3 '18 at 10:51

IANAL/IANYL. That said, the devil, as usual, is in the details, and you don't give us much information about how these adaptors work.

If, for example, the B-C adapter is a piece of software that works by linking against libraries that form part of B, and also against libraries that form part of C, then you've created a single, large, derivative work of both B and C, and you have a big licensing problem on your hands.

If, instead, the adapter uses userspace as a mediating tool (eg, B puts files on the file system, then the adapter moves them into C's bit of filespace and calls C through fork-and-exec to deal with them, or C runs as a daemon that periodically checks whether there are new files to deal with), then B and C are separate works for copyright purposes, and you don't have a problem.

The one about your obligations with respect to C is pretty well covered elsewhere, but in brief, if you tell your users that they must download and install it, and you make both source and executable available from the same place on your website, that would suffice. If you distribute C directly to them, your obligations with respect to source provision are a bit more extensive, but not much so.

Edit: you have clarified that both A and B adapters will interact with C via HTTP. Provided they do this using RFC-standard HTTP operations (POST, GET, etc.), that seems likely to me to be at arm's-length enough to make them separate for copyright purposes; certainly my web browser doesn't need to know about the GPL status of the web servers with which it interacts. If they're thus separated, then A and B adapters can be proprietary software which you distribute along with A and B.

I'm still a bit nervous about "Adaptors will use the data contracts that provided by C. So, Adaptors needs to know what data models are supported on C operations", because I don't understand what you mean.

Edit 2: given your subsequent clarification, it depends on how knowledge of the structures is acquired. Generally, if there is a separate written specification, and you implement this de novo in your code, all is likely to be fine (there has been at least one attempt to claim that an API can be copyrighted, but it wasn't hugely successful). If there is no separate written specification, and you read (in your example's) Amazon's library code to work out what the API is, or worse still, use their code as a basis for your own, there is a problem.

I note that you have yourself written C, wrapping it around the pre-existing GPL library E. That puts you in a position to write that specification, but not to implement it. Clean-room practice is that person A reads the "contaminated" code and writes the functional spec, and a person B implements that spec, without any further reference to person A. You cannot be both of those people.

Note that this whole analysis assumes that linking creates derivative works, and as we note elsewhere, this is not yet a certainty; arguments can be made both for and against the issue. It is generally accepted, however, that interaction-through-userspace keeps two programs far enough apart that neither is entangled by the other from a copyright point of view.

  • 2
    There is another twist here is that esper is a provided by a commercial company under a dual license: GPL or commercial. There is therefore a strong financial incentive from the authors to enforce strictly the GPL and this means that any grey area subject to interpretation would likely lead to conflicts of sorts. – Philippe Ombredanne Jan 3 '18 at 9:39
  • Regarding your confusion, I can give an example; If you want to write a client software that will use Orders API of Amazon, you need to know the structure of the data accepted by the API requests and/or the structure of the data returned by the API requests. So, there is an agreement on data structures between Adapters and C service. I need to know that this agreement will not be affected by the GPL license of C. – agit Jan 3 '18 at 11:04
  • See my further edit above. – MadHatter Jan 3 '18 at 11:27
  • Ok. I think, I can also provide documentation that show how to use C operations. So other developers can develop new adapters depending on their needs using this documentation . – agit Jan 3 '18 at 11:55
  • That will certainly help. Just remember that you must not write A or B. – MadHatter Jan 3 '18 at 13:31

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.