kliment / Sprinter

Firmware for RepRap printers and similar devices
432 stars 329 forks source link

dual-license file fastio.h: an alternative license #218

Closed DerAndere1 closed 3 years ago

DerAndere1 commented 3 years ago

I would like to use the content of file fastio.h for teaching, but I do not like to teach methods that are only usable in GPL licensed code. Are you still in contact with the original author Triffid_Hunter and could you allow me to redistribute the file fastio.h (and only that one file) under the Apache-2.0 license? The Apache-2.0 license would allow reuse of that code in closed-source software but still requires attribution in all forms of distribution (binary or source code) . I know that this topic is highly debatend amongst the free/open source community, so thanks for your consideration.

kliment commented 3 years ago

@triffid what do you say?

DerAndere1 commented 3 years ago

I can think of the following procedure. If you have suggestions, I am open for feedback: 1) I plan to add a NOTICE file to my repository with the following content:

This work contains the software fastio (fastio.h)
by Triffid_Hunter and Kliment.

fastio (https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h)
Copyright 2011 Kliment
Copyright 2011 Triffid_Hunter
This code contibuted by Triffid_Hunter and modified by Kliment

2) I plan to add a LICENSE file to my repository that contains the following text:

===============================================================================
For fastio:

fastio.h

fastio (https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h) is 
Copyright 2011 Kliment
Copyright 2011 Triffid_Hunter 
Licensed under the GNU GPL v3 or (at the user's discretion) any later version OR (at the user's discretion) licensed under 
the Apache License, Version 2.0.
For details, see file LICENSES/GPL-3.0.txt or file LICENSES/Apache-2.0.txt, respectively.

===============================================================================

3) I plan to copy the contents of file fastio.h from the last commit that has only the two of you as contributors ( https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h )

4) I plan to later add the following lines to my copy of fastio.h without removing the existing attribution statement:

/* SPDX-License-Identifier: GPL-3.0-or-later OR Apache-2.0 
 * 
 * uno_fastio
 * Copyright 2021 ITlernpfad
 * 
 * This work is based on fastio  
 * by Triffid_Hunter and Kliment, with modifications by ITlernpfad
 * 
 * fastio (https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h)
 * Copyright 2011 Kliment
 * Copyright 2011 Triffid_Hunter
 */
/*
    This code contibuted by Triffid_Hunter and modified by Kliment
    why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
*/
triffid commented 3 years ago

How about LGPL?

That allows linking into proprietary/closed code without forcing that code to be opened (which you want) while retaining the requirement that if you improve fastio itself, you must share (which we want).

LGPL has a lot of verbiage around static/dynamic linking, but I think it should apply similarly to header macros as well..?

DerAndere1 commented 3 years ago

yes, LGPL is also what the official Arduino core uses and the terms of LGPL are compatible with my usecase. I read somewhere that LGPL-2.1-licensed code cannot contain code licensed under Apache-2.0 or 2-clause-BSD. Thus, to allow future contributions of Apache-2.0-licensed code, I would opt for LGPL-3.0-or-later. If you agree, please write an me explicit permission here or elswere, something like "I agree that the file fastio.h from https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h is dual-licensed under the GNU GPL v3 or (at the user's discretion) any later version OR under the terms of the LGPL-3.0-or-later (https://spdx.org/licenses/LGPL-3.0-or-later) license. "

Once both of you wrote that permission, I could then release a fastio library under the LGPL-3.0-or-later.

kliment commented 3 years ago

I agree that the file fastio.h from https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h may be dual-licensed under the GNU GPL v3 or (at the user's discretion) any later version OR under the terms of the LGPL-3.0-or-later (https://spdx.org/licenses/LGPL-3.0-or-later) license. :)

triffid commented 3 years ago

Whereas I am the original author and copyright holder of the contents of https://github.com/triffid/ATmega-Skeleton/blob/496d58f357d9509550a77e0696f9b77f8feb7e9e/mendel/arduino.h, and

Whereas https://github.com/triffid/ATmega-Skeleton/blob/496d58f357d9509550a77e0696f9b77f8feb7e9e/mendel/arduino.h predates the derivative work posted at https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h by ~18 months ± a few days, and

Whereas all subsequent author(s) of the derivative work https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h (ie @kliment) agree to the licensing change discussed above,

I declare that https://github.com/triffid/ATmega-Skeleton/blob/496d58f357d9509550a77e0696f9b77f8feb7e9e/mendel/arduino.h (and by extension https://github.com/kliment/Sprinter/blob/b7b099bb0e0a8797b71abdf50e3da6880a86d967/Sprinter/fastio.h) is hereby available to be used under the terms of the LGPL-3.0-or-later (https://spdx.org/licenses/LGPL-3.0-or-later) license.


Thank you for caring about open source licensing and opening this discussion rather than simply assuming that the code is public domain!

We should have been more sensible about this from the start I guess..

DerAndere1 commented 3 years ago

Much appreciated. I will close this constructive discussion as resolved. The new library can be found under the name uno_fastio at gitlab.com. Link: https://gitlab.com/itlernpfad_public/uno_fastio

triffid commented 3 years ago

Curious, howcome you wanted to license this file, but then don't use the READ/WRITE/etc macros in your examples?

kliment commented 3 years ago

I strongly suspect the examples can change now that that file is there :)

DerAndere1 commented 3 years ago

Yes exactly. The example was written live in class and pupils had to be introduced to macros on the fly. So I teach them one layer of abstraction after the other. ;)

triffid commented 3 years ago

Fun, so you're gonna boggle their brains with these string-wrangling macros next?