So, there has been a lot of questions on our end about how to license Flutter to ensure maximum success of the project. My default choice is GPL, but this would have meant that every customer's end application (the Arduino Sketch) would have needed to be GPL as well (if they "distribute" it). Clearly that would limit commercial uses of the product. Others have wanted BSD style licenses, but I am against closed source forks of the Flutter library. We will all be working hard on this code and it is important, I think, to make sure that anyone who benefits from our work also shares their improvements back with us. Ultimately we settled on "LGPL 2.1 or later", which is the exact same license Arduino already uses. This allows commercial users to link to our libraries with their closed source application, but any changes to the library must stay open source. The LGPL is now called the "Lesser GPL" but it was in fact originally called the "Library GPL" because of its suitability for libraries.
However, there are certain large customers who may be very interested in Flutter, but may have no interest in open source and who may want a tweaked library for one reason or another. One major thing these companies might want is basically some altered algorithms to help obfuscate how "their version" of the software works even if there are no significant library changes. Customers may want some "feel good" changes to the code so they feel like they have their own custom version, even if nothing significant is added to the library. Typically the more money a customer has, the more they will want something like this.
I think it is very important to the success of the project that we get large commercial customers using Flutter. There is going to be a lot of development in mesh networking solutions in the coming years as people tire of Zigbee, and my hope is that Flutter will be a viable platform for large scale sensor systems and process monitoring. I designed the hardware so that a different CPU or radio can be used, so my hope is that we can design many different high performance and low cost versions of the system as time goes on.
Speaking with some backers about the issue, it seems like Dual Licensing is the best choice here. Dual licensing basically means we license all changes as LGPL, but all contributors also give us rights to use the code with another license, such as Apache 2.0.
Then, when a customer asks us for a closed fork of the code, we ask them for a chunk of funds in lieu of their source changes. This chunk of funds would be "commensurate with the capability of the customer" which means rich companies have to fork out more and small companies get a deal. The intention being that these funds not go towards buying me a speed boat, but are provided to the company for further development of the open source project. In many cases the chunk of cash will do far more for the project than some simple source code contributions, and the peace of mind a closed source fork would give a large company would hopefully be enough to get them buying lots of hardware. This means more funds for the project as well as fewer funds for more closed source competitors.
There has been talk of setting up a public benefit corporation called the "Flutter Foundation" to manage development of the project with funds taken from these large paying customers. This way there is one focused entity working on advancing the project, rather than a loose collection of contributors all working on their own needs. I don't know if we will get that far, but it is something I am interested in if we get popular enough.
Backer/User @farmckon first approached me about the idea of dual licensing, and it seems like it could be a good solution to some of the problems I had identified with just vanilla LGPL. He has started a few hackerspaces in New York and is big into management of open source projects, so he will be best for explaining more about how this might work.
The key thing, though, is that contributors to the Flutter project have to agree to this dual license. I know some people may question our motives here, so I want to have a thorough discussion about this so we can all understand the issues at stake and get on the same page. My primary goal is the success of Flutter as an open source project and I welcome discussion about how we can best accomplish this.
Please, share your thoughts on the matter here.