Go Down

Topic: LGPL and Arduino in Commercial Products (Read 7972 times) previous topic - next topic

mtomovich

I'm not quite sure what the right thread is for this, so hopefully it's this one.

I'm in the process of moving an arduino prototype into production for my startup. I'd prefer to not have to rewrite all the libraries on a different platform and just stick with arduino. I see that the LGPL covers Arduino stuff, but after digging around on the internet, I can't really get a clear view on what exactly I'd need to release to the public (if anything) to comply with the LGPL license.

To be more specific, I'm not redistributing software or anything, it would just be running on my product. Do I still have to release object files?

This post on Stack Overflow http://stackoverflow.com/questions/1372396/use-lgpl-libraries-in-closed-source-software has given me the best view so far, but in an Arduino specific context, does anyone know how this works?

Thanks!

Robin2

#1
May 15, 2014, 08:59 pm Last Edit: May 15, 2014, 09:01 pm by Robin2 Reason: 1
I think if you make everything public you won't have a problem. Generally that just means that there is somewhere people can go to get it.

It may be more practical to ask yourself is there any part of your software you DON'T want to make public. If there is then you will have to read the fine print of the licences.

You should also ask yourself what damages you might be liable for if your product fails - especially if the failure is due to a bug in some Open Source library you rely on but didn't test exhaustively.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

Coding Badly

I can't really get a clear view on what exactly I'd need to release to the public (if anything) to comply with the LGPL license.


Which indicates that you have not read the actual license...
https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html

Section 4 is quite clear that you have to provide object code or source code for the libraries you use.  My guess is that you can provide a reference to what you used (I don't understand the second paragraph).

Quote
To be more specific, I'm not redistributing software or anything...


Really?  The AVR processor in your product is blank from the factory?  Is such a product very marketable?  If your product really does not include software, why are you concerned about the LGPL?

Quote
Do I still have to release object files?


See Section 4.  For the libraries you use, yes (or source code).

Looks like it to me (see Section 5)...
Quote
However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.


mtomovich

@Robin2
thanks for the response. I guess what I was implying is that I'd prefer to release as little as possible and still comply with LGPL. Your last point is really interesting, I'll keep looking into this thanks.

bperrybap

My understanding is that the overall intent of all the LGPL/GPL licenses is to always give
the end user the ability to update or alter the open source modules.
When everything is open source as required by GPL, then everything is easy as the end user
has all the source and can modify things however he pleases.
With LGPL, it is possible that some of the code for a project/product is not open source.
In that case, the author must provide enough to allow the end user to be able to rebuild
the project/code/image if the end user should desire to modify any of the open source
components.
This is why LGPL requires that you provide objects of all the components, build scripts, etc...
(Or at least access to them, if not actually included in the product)
This allows an end user to modify or update an open source module and rebuild the code/project/product
even without having the source code to the closed source modules.

--- bill

mtomovich

@coding badly

Thanks for the detailed reply. I read this version (3.0) https://www.gnu.org/licenses/lgpl.html, and I apologize for not being able to decipher everything clearly. I'm just asking questions in the only place I know so I can make sure I'm doing the right things. Thanks for the other link, I'll be sure to go through that as best I can.

Quote
My guess is that you can provide a reference to what you used (I don't understand the second paragraph).


Do you mean if I use an open source library, then I can just provide a reference to that library? Based on this answer
Quote
See Section 4.  For the libraries you use, yes (or source code).
I'm still a little hazy on whether or not I need to provide binaries for my 'overall' compiled program that's running on the AVR, or just binaries/references for the open source libraries that I used.

Quote
However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.

I'm not really sure what that means, I'll try reading through the link you provided to see if I can make more sense of it.

BTW, what I meant by
Quote
To be more specific, I'm not redistributing software or anything...

is that I'm not making something like a Gameduino or RedBearLabs shield or something where I'm putting out a library of my own. The embedded code will only be on the AVR. Sorry for the misunderstanding.


mtomovich

bill, that's probably the best explanation I've seen so far, thanks. It sounds like that's kind of hard to comply with though, no? So I'll need a binary of my original program somewhere so people can modify the open source libraries and link to it? I can kind of see how that works with normal C programming, but in the context of arduino, I'm a little confused. I've never really seen a 'binary' or object code to somehow stick in an arduino compiler with some open source libraries available for me to play with.

bperrybap

If everything is open source then it isn't much of an issue, since you can provide them
a place to download all the source code and tell them to use the Arduino IDE to build it.

It is only when creating a closed source project/product that also contains some open source LGPL code
that things can get sticky.

I'm assuming that you have some closed source?

Usually it isn't that bad when using real makefiles since since you have full control over the build process
and can do more a more traditional build process of compiling, archiving, & linking and
can create separate archives/libraries for the closed source that can be used
without having to have the source to the modules inside the archive.

With Arduino, it is a very good question.
I'm not sure how to properly fully comply when using the Arduino IDE because
the IDE hides so much under the hood and doesn't have a way to use pre-compiled objects
or archives/libraries since it assumes the user is building everything from source.
This has come up a few times in the past in discussions on the forum,
and I don't think there was clear answer that it was possible to fully comply.
I seem to recall one answer as being to just provide a copy of the tmp build directory
(which includes all the objects) and then let the end user figure out how to use it.
In my mind that doesn't really comply with the spirit of the license.

There are companies out there that do at least try to comply.
I've seen tar images that include the makefile files and binary objects to closed source
for things like GPS devices, Tivo, and cell phones.
While I'm sure they are trying to comply, in some cases, I never got the feeling that I could really
rebuild everything - although I never tried.
In fact on Tivo, it was impossible to rebuild the code due to a loophole in the 2.x license agreement.
And that is part of what lead to the creation of GPL v3.
I've also seen cases where there are clear violations.

For something that seems like it would be easy,
It can be a sticky issue.

Also, keep in mind that some of the Arduino libraries, especially 3rd party libraries
are GPL and even GPL v3.
In order to use those libraries you must open source your code as GPL V3 as well.


--- bill



bperrybap

#8
May 16, 2014, 12:02 am Last Edit: May 16, 2014, 12:04 am by bperrybap Reason: 1
From this page:
http://arduino.cc/en/Main/FAQ
The section:
Quote
Can I build a commercial product based on Arduino?


States:
Quote

Using the Arduino core and libraries for the firmware of a commercial product does not require you to release the source code for the firmware. The LGPL does, however, require you to make available object files that allow for the relinking of the firmware against updated versions of the Arduino core and libraries. Any modifications to the core and libraries must be released under the LGPL.


However, this is incorrect, in that some libraries that come with the IDE,
like the SD library for example, are not LGPL 2.x but GPL v3.
If you want to use the SD library you will have to release all your code as open source GPL v3
as that is the price for using GPL V3 code.


Here is a link to one of the discussions about licensing from the developers board.
https://groups.google.com/a/arduino.cc/forum/#!topic/developers/QeDMRF__qXs
In fact, that might be better place to ask the question as that is the area that the Arduino team follows.

The licensing on the libraries included with the IDE is inconsistent and sloppy.
The Arduino team hasn't done a very good job at providing clear licenses for the included libraries.
In fact a few them would really scare me if I were trying to build a closed source product.
And example is the Ethernet library.
That library has multiple authors and it isn't clear what the real license is.
In fact large parts of the code don't specify a license, author, or copyright,
so there is no telling where that code came from and if there are hidden
copyrights involved.

While the Arduino pages may state that the libraries are all LGPL.
That simply is not the case.

Of the other libraries included with the IDE, licenses used are:
- GPL v3
- GPL v2
- LGPL 2.0, 2.1
- MIT
-  Apache
- not specified

So depending on which library you use, you have different terms
that may or may not allow use with closed source and then in some
cases, you have no idea what the licensing terms are since the library never specifies.

It's a mess.
--- bill

mrburnette

Quote

It's a mess.
--- bill


Yes.  But, I feel that it is somewhat by design to make full-source publication the most attractive route.  Open Source Hardware and Software is a foundation to the Arduino platform.  Developers wanting to write proprietary code can purchase compilers and tools that support commercial development. 

I am NOT the least bit sorry that mtomovich is finding it difficult; I am glad it is difficult.  Much energy went into the Arduino open source libraries and hardware and that effort should not be abused.  When I wrote commercial, I wrote it all or I paid for the libraries needed.  That is still the preferable approach for many businesses. 

My opinion,

Ray

bperrybap

Ray,
By "mess" I mainly meant that the Arduino team should have at least clearly
noted the license on each library and not made statements that it is all LGPL.

In terms of open source philosophy, it is very much like religion and people tend to have very strong views.
I'm pretty much right there with you.
And that is why all my open source libraries are GPL v3 and why I won't get involved in
any more projects that are not GPL v3.
My view is I'll share mine only if you share yours.

I think if the Arduino team had really wanted everything to be open, they could have
chosen to use GPL v3 vs LGPL v2.1 whenever possible.
But from my past conversations with some of the library developers,
their view was very much against the GPL v3 philosophy of forced sharing
being the price of using the code.


--- bill

mrburnette

Quote
their view was very much against the GPL v3 philosophy of forced sharing
being the price of using the code.


Liberal, but not forceful.  Recipe for a "mess."

Ray

gardner

The really good stuff is in AVR-LIBC which looks to have a BSD-style license.  You could build your app using the Eclipse/AVR-GCC toolchain, totally bypassing Arduino, and sidestep all the LGPL biz.  If I were contemplating a commercial product that I didn't wish encumbered with awkward licenses, I think that's the way I'd go.

http://www.nongnu.org/avr-libc/LICENSE.txt

bperrybap

But if you are going to stick with avr-gcc and avr libC then why mess with Arduino and the IDE at all?
What would be the benefit for all the pain of using the Arduino IDE without any Arduino libraries?
Just use the native gcc tools, and write your own makefiles.
You could then even do source level debugging.

--- bill

Robin2


My understanding is that the overall intent of all the LGPL/GPL licenses is to always give
the end user the ability to update or alter the open source modules.


I have never thought the intent of the licensing has anything to do with giving the end user (specifically) the ability to do anything.

I think the intent is to prevent any new developer from legally prohibiting access to code that a previous developer had put into the public domain by claiming it to be the proprietary property of the new developer. In particular it is intended to counter creeping development from moving an improved version of what was originally Open Source code out of the public domain.

Some of the licences are written to require the new developer to make his new code open source if he chooses to include some licensed code in his new code.

In other cases new developers are allowed to include licensed code in a commercial product without requiring the commercial product to be open source. In that case the new developer usually has an obligation to make the licensed code available to others - and I think it is usually sufficient to have a link to where it caan be downloaded.

I think the general question to ask yourself is whether your use of the licensed code will infringe the rights of the person who developed it - that is the person who may (in both the senses of "might" and "will have the entitlement to") sue you.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

Go Up