mathertel / LiquidCrystal_PCF8574

A library for driving LiquidCrystal displays (LCD) by using the I2C bus and an PCF8574 I2C adapter.
https://www.mathertel.de/Arduino/LiquidCrystal_PCF8574.aspx
BSD 3-Clause "New" or "Revised" License
131 stars 53 forks source link

Individual files can't be changed from LGPL to dual license with BSD #4

Closed bperrybap closed 5 years ago

bperrybap commented 6 years ago

Since you don't fully own the copyrights to the original work there are licensing restrictions on the files and the combined work.

LGPL does allow the linking of LGPL files with more files that use lax licenses such as BSD; however, there are some incompatibilities so you can't use a dual license of LGPL and BSD on a single file.

i.e. LGPL is not as permissive as BSD and you can't convert LGPL licensed s/w to BSD even if you modify it into a derivative work. Read section 2 of the LGPL license specifically 2c i.e. the code started as LGPL 2.1+ , any modifications and updates to that code must be licensed LGPL 2.1+

Also, when you link BSD and LGPL licensed works together, the combined work inherits the requirements of LGPL so the more relaxed licensing of BSD is lost.

i.e. if you have a work that contains separate modules some BSD and some LGPL any work that uses them both would be subject to LGPL.

This library started with LGPL 2.1+ code so it isn't possible to modify the code to make it BSD.

bperrybap commented 6 years ago

There is still a licensing issue. You can't license this library as BSD. It was derived from a LGPL project and can never be converted to BSD. This includes all the updates/enhancements you make to it.

The LICENSE file and LiquidCrystal_PCF8574.h need to updated to indicate the license for the library/project is LGPL 2.1+ or, at your option, any newer version of LGPL/GPL.

bperrybap commented 5 years ago

The licensing is still an issue. You have violated the original code's copyright and the LGPL license it was released under.

pnndra commented 5 years ago

Hi @mathertel, as @bperrybap suggested, being a derivative of a LGPL code base done from Arduino you are not entitled to enforce a different licensing, not even on a piece of a file. I kindly urge you to modify the licensing or we'll be forced to delist your library and take further actions to take down this repository. thank you in advance for your prompt reply.

mathertel commented 5 years ago

Hi,

LGPL is problematic for many of us.

I just take into account to remove all LGPL lines and stay to the more open BSD license completely.

Give me 2-3 days to look into this.

/Matthias Hertel/

Von: Dario Pennisi Gesendet: Montag, 3. Juni, 14:16 Betreff: Re: [mathertel/LiquidCrystal_PCF8574] Individual files can't be changed from LGPL to dual license with BSD (#4) An: mathertel/LiquidCrystal_PCF8574 Cc: Matthias Hertel, Mention

Hi @mathertelhttps://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmathertel&data=02%7C01%7C%7C48b5faaef07c4f059b3608d6e81d4fff%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951609922651262&sdata=xBEOG12R7GYce%2FTOcb%2FQArql57YLeX%2BBi5hUqN2er7w%3D&reserved=0, as @bperrybaphttps://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fbperrybap&data=02%7C01%7C%7C48b5faaef07c4f059b3608d6e81d4fff%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951609922661267&sdata=z6B71JVq%2F6%2FeMSyiYV%2FJn8sRvk47VOKiJb49ntarWcE%3D&reserved=0 suggested, being a derivative of a LGPL code base done from Arduino you are not entitled to enforce a different licensing, not even on a piece of a file. I kindly urge you to modify the licensing or we'll be forced to delist your library and take further actions to take down this repository. thank you in advance for your prompt reply. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmathertel%2FLiquidCrystal_PCF8574%2Fissues%2F4%3Femail_source%3Dnotifications%26email_token%3DAAIJTF43OHUEFBOTHHSAOJ3PYUDR5A5CNFSM4EEN6QQKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWZGXKA%23issuecomment-498232232&data=02%7C01%7C%7C48b5faaef07c4f059b3608d6e81d4fff%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951609922671272&sdata=qoKAXL6IuzM4PVfKF8BDL2cB%2BsRHIH2dwWvgMnrK4ls%3D&reserved=0, or mute the threadhttps://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAAIJTFZ5DE42ERAURP4ZTKLPYUDR5ANCNFSM4EEN6QQA&data=02%7C01%7C%7C48b5faaef07c4f059b3608d6e81d4fff%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951609922681283&sdata=4CFps0bZfyPOEzA3888XJ04zuL6M4UdSu0jfdJXEHac%3D&reserved=0.

pnndra commented 5 years ago

hi @mathertel, before you refactor Arduino code to look less like the original one (which honestly would not really make sense), i would like you to consider the following: 1) Arduino is releasing libraries with LGPL license in order to keep the ecosystem open. if you do something with Arduino you should share it with the same terms. 2) if your concern is on using your library on a commercial product for which you don't want to release code you have to know that Arduino is also proposing dual licensing. this means that if you want to keep your project closed source we can license you the file(s) with a different agreement. this would pay back our efforts in developing the ecosystem and allow us to develop more open source stuff everyone else will benefit from.

basically, long story short, even if you refactor the code, you should still consider where it comes from and why it was licensed that way; failure to restore original license will result in delisting of your library.

mathertel commented 5 years ago

Hi,

thanks for the explanation.

I definitively do open source so your thoughts about my commercial closed source interests do not apply here.

I do not want any restrictions what people can do with it. I just want to license as is so nobody can demand any recourse.

LGPL is more restrictive than BSD.

I know from my professional background from the nodejs environment that big companies are not allowed to use GPL or LGPL code for intern and external projects because of consequences that apply and cannot be fulfilled.

I don't care regarding my own work but people that use my library may.

My plan:

I do not want to reformat or do some refactoring that sounds like cheating.

I will take off all code that comes from the Arduino library. That is essentially the interface definition that I like to keep compatible. I will remove this and any other code and just keep the i2c and pcf specific code that is already isolated well in the source. This is the core of what is missing in the Original Library.

Then I will apply the interface given from the Arduino reference using the cc. That license is not restrictive at all I use it for my blogs and my web site as well. I will mention this in the sources.

If you like I can contribute this as well to the Arduino community as I do today to offer a robust library implementation to all boards that use I2c bus for io.

I hope you can see that this approach will keep the library available in the community.

/Matthias Hertel/

Von: Dario Pennisi Gesendet: Montag, 3. Juni, 17:48 Betreff: Re: [mathertel/LiquidCrystal_PCF8574] Individual files can't be changed from LGPL to dual license with BSD (#4) An: mathertel/LiquidCrystal_PCF8574 Cc: Matthias Hertel, Mention

hi @mathertelhttps://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmathertel&data=02%7C01%7C%7Caf0a82a820f5469a5d5808d6e83af94d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951737313895579&sdata=aO11wdJB4n8%2FtzeFkZQb%2FLlYGs9ydcZS3YnRrXwxWt4%3D&reserved=0, before you refactor Arduino code to look less like the original one (which honestly would not really make sense), i would like you to consider the following: Arduino is releasing libraries with LGPL license in order to keep the ecosystem open. if you do something with Arduino you should share it with the same terms.if your concern is on using your library on a commercial product for which you don't want to release code you have to know that Arduino is also proposing dual licensing. this means that if you want to keep your project closed source we can license you the file(s) with a different agreement. this would pay back our efforts in developing the ecosystem and allow us to develop more open source stuff everyone else will benefit from. basically, long story short, even if you refactor the code, you should still consider where it comes from and why it was licensed that way; failure to restore original license will result in delisting of your library. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmathertel%2FLiquidCrystal_PCF8574%2Fissues%2F4%3Femail_source%3Dnotifications%26email_token%3DAAIJTF5IISX64WEV3AOI27LPYU4ODA5CNFSM4EEN6QQKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWZ2YWQ%23issuecomment-498314330&data=02%7C01%7C%7Caf0a82a820f5469a5d5808d6e83af94d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951737313915595&sdata=%2BQEsAIsPn5AoanKm94n8EoHVwTyd4IpxOD2qkh5mLIw%3D&reserved=0, or mute the threadhttps://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAAIJTF3XZQVXJG4GWM5TKTDPYU4ODANCNFSM4EEN6QQA&data=02%7C01%7C%7Caf0a82a820f5469a5d5808d6e83af94d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636951737313925600&sdata=DAUAEoiPqRbHhS6stYD7RSg8Pg8i%2Fv%2FzN9hjaxhrgDw%3D&reserved=0.

bperrybap commented 5 years ago

Hi, LGPL is problematic for many of us. I just take into account to remove all LGPL lines and stay to the more open BSD license completely. Give me 2-3 days to look into this.

I would say the first thing you need to do, would be to immediately correct the license on the current code to be LGPL and re-release it ASAP to get back into compliance and to get the correct license into the library code being provided by the Arduino library manager. Then figure out what you may want to do for other libraries.

LGPL licensing is not any less open than the BSD licensing. From a source code perspective, both are fully open source. BSD is definitely more liberal in terms of compatibility with certain closed source use cases and also offers authors the ability to not share modifications or improvements made to the original BSD licensed work. If anything, BSD, given its less restrictive closed source compatibility, is actually less open which is why commercial entities like and prefer it over LGPL and particularly GPL.

While I understand your desire to want a more liberal less restrictive license, there is no way to do what you wanting and trying to do for this library. You started with LGPL code and no matter how much you change and modify it, it is and will always be a derivative subject to the original licensing terms and must remain LGPL 2.0 or moved to a newer LGPL or GPL license. And the current code, even though it says BSD, is actually licensed LGPL since it can not be changed to BSD.

Bottom line is that if LGPL really is problematic for you, then you probably should not be using any gnu build tools much less Arduino.

Keep in mind that a fully linked work, like an Arduino firmware image, must be compatible with all the licenses of the individual components and the overall linked work will be subject to the most restrictive license. i.e. while it is possible to create a work that uses both BSD and LGPL licensed sources, the linked together work will still be subject to the LGPL licensing terms for the LGPL sources.

Arduino libraries like the core libraries, which are necessary when creating an Arduino f/w image, are licensed as LGPL. The LGPL license mandates that a user be able to update/modify/change the LGPL code. (see LGPL 2.0 license section 6a). Currently, the Arduino way of handling that is to use the IDE to re-compile all the source code and link a new image. While the license of the BSD component may allow certain use cases, those use cases might not be allowed in the final work once it is linked with code using other licensing terms and/or the build tools being used.

So while you may want to offer a BSD license for this library (which you can't given the code you started with), even if you could, it would effectively loose certain capabilities once it is linked with other LGPL modules and used to build an Arduino f/w image. i.e. there is currently no way to create a completely closed source product/project using Arduino build tools since LGPL 2.0 mandates that users have the ability to update/modify/change any LGPL 2.0 code in the f/w image and currently the only way to do that is to recompile and re-link everything. More recent IDEs do offer the capability to use a pre-compiled library, but it appears that is for an entire library not individual components within a library so I don't believe at this time that there is a way to fully satisfy LGPL 2.0 section 6a for closed source products when mixed licenses are used for a single library.

Given that the only real advantage of using BSD over LGPL is the ability to create a fully closed source product, and that can't be done with this library, and you are intending to provide the library code as open source on github, it seems strange to even pursue this.

And even if you were to completely re-write it all from scratch and license it as BSD, any Arduino project (f/w image) that uses it would still be subject to LGPL licensing terms for the other LGPL code used so it would still not offer users of the BSD licensed library the ability to create a completely closed source product without having to provide the user the ability to rebuild the f/w image with updated LGPL sources. For closed source products/projects, Section 6a is often difficult and a pain to comply with, and with f/w it is even more difficult since the user must have a way to modify the sources, rebuild the image, and update the device with the rebuilt f/w. This is why commercial entities try very hard avoid LGPL and GPL code.

bperrybap commented 5 years ago

Then I will apply the interface given from the Arduino reference using the cc. That license is not restrictive at all I use it for my blogs and my web site as well. I will mention this in the sources

by cc are you meaning Creative Commons? IMO, Creative commons is not a license that is suitable for library source code that is linked with other code. CC licensing was originally intended for standalone works like published documentation, web pages, etc... I have seen people use CC BY-SA for source code, including Arduino libraries, but that license is not compatible with anything other than itself. IMO, it doesn't make sense since it is not compatible with LGPL or GPL unless you go to CC BY-SA 4.0 which has a one time convert clause that allows the user to convert the license to GPL 3.0 whenever it is used with or linked with LGPL or GPL sources. After the convert, it can never be converted back, so once converted, any future updates made to the code cannot go back as CC BY-SA 4.0 since the work was converted to GPL 3.0 licensing.

It effectively means that the author is releasing the code as GPL 3.0 since anybody using the code must use the convert clause to convert to GPL 3.0 to be able to legally link it in with the other LGPL and potentially GPL code being used in the final linked image. (which will always be the case when using gnu compiler tools and Arduino) This is more restrictive than LGPL 2.0 as GPL 3.0 brings on some additional restrictions than LGPL 2.0

IMO, of all the licenses for open source code, the CC licensing is one that should really be avoided, especially since there are several other alternatives of varying degrees of strictness that don't have the issue of the CC licenses.

mathertel commented 5 years ago

re-implementation done.

Not based on prior work from LiquidChrystal.

bperrybap commented 5 years ago

Keep in mind that even though the library is now licensed as BSD, the users of this library will still have to conform to all the LGPL requirements for the other gnu and Arduino LGPL modules that are linked into the f/w image, most notably 6a which requires the ability for a user to be able update LGPL code in the f/w image.

eddyp commented 4 years ago

Keep in mind that even though the library is now licensed as BSD, the users of this library will still have to conform to all the LGPL requirements for the other gnu and Arduino LGPL modules that are linked into the f/w image

Yes, but that is the problem of those users, iff they use other LGPL code. Correct?

bperrybap commented 4 years ago

Yes, but that is the problem of those users, iff they use other LGPL code. Correct?

Correct. But there is no way to use this library without using and linking against any other LGPL code. This library depends on other LGPL code (Arduino code) to work. The Arduino Print class to name just one. And then there is the Arduino core code, and various AVR gcc runtime library code and AVR libC code that ends up being used/link-in when building any/every Arduino sketch as well.

And contrary what the arduino.cc developers have said in the past about doing dual licensing, that really is not possible at this point in time as all sketches that are built for Arduino will end up using and linking against some amount of LGPL code and there is no way to provide a mechanism for users to be able to update the LGPL open source code portions of the f/w image, as required by LGPL 6a, without providing the source code to everything. In other words, currently there is no way to create a closed source Arduino based project/product and so releasing an Arduino library under BSD licensing terms, doesn't enable creating a project that uses it to be a closed source product/project.