Assuming that my project ever goes to market, what are the licensing requirements for arduino ?
Is the bootloader copyrighted/copylefted ? The wiring library ?
I am assuming that piggybacking my own PCB on top of a nano should not cause any problems. What if instead I take the eagle sketch, and add solderpads for my peripherals- is that a derivative work and requires release of the new sketch and/or source ?
It's all open source, that means you are free to use anything in any way you want. No fee at all.
As I understand it, you can use all the Arduino designs, but because they're under the GPL, you must provide the source code to anyone who wants it. So, you need to let people have the original Eagle files, circuit diagrams and so on.
I think adding pads would make it a derivative work. That would mean, I think, that you'd need to publish source code.
The software is licensed under the lesser GPL (LGPL) this is less restrictive than the GPL, see GNU Lesser General Public License v3.0 - GNU Project - Free Software Foundation
The hardware reference designs use the creative commons license: Creative Commons — Attribution-ShareAlike 2.5 Generic — CC BY-SA 2.5
Intent is relevant. I believe (and someone will probably correct me if I am wrong) that with Arduino, the intent is:
-
works that use the arduino hardware or software as a component or tool are not under any particular license requirements. As you said, you can put a real arduino running an arduino sketch that your wrote inside a product, and the product details (including your sketch) can still be proprietary. This is the usual interpretation of the intent of LGPL, although there are detail that make the exact legal meanings a bit unclear how embedded software should work (there's fine print in LGPL that says you app should be release in a form that would allow the user to "upgrade" it to a newer version of the LGPL'ed libraries. That makes sense if the software is a windows apps swaps in an LGPL shared object file, but not so much if your software is embedded in a chunk of hardware where users don't even SEE the software as a separate entity.)
-
"derivative works" should be released under the same license and style as the as the original. So if you modify the wiring library or the arduino application itself, the new versions should be available as open source too. And if you make a derivative of the arduino hardware platform AS SUCH (ie the Freeduino designs), those should also be open source. A hardware object that is NOT particularly arduino-like (say, the Evil Mad Scientist "Peggy 2"), or a major departure from arduino (Sanguino is a good example; it's arduino-like in purpose but awfully far from having been "derived" from the existing arduino design) starts to get ambiguous, as does your example of adding additional hardware to the existing schematics to make a "product." The arduino hardware design is pretty trivial, and it would certainly be legally "cleaner" to NOT start with the published schematics, but you're probably ok if your "product" does not look or act like an arduino.
Of course, most open source advocates would LIKE things you do to also be open source... But most would also be happy to have the original open source mentioned in the credits somewhere.
Thanks for your reply westfw. Good point about the LGP license; I had thought of avrlibc and wiring as a substitute for libstdc with its "runtime exception" clause. Guess that does not apply here.
As for the hardware design I am still wondering how much of that is arduino-specific. As you said starting from scratch (and following atmel's application notes) would be an alternative.
<< It's all open source, that means you are free to use anything in any way you want. No fee at all. >>
That's why I hate the terms "open source" and "free software" because people then think it's free for any use and does not have any restrictions attached to it. Unfortunately the truth is usually far from that.
EDITED: Looks like avrlibc is in fact BSD licensed so statically linking is not a problem at all. Now for the wiring part...
What westfw said, basically.
If you write a program that uses the Arduino core libraries, you can keep it proprietary. Any changes you make to the Arduino core libraries need to be released under the LGPL. (Any changes you make to the Arduino IDE need to be released under the GPL).
If you make a hardware accessory or daughterboard for the Arduino, you can keep that proprietary, but any modifications of an Arduino board need to be released under the Creative Commons Attribution Share-Alike license.
Thanks for the clarification mellis.
I checked the wiring code though and that appears to be LGPL. In other words, if your application uses digitalWrite() it would be necessary to make one's application object files (or source of course) available allowing other people to link to a different version of wiring. It looks to me like this is probably an oversight from the wiring people. LGPL for microprocessors is kind of pointless since shared libraries are not used.
LGPL for microprocessors is kind of pointless since shared libraries are not used.
I know my motivation for using the LGPL rather than GPL for libraries is because I do want library changes contributed back to the community but want to enable the widest use otherwise.
To be honest I hadn't ever considered some of the other subtleties of the LGPL as mentioned above.
--Phil.
from cross:
In other words, if your application uses digitalWrite() it would be necessary to make one's application object files (or source of course) available allowing other people to link to a different version of wiring.
from mellis:
If you write a program that uses the Arduino core libraries, you can keep it proprietary.
Are these statements not contradictory?
Cross, are you saying that because our apps statically link to digitalWrite that they cannot be proprietary?
Mikal
I think Cross is saying the LGPL license stipulates that the user must be provided the capability to modify LGPL licensed code and then relink to code (proprietary or otherwise) to produce a modified executable
Sorry to be dense, but it sounds like he's saying that if I make a cool embedded app ("if your application uses digitalWrite..."), then I must publish coolembeddedapp.o ("...make one's application object files available...")?
I don't want to belabor the point, but it is important [for me!] to understand clearly.
Thanks,
Mikal
it sounds like he's saying that if I make an embedded app then I must publish application object or source files so the app can be relinked by the Licensee to the LGPL licencesed libraries
Yes, I think that is Cross's interpretation of the license. Perhaps mellis can clarify if this interpretation is correct.
Don't make me call my lawyer ;D
Lefty
Yes, this is the intent of the LGPL. It doesn't really make a lot of sense in an embedded systems context, and I'm inclined to interpret it in the spirit that was intended (which has been stated here as well, by the authors, which is good enough for me. It may or may not be good enough for a corporate lawyer.)
I know people who have looked around for a license appropriate to embedded microcontroller libraries that maintains the "modifications to the library itself stay open source, but code that statically links the library, or includes the library in source form, can be proprietary" desired effect. They didn't find anything
Sorry to be dense, but it sounds like he's saying that if I make a cool embedded app ("if your application uses digitalWrite..."), then I must publish coolembeddedapp.o ("...make one's application object files available...")?
Yes, that's my understanding of the licenses involved. As others have pointed out this is probably not what the Wiring authors had in mind (=intent) but it seems to be what the license says.
Please note that most of the system code you use in an arduino sketch is licensed under BSD or compatible license (i.e. "can be used in proprietary project without providing source/objects- don't sue us if your house burns down !"). However, the Wiring core wrapper would require you to make your .o files available. That does not affect commercial use- it's just a moderate inconvenience.
@westfw: Did you look at the MPL ? It seems that it covers the cases we are interested in: modifications must be made available in source, combined works don't have to be made available.
Cross, and Westfw, have it right, IMO.
However, all is not as it seems. It was licensed under 2.1, which gives the right to choose 3, if you like, but that would be a poor choice. Version 3 of LGPL does not allow all the conditions that 2.1 does (which is why they always allow forward versioning at the users' discretion).
You may be tripped up by section 5:
- A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
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.
So, yes, your source code is proprietary, but the version on the uC is not. Therefore, by distributing a product containing that image...
However, you're also -saved- by section 6 (this is the part that saves the shared library guys...), which presents much more minimal requirements:
- As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
So, if we read section 6 a bit further...
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
- a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
...
So, no, you do not have to distribute your source code, or license your source under GPL/LGPL. You just need to make available the source of the library, and the .o of your code.
It's worth noting, the most intensive restriction here, is that you cannot make a license claim that the user not reverse-engineer (it's a requirement that you let them), and that you make prominent notice that you have included the LGPL library, and who the copyright for that belongs, and that you do any of the required steps in the LGPL 2.1 Section 6.
!c
You just need to make available the source of the library, and the .o of your code.
Which is a rather significant burden when the "normal" state of such hardware gadgets would non-readable object code embedded in a non-reprogrammable chip, soldered on a board, embedded in a box, that the user was never intended to open in the first place. By having, say, a web site containing the .o files for my product, I help the consumer not-at-all (because the actual product isn't really user modifiable), but I expose myself to pirates quite-a-lot. Sigh.
Yes, this occurred to me as well. And as a software engineer, how could I develop a business model around Arduino if, when I develop a piece of embedded firmware for a client, I must then post my object code for free for everyone?
[edited: "object code" instead of "it"]
Yes, this occurred to me as well. And as a software engineer, how could I develop a business model around Arduino if, when I develop a piece of embedded firmware for a client, I must then post it for free for everyone?
You don't have to post it free to everyone. Your obligations are to the people you distribute to, not to the world at large. 6.b) even allows you to charge the cost of fulfilling that obligation.