sparkfun / SparkFun_SerLCD_Arduino_Library

A library to seamlessly control the SparkFun SerLCD over I2C, SPI, and Serial.
MIT License
23 stars 10 forks source link

License Issue - License canot be public domain or MIT #10

Closed bperrybap closed 3 years ago

bperrybap commented 3 years ago

This is really a duplicate of the issue filed in the upstream repository here: https://github.com/fourstix/QwiicSerLCD/issues/27

I filed it again here since this repository is being used for the Arduino IDE library manager.

The high level summary is that this code was derived from LGPL 2.1 sources LGPL 2.1+ does not allow re-licensing derivative code with a different license with substantially different terms such as public domain or MIT

Below is the duplicate of the issue filed on the upstream repository


While the licensing of LiquidCrystal (or bundled Arduino libraries in general) was not obvious prior to 2015, things got much clearer in 2015 to more clearly state the current and past license for the LiquidCrystal library going back to 2006 was/is LGPL 2.1

This library code is a derivative of LiquidCrystal and LiquidCrystal_I2C both of which were/are licensed LGPL 2.1+ LGPL 2.1+ does not allow re-licensing derivative code with a different license with substantially different terms such as public domain or MIT The LGPL 2.1+ terms require that this library must also be licensed as LGPL 2.1+ or can use the "+" convert option to convert the license to a later/newer license such as gpl v3

This is from SerLCD.cpp

 * License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
 *
 * This library is based heavily on the LiquidCrystal_I2C library and the sample code provided with
 * the SparkFun Serial OpenLCD display.  The original LiquidCrystal library by David A. Mellis and
 * modified by Limor Fried and the OpenLCD code by Nathan Seidle at SparkFun.
 *
 * The LiquidCrystal_I2C library was based on the work by DFRobot.
 * (That's the only attribution I found in the code I have. If anyone can provide better information,
 * Plese let me know and I'll be happy to give credit where credit is due.)

I have notes on LiquidCrystal and LiquidCrystal_I2C files that go back more than 10 years. Unfortunately, some of the web pages & files are no longer available.

Perhaps they can still be found in Internet wayback machine.

Here is a more complete background history of the LiquidCrystal_I2C code.

The key take away is that the LiquidCrystal_I2C library is not an original work by DFRobot. The DFR code is a derivative of an earlier LiquidCrystal_I2C work by Mario H. which is derivative of LiquidCrystal

The LiquidCrystal_I2C files found out on the net typically have no copyright or licensing notices in them but they are clearly from the same origin given they are all nearly identical to the much older LiquidCrystal_I2C files by Mario H which originally were hosted here https://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C

This web page: http://playground.arduino.cc/Code/LCDi2c mentions Marios LiquidCrystal_I2C library as being available as of 2009-09-14 Mario's web page also claims his library was released in 2009 and in the V1 zip image here: http://www.xs4all.nl/~hmario/arduino/LiquidCrystal_I2C/V1.0/LiquidCrystal_I2C_V1.0.zip all the files but 1 are dated 2009. And in the info sub directory there is a file called "readme.txt" which states:

LiquidCrystal_I2C V1.0

The LiquidCrystal_I2C library is a modified version of the standard LiquidCrystal library as found on the Arduino website.

So given Mario's LiquidCrystal_I2C library predates DFRobot LiquidCrytal_I2C and DFRobot LiquidCrystal_I2C seems to have started with Mario's code, DFRobot LiquidCrystal_I2C would be a derivative of Mario's LiquidCrystal_I2C library and Mario's library is a derivative of the IDE LiquidCrystal library.

While the IDE LiquidCrystal code did not contain copyright notices or license information in the LiquidCrystal source files themselves, at the point in time when LiquidCrystal_I2C was created, the IDE LiquidCrystal code was licensed as LGPL 2.1 as indicated in the license.txt file in the root directory of the arduino.cc IDE repository which was committed October 11, 2007 and has not changed since. It can be seen here: https://github.com/arduino/Arduino/blob/master/license.txt license.txt was a catchall license for all Arduino core files and libraries provided by the IDE. It contains a small note:

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

next, the gnu lesser general public license that covers the arduino core
and libraries.

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

What is below that tiny comment in the readme file is a LGPL 2.1 license agreement. So it seems that the intent was that the LiquidCrystal library was released as LGPL 2.1

In 2015 the IDE LiquidCrystal source files were updated to contain a copyright notice and license within the files.

Copyright (C) 2006-2008 Hans-Christoph Steiner. All rights reserved. Copyright (c) 2010 Arduino LLC. All right reserved.

[ with a LGPL 2.1+ notice ]

To make it clear that the license for the LiquidCrystal library originally was and still is LGPL 2.1 @bperrybap New Video support! Upload MP4 and MOV file types. Attach files by dragging & dropping, selecting or pasting them.

nseidle commented 3 years ago

Duplicate of this issue.

bperrybap commented 3 years ago

While it is a duplicate, it is an upstream issue, and there is no guarantee that an upstream issue once fixed will be pulled in. IMO, since this is still an issue in this repository, it needs to remain open until is actually fixed particularly in this case since this repository is being used by the Arduino IDE library manager.

It is important to correct the licensing of the library.

Will you accept a PR that corrects the license file and the code to indicate that the code is licensed LGPL 2.1 ?