I understand the rules of the GPL stating that if I distribute any software using GPL code, then that code must be licensed under the GPL.
However, I'm wondering what the rules are in this case: I am creating a service where I will be selling and distributing client side software.
The client side software has absolutely no GPL code in it. It is 100% my own code.
However, the client software will be connecting to my server, which internally uses GPL code.
I am not distributing my server side software; the server side software will live on a dedicated server that I alone control, but the client side software will not work without connecting to said server.
Does this count as one software? If I were to do this, would I be required to license my client side source code as GPL? Or, can I sell the client side software without releasing its source code?
Best Answer
This is not a clear-cut issue. Consider two extreme ends of the spectrum:
Your proprietary client software is an HTTP client and it renders HTML responses. It can work with any HTTP server. The HTTP server that you use for your service happens to use GPL components.
You have a program that uses GPL-licensed components. You pick an arbitrary point in that program's operation and break the program into two programs. The two programs communicate over a totally superfluous network hop. You put all the GPL-licensed components in the first program and license under the GPL, and you license the other program under a GPL-incompatible license.
The first case is clearly okay. The second case is clearly not okay. You haven't given much information about your particular case, and even if you did, only a court ruling could decide definitively whether you're in the right.
The GPL FAQ has this to say on interoperable, separately-licensed programs:
You must decide whether you think your client are server meet the standard of "two parts of the same program" (and therefore must each be licensed under the GPL) or not. The GPL FAQ gives some further explanation on this topic on another question:
So, network communication certainly passes the "mechanism of communication" test but it is unclear where your client/server pair falls on the "semantics of communication" test.