Skip to content

Instantly share code, notes, and snippets.

@kn9ts
Last active March 5, 2025 14:14
Show Gist options
  • Save kn9ts/cbe95340d29fc1aaeaa5dd5c059d2e60 to your computer and use it in GitHub Desktop.
Save kn9ts/cbe95340d29fc1aaeaa5dd5c059d2e60 to your computer and use it in GitHub Desktop.
GPLv3 explained

GPL3 LICENSE SYNOPSIS

TL;DR* Here's what the license entails:

1. Anyone can copy, modify and distribute this software.
2. You have to include the license and copyright notice with each and every distribution.
3. You can use this software privately.
4. You can use this software for commercial purposes.
5. If you dare build your business solely from this code, you risk open-sourcing the whole code base.
6. If you modify it, you have to indicate changes made to the code.
7. Any modifications of this code base MUST be distributed with the same license, GPLv3.
8. This software is provided without warranty.
9. The software author or license can not be held liable for any damages inflicted by the software.

More information on about the LICENSE can be found here

@MasterKia
Copy link

@RogerInHawaii

https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation (my emphasis):

... 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.

So it seems you actually need to provide the source code for your firmware to the users under the GPL license.

@RogerInHawaii
Copy link

@MasterKia , I don't know how one defines the phrase "intimate enough". In my case the only communication between the Firmware and the program running on the additional microprocessor is commands from the Firmware to the additional microprocessor telling it to perform some operation (e.g. turning a light on having it drive a stepper motor), and for the additional microprocessor to respond with a "DONE" or "FAILED" message back to the Firmware. No "complex data structures" are communicated.

@zaphod77
Copy link

zaphod77 commented Dec 28, 2024

I agree here. I don't believe that statement would apply.

Functionality is added to the open source firmware that sends instructions to the closed source microprocessor. Those instructions are not obfuscated, and no other communication is done. It's essentially one open source program giving a closed source ones simple command line switches, and reading the return code.

This seems like a legitimate aggregate, based on the description.

Now if there were secret undocumented actions caused by activating commands in a specific sequence, then things would be a bit more questionable. If there is data encoded into the sequence of commands that the coprocessor detects (and affects it's ability to succeed or fail), then that would be abuse, unless the required sequences themselves were documented in the open source side. If you have undocumented magic sequences, then you are concealing some of the source.

From the way it's described, there is no issue.

@Unknownuserfrommars
Copy link

I have a question (just to be sure)
There's a repo A, contains A.html (for example), and repo A is listed under GPL v3
My repo B, contains B.html, which used some of the styling and framework from A.html
Do i:

  1. have to say explicitly (like in readme.md): This project includes code derived from repo A, which is listed under GPL v3, A copy of the GPL v3 license is included in the license file.
  2. Can i change my license of Repo B to other like MIT / whatever? Or do i MUST use gpl v3?

@zaphod77
Copy link

zaphod77 commented Mar 4, 2025

If you create a derivative of a GPL work, that derivative must also be GPL.

You can add additional compatible licenses, but all of them have to be obeyed at the same time. Only an original work may be dual licensed, and allow the person making the derivative to pick which one.

Licenses are compatible if requirements don't conflict with restrictions.

If one license says "you can't" and the other one says "you must" for the same action, then the two are not compatible. "You may" and "you must" are compatible (this means you must), and "you may" and "you can't" are compatible (which means you can't).

The only way you can remove the GPL is go straight to the copyright holder of the original work, and request source under a different license.

@Unknownuserfrommars
Copy link

Ah understand! Thanks @zaphod77

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment