Ethical Commercial Arduino Usage & Licensing

Hi all,
I am interested on community opinions of the following theoretical situation as I may pursue it one day and would like some opinions on the best approach.
I am aware that as far as open source goes, there are varying opinions ranging from "Do what you want with it" to "Credit me and keep your product open source too". I have read many forum posts and am aware of the difficulties with complying with different licences. (LGPL requiring the ability of the user to update and rebuild open source libraries themselves, GPL requiring full project to be open sourced as well, etc). I am not looking for legal advice, but more ethical opinions in the situation that someone wanted to use Arduino commercially.

Say I was to create a product that may include a custom PCB and an Atmel328p running the optiboot bootloader, being programmed from the arduino IDE and then sold commercially. Realistically, the hardware side could easily be cloned and sold cheaper, so in order for the company to stay viable, would it be more ethical to:

A)
Keep the source code closed, while simultaneously complying with all required licences. I guess this is the simplest but most brute-force option.

B)
Open the source of the product while implementing a verification system where a user would be warned if their product was not genuine / was a clone

C)
Ditch Arduino and develop another microcontroller for this sort of usage... Arduino should be kept for open source prototyping only!

Obviously the top two approaches would require some sort of fuse setting and encryption on the arduino in a way that stops someone directly copying the flash of one arduino to another to make a "genuine" clone, but I have some ideas for that bit, so that's not really the question I am asking here :slight_smile: I am aware that with enough resources and time, there is almost always a way to copy and clone or functionally rewrite and mimic the device, (I guess that's what patents protect!), I just want to know what the best way to keep a commercial project like this example ethical and viable, any ideas or opinions are welcome!

Or D, you can do what one of my customers did.
He had an engineer create a prototype of the product that controlled the time and varied the color and intensity of various colored LEDs to test indoor plant growing. The unit's processor was an Arduino nano along with other components in a custom plastic enclosure. External power supply and connectors to the LEDs.
He had us make 30 units which he sold to some of his customers to evaluate. During the 3-6 months the units were evaluated, another design group did a total redesign, based on the prototype feedback. We did not do the new box, nor even knew what was in the new design.
So, whatever you are building, you will learn much and will have lots of changes, so do not put all your effort and expect to never have to change or update.
BEWARE of FCC and UL testing that must be done if you are in the US. One customer that had to be UL tested had to have a production run of 400 units so the lab could select 6-7 random serial numbers to be tested.
Any commercial product with a working frequency of 400kHz or more MUST be tested by a FCC certified lab. All Arduino products fall into that category.
Then there are the insurance an legal coverage you MUST have.
Good luck.

2 Likes

I would at least consider the most obvious option:

E)
Make it open source.

This may indeed make it easier to clone, but as you say locking it down completely still can't prevent that.

From a hard business perspective, what you get in return is the USP of an open source product. Whether that is of any marketing value depends on your customer base.

Yeah. That's nice. It's usually not of any economic value though.

I'd go for option C, not because Arduino "should" be anything in particular, but because you basically circumvent the whole issue effectively with only a minor penalty. The bootloader is nice from an end user perspective, but if you're a developer, who cares you need to deal with the "hassle" of UPDI or SWIM or whatever? It's not much more time consuming at all.
The main concern would be the libraries for the peripherals you use, but you only have to (re)create what you need. A minimal implementation of e.g. a I2C device is usually all you need, and fairly easy to make.
This approach pretty much resolves the licensing issue and creates a solid legal point of departure. When setting up a business, I'd gladly do without the complexities of having to navigate (quasi) open source licensing schemes and (perhaps even worse) community expectations/social norms...

1 Like

I would at least consider the most obvious option:
E)
Make it open source.
This may indeed make it easier to clone, but as you say locking it down completely still can't prevent that.
From a hard business perspective, what you get in return is the USP of an open source product. Whether that is of any marketing value depends on your customer base.

This defiantly makes sense, however I just wonder how that would logistically be possible as a hobbyist starting a business around a product with little to no initial investment. It's tricky enough on the business side, but having it open source means if the idea is good enough to succeed, it could be taken by another company with larger capital and promoted taking 100% of the potential market, when a young starting business just simply couldn't afford to invest that much into it, regardless of how many brownie points they get for keeping it open source... :thinking:

The bootloader is nice from an end user perspective, but if you're a developer, who cares you need to deal with the "hassle" of UPDI or SWIM or whatever? It's not much more time consuming at all.

I totally agree with this! As a hobbyist though, I have little to no concept of how much is required to develop using another microcontroller. I see the amazing amounts of work the arduino community puts into this system so I thought I couldn't just buy a different atmel chip, write and compile some code, program through an ISP and have it all work. I guess there's my next research task :rofl:

Don't be put off too much by it! Yes, it's more work than Arduino. No, that doesn't put it out of reach of a hobbyist. Not at all.

There are three areas you might want to think about, IMO:
1: Programming logistics/interface
2: Development environment
3: Libraries

1: Every microcontroller manufacturer has their own programming interface - sometimes even several. In Arduino we're familiar with ISP (which was the way Microchip intended it originally) and of course Serial/bootloader. The Serial/bootloader approach is nice because you have programming and debugging on the same interface. But in practice, it's not a big drawback to have a programming device and a separate USB-Serial device connected to the same board. One for programming, one for monitoring the Serial interface. Of course what Arduino does not support is the native debugging interface that each modern microcontroller has...this is a potential you can effectively only unlock of you depart from Arduino.
Programming devices are usually available cheaply or can be DIY-ed. For instance, STM microcontrollers can be programmed using an ST-Link, which is available for a few dollars/Euro's/etc in a clone version (which works fine, BTW).
The actual code upload software, usually a command-line tool, is freely available from the microcontroller manufacturer and/or community versions are made available.

2: What makes Arduino attractive is its one-stop-shop development environment. But Arduino is far from unique in this regard. For STM32 controllers for instance, ST offers STM32Cube, which is basically Arduino IDE on a speedball of steroids and coke. Yes, it's more complex than Arduino IDE, but it's packed with functions and once you get used to it, quite accessible. For their older STM8 series they have STVD, which looks and functions like something from the early 1990s, but effectively offers almost the same functionality as Arduino IDE. It even includes the STVP (visual programmer) which is a GUI shell on top of their command line programmer.

I'm using ST as an example because I'm familiar with their stuff; other manufacturers have their own equivalents usually.
And then there's a often couple of open source development environments (IDE's), compilers (e.g. SDCC for STM8, Z80 & co, 8051 etc.) and programming tools to choose from depending on what kind of hardware you choose.

3: Libraries: this is where Arduino has a clear edge; as long as you use hardware that's sort of common, someone has probably written a library for it to conveniently package the functionality of the peripheral you want to use. Sometimes it's possible to port these to another platform, since most are written in C/C++ anyway and the translation process (if needed) is relatively straightforward. But as I said before, it's not necessarily prohibitive to write a minimal-fuctionality library for a project once in a while. How problematic/labor intensive this is really depends on the complexity of your project, so I can't decide for you.

Everything of course is always a matter of getting used to, diving into it and just biting the bullet. But it can be done; if you have some experience with how Arduino works, you'll find that it's basically based on how it was already done in the industry anyway. It's just packaged in a more simple form (at least for the end user). If you're serious about making a commercial product, I think it pays to dare and depart from the ease of use of the hobbyist-oriented environment and step into the void main (void).

Wow, this has helped so frekin much thank you! So grateful to gain some direction, very much appreciated :blush:

You're welcome :slight_smile:
Perhaps it wasn't very concrete in terms of help, but if it worked as a nudge towards overcoming your hesitations of trying something else than Arduino, then it was successful :wink:

1 Like

Definitely! My recent research has now lead me to explore PlatformIO, atom IDE and heaps more haha. I have come across an interesting situation that I can't quite make sense of though.
The biggest issue I have read about with using GNU licensed code in commercial microcontroller applications is that it requires "the ability to relink different versions of the open source modules with the bigger works". I find it interesting this segment from the optiboot bootloader in response to the licence:

Notes on GPLv2 WRT the Optiboot bootloader:
In general, it can be hard to interpret exactly how the GPL license
applies to microcontroller embedded software. Assumptions about
logically distinct applications, oepratnig systems, dynamically loaded
libraries, and the end-user ability to re-compile, re-link, or
re-install, don't quite "fit."
There is a "Bootloader Exception" which seems applicable and I've
included below, but it's current use seems to be in the PyInstaller
utility, which is still very far from a Flashed microcontroller bootloader.
The INTENT of the Optiboot maintainers is that Optiboot may be treated
much like the operating system on a larger computer, and that it's
GPLv2 status has no effect on the application itself. That means that
there are no restrictions to using Optiboot with commercial, closed
source, or proprietary applications, and no "viral OSSW" infection of
any applications by the bootloader. The only requirement is that
fixes and enhancements to Optiboot itself be fed back to the Optiboot
project.

This got me thinking about the Arduino core licensing (LGPL I believe).
The Teensy (PJRC) platform has seemingly been evolving for a while alongside Arduino, with a recent addition of a lockable Teensy allowing for EHEX files so projects can stay closed source and avoid copycat attacks from other companies. The question I have is:
How can you keep a project from being copied if it uses the Arduino core? It would require Object Files to be provided so someone could link them with other versions of the Arduino core. Doesn't this mean anyone could take your precompiled Object Files (even though they won't have the source) and upload it to whatever copy board they want?? Or in the case of Teensy, would this mean giving the requester the Object Files encrypted specific to their board? I am just very confused on how this could be used while still complying to licence terms, defiantly got me thinking... Maybe it's just another reason to prototype on Arduino and do your own commercially as you say @anon35827816 :rofl:

FWIW I started using Microchip processors to control some in house testing. I used the MPLAB and found it to be pretty easy to pickup. Being a hardware engineer my only exposure to programming was what I needed to get my job done. MPLAB wasn't so bad to learn. I had to learn the processor details so once I got going I knew the internal functions well. Why this might matter to you..... if I were to create a product I would do it without the Arduino IDE. I would not be comfortable using the macro's and libraries that I didn't fully understand. Future IDE changes or library changes could cause problems putting you in a position of Storing all the libraries, IDE etc to be sure you can modify the software in the future.
There maybe some complex libraries (graphics perhaps) where it makes no sense to try to recreate so those will have to be dealt with

Another thought, IMHO a "clone" purchased on eBay is not an Arduino. It has similar pinout but usually at least some different components and circuitry. Its simply a very convenient place to start.

Note: I have not been in the commercial product industry so the above is just my opinion. I have been in automotive and military which has a different set of rules. But I believe relying on the Arduino IDE nicety is not the best approach.

1 Like

The INTENT of the Optiboot maintainers

Specifying "intent" is pretty handy for OSSW when licenses are ambiguous (ie embedded code), but they're not so useful for the various sorts of proprietary software.

You are probably unlikely to get sued by anyone if you don't meet the letter of the license used for some library, unless your product becomes very successful indeed, and they have been REALLY CLEAR that their intent was not to allow proprietary use. (I've seen several libraries with such "intents" published: "Free to use for OSSW projects and hobbyists, for commercial use talk to me about licensing terms." And if a library says that, that's what you should do.)

Likewise, your product is unlikely to get cloned just because source code is available. To successfully clone a product (and make money) requires a set of circumstances that are pretty rare. For example the original product has to be popular, and it has to be well "supported" by a broad community (because the actual product owner can keep track of who their customers are, and is unlikely to support clones. and the cloner is unlikely to be able to do support, and users of commercial products generally want SOME support.)

1 Like

Okay yep, that all makes a lot of sense, thanks for the support guys!
Also, to answer my own question:

with a recent addition of a lockable Teensy allowing for EHEX files so projects can stay closed source and avoid copycat attacks from other companies. The question I have is:
How can you keep a project from being copied if it uses the Arduino core? It would require Object Files to be provided so someone could link them with other versions of the Arduino core.

Someone on the PJRC forum explained that it seems most if not all of the Arduino core libraries have been replaced with Paul's Teensy specific functionally similar versions, so I guess that means it's their code and they are allowing people to use locked teensy's commercially without licensing issues (they use mainly MIT), even though as you say with the intent they stated it would be unlikely suing would be an issue.

But realistically as you guys say, it's probably best to learn the processor specifically and move away from the Arduino IDE and fancy stuff :rofl:
And I guess maybe I thought cloning was easier than it is, what you say is very true about not having support, I guess it's pretty hard to copy it all without starting up your own company anyway.
Thanks for all the input!

The PIC microcontrollers are also aimed-at hobbyists so they are easier than a "random microcontroller". Or the Raspberry Pi is a tiny "single board computer" with an operating system and ports for a keyboard, mouse, & display, USB drive, etc.

I've done this once a million years ago and I work in electronics so I've seen how it's done...

Typically you'd need a development board which usually costs more than the Arduino. And you'll need a programmer to program the chips (or more-likely your finished boards). There are probably free software development tools but not always.

And you'll have to design the PC board, have it fabricated, and then have it assembled/soldered, or do that yourself. Of course, you may have to do that anyway depending on how much additional hardware you need.

With the Arduino, the Arduino is the development board and the built-in bootloader means you don't need a separate programmer and you get a complete-working PC board that you can use in the final project.

I've also used several IDEs (mostly for computer programming, not microcontrollers) and goal for the 1st day usually to get the IDE installed and configured and get "Hello World" working. The Arduino was surprisingly easy! In about 15 minutes the IDE was downloaded, installed, and the Blink Example was running.

So to me,

I don't know if it really matters but PIC µP are definitely targeted for commercial applications.

Yeah, theoretically. As if that would even work. LGPL is just ... not appropriate for this sort of thing (but it's too late to change now!)
IIRC, such object files only need to be available "by request", so one alternative is to "cross that bridge when you actually get to it."

I hope somewhere there are some GNU people who are ashamed that they've made lawyers so necessary to the process of commercial software development, effectively providing a system that even more exclusionary than Patents... :frowning:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.