I’m definitely no expert in GPL litigation, but that brings up some conundrums and I have the same assumptions as Sineos.
The GCode Macro function can only use the modules and functions built into Klipper which is covered by GPL.
They might use it in a fancy way, but they’re still just using Klipper. If they add modules, that’s covered under the GPL license.
In fact, I think the GPL license would consider this an “Aggregate” program and covered under the same GPL license because it’s tied to the Klipper executable.
Edit: Not aggregate based on the wording, it would be considered Klipper itself. But again, I’m not a lawyer but I feel like someone would have a hell of a time explaining how their macro that is in Klipper, using Klipper, bundled with Klipper isn’t covered by the Klipper license.
What is the difference between an “aggregate” and other kinds of “modified versions”? (#MereAggregation)
An “aggregate” consists of a number of separate programs, distributed together on the same CD-ROM or other media. The GPL permits you to create and distribute an aggregate, even when the licenses of the other software are nonfree or GPL-incompatible. The only condition is that you cannot release the aggregate under a license that prohibits users from exercising rights that each program’s individual license would grant them.
Where’s the line between two separate programs, and one program with two parts? This is a legal question, which ultimately judges will decide. We believe that a proper criterion depends both on the mechanism of communication (exec, pipes, rpc, function calls within a shared address space, etc.) and the semantics of the communication (what kinds of information are interchanged).
If the modules are included in the same executable file, they are definitely combined in one program. If modules are designed to run linked together in a shared address space, that almost surely means combining them into one program.
By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.