I'm designing a web service where one part of it will be licensed as AGPLv3 (Affero GPLv3) because of a dependency. But I want to make the other part of that system proprietary. The users will be able to interact with the whole system publicly and use both parts. The two subsystems/components will also interact with each-other.

So I'd publish the original-derived part's source code but I'd like to have the other part as a proprietary code.

The license says that OS and library dependencies are fine to use if interface+implementation is opensource but it doesn't say exactly if I can use network/lib dependencies without declaring their source code.

So is it possible to have a documented/generated/extracted interface which describes system interaction which I'd then use as a part of my system? Which would be closed source.

Basically the question boils down to "can I use Liskov substitution" without a need to opensource both implementations of the interface?

I'd like to host it as a service. Original-derived code would be opensourced but there would be part of the code that wouldn't.

So in short:

  • Can I depend on closed-source network dependency from opensource part?
  • Can I depend on closed-source non-system library from opensource part?
  • Is it enough to provide a stub/toy implementation of the features if I create an interface to manage my new feature?
  • The crucial part to any question will be how the different parts interact with each other and how separate and independent they are – planetmaker Feb 7 at 0:08
  • They would be interconnected. The original project is a web platform. It can be designed to work inside of the same binary but I want to research whether it's usable from the licensing perspective. I'd like the part with the closed source to invoke at least one code part of the AGPL'd part. And I'd like that AGPL'd part would call the additional logic of mine. Which of these are compatible with license? – vvwccgz4lh Feb 7 at 7:27

Firstly, let's dispose of the "System Library" exception. AGPLv3 s1 defines a System Library as

anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component ... A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs ...

If the work you're trying to define thus is one of the works you're writing, then it's not "a major essential component of the OS", and you can't use this exception to exempt part of your work from the AGPL's requirements.

The question of whether you can design your project as two separate works - one AGPL (in this case, by necessity) and the other proprietary (in this case, by choice) - which function together to deliver a service is addressed in the GPL FAQ:

I'd like to incorporate GPL-covered software in my proprietary system. I have no permission to use that software except what the GPL gives me. Can I do this?

You cannot incorporate GPL-covered software in a proprietary system ... However, in many cases you can distribute the GPL-covered software alongside your proprietary system. To do this validly, you must make sure that the free and nonfree programs communicate at arms length, that they are not combined in a way that would make them effectively a single program.

Arm's-length communication is not well-defined, but is generally accepted to include interaction via fork-and-exec, with no complex code-specific structure passed between them. So if you can design your project to allow for this kind of distant interaction between the AGPL portion and the proprietary portion, it is permissible to do this, and it will avoid your needing to open up the proprietary code. If, however, one part calls the other as a library service, or complex code-specific structure is passed between them over a network (by way of examples), then they are not separate works, and the AGPL requirement will extend throughout.

  • So do you say "yes" to my third question? I.e. If I modify the library and create a stub/toy implementation which I opensource. Then later I implement this interface in a way that I need and serve it to the users without disclosing the source. Does this work? – vvwccgz4lh Feb 7 at 14:43
  • I'm saying it depends on the nature of communication across the divide. You haven't given us a deep technical description of that, so we can't be more helpful. The mere act of inserting a shim is almost never successful in evading GPL requirements; generally speaking, things that look like attempts to evade the GPL will be seen as such by, amongst others, courts. – MadHatter Feb 7 at 15:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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