Question on two statements regarding commericialization made in Arduino FAQ

Hello,

I am using an Arduino board to make a couple of LEDs blink. I’m downloading the Arduino development environment and not modifying it. I’m using standard Arduino commands and libraries. I’m placing Arduino board (layout and components unmodified) with external connections (LED, resistors) inside an enclosure. I need help with understanding the conditions in which one can build a commercial product based on Arduino. There are two conditions that I do not clearly understand. I read these conditions from the Arduino FAQ page.

One condition states: “Physically embedding an Arduino board inside a commercial product does not require you to disclose or open-source any information about its design.”

I need help to understand if condition statement means:

  1. One already has a commercial product and wants to physically place an Arduino board inside it, then one does not need to disclose anything about the design

or

  1. One is starting from nothing, and designing an item to be a commercial product, and part of the design is an Arduino board inside an enclosure, then one does not need to disclose anything about the design.

or

  1. Statement is neither #1 or #2? If so then, what does it mean?

Another condition states:

“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.”

My questions are:

  1. What is an Arduinino core, and how do I know if I am modifying it? I am guessing that what I am doing is not modifying the Arduino core, but just want to confirm. I am just using basic Arduino commands, and un-modified programming/developing environment (downloaded) to run an Arduino board.

  2. I have no idea what the second sentence in this condition (“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.”) means, and whether or not what I am doing requires me to make available these object files.

Thanks for the help!

chengat: One condition states: “Physically embedding an Arduino board inside a commercial product does not require you to disclose or open-source any information about its design.”

Your answer is:

chengat: 2. One is starting from nothing, and designing an item to be a commercial product, and part of the design is an Arduino board inside an enclosure, then one does not need to disclose anything about the design.

chengat: Another condition states:

“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.”

My questions are:

  1. What is an Arduinino core, and how do I know if I am modifying it? I am guessing that what I am doing is not modifying the Arduino core, but just want to confirm. I am just using basic Arduino commands, and un-modified programming/developing environment (downloaded) to run an Arduino board.

Basically - it is all the code that makes up the ability to use the Arduion - ie, if you go around mucking in the files to change how the digitalWrite() function works, then you have modified the core components of the software. If you are just writing your own code, and use digitalWrite() for your project, you haven't modified anything.

chengat: 2. I have no idea what the second sentence in this condition (“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.”) means, and whether or not what I am doing requires me to make available these object files.

I have a vague idea what they are saying - this may be wrong, you may want to seek other's advice - but I think what they are saying here is that, when you compile your project, the system outputs a .hex file (the binary) which gets uploaded to the ATMega328. Now, you can release the file, sell it, etc - whatever you want. But the LGPL requires you to -also- release the .o file (the object file - from which the .hex file is created) along with the .hex file. With that file, you can then take a later version of the Arduino core system, and re-link the .o file and generate an updated .hex file from it; you can't do that with just the .hex file alone.

I am making a big assumption of the above that you know how and where to find the .o and .hex files, after you compile your project, of course...

Thanks for the help, cr0sh!

Let's assume that your guess on my last question is true.

Doesn't the requirement of providing the object and hex files conflict with the statement of “Physically embedding an Arduino board inside a commercial product does not require you to disclose or open-source any information about its design.”?

If not, can you help me understand why not?

If you see the conflict, which statement takes precedence?

... does not require you to disclose or open-source any information about its design.”

I think the statement is specific to the hardware, boot loader, schematics, etc. You are still expected to provide a .HEX and app.o if requested in writing or you can simply provide a website link to download same. In the event of hardware failure, the owner can still replace the hardware and reprogram same. Your source does not have to be disclosed.

Ray

LGPL is particularly poorly suited toward "deeply embedded" projects, and it's a shame that the Arduino team used it for the core and libraries. LGPL is supposed to be the "less restrictive" license useful for libraries, but it's designed for use with the sort of dynamically linked libraries one finds on a linux or windows desktop, where the library lives in a separate file (.dll for windows) that is read into memory the first time one of its functions is called. That means that updating the library just means installing a new .dll file or whatever. Permitting/requiring that the user have access to a statically linkable copy of the program is silly and usually useless (tell me how well it would have worked for a user to upgrade from the 0022 arduino core to a 1.5.1 arduino core, starting with the sketch.cpp.o file...)

Hi all,

Excellent topic!

Just to summarize: If someone: - buys an Arduino board - for example from the online store (with logo on it, everything) - puts it into a plastic enclosure - connects LEDs, relays, sensors, buttons - downloads the Arduino development environment and without modifying it - writes the firmware CAN name it "ProductNameThatIsWithoutTrademarkIssues" and SELL it without LGPL infringement IF: - they publish both the .hex and .o files - if requested in written

QUESTIONs: 1. Is the above true? 2. Can only the .o files be published? (Quote: The LGPL does, however, require you to make available [u]object files[/u] that allow for the relinking of the firmware against updated versions of the Arduino core and libraries) 3. If the microcontroller is programmed without using the Arduino development environment or libraries, the board/shields can still be used without having to make public the .hex and/or .o files, right? 4. One can design addon shields containing jumpers, pins, MCUs without having to make public the design file and .hex and .o files, right?

Thanks in advance!

Regards, Todd

These are really great questions for a lawyer, which the vast majority of the users on the Internet are not.