CMA-ES / libcmaes

libcmaes is a multithreaded C++11 library with Python bindings for high performance blackbox stochastic optimization using the CMA-ES algorithm for Covariance Matrix Adaptation Evolution Strategy
Other
321 stars 78 forks source link

Apache license #230

Closed hongkai-dai closed 2 years ago

hongkai-dai commented 2 years ago

Thanks for providing this solver. I am wondering if it is possible to add an option of supporting Apach 2.0 license, as the c-cmaes solver did. We would like to use libcmaes in our software Drake, but the LGPL3.0 license makes it slightly harder for our build systems.

jwnimmer-tri commented 2 years ago

Thanks for considering this request! I work with @hongkai-dai; here are some more details...

I think Apache-2.0 is best if possible, but another fine option is MPL-2.0 -- see also wikipedia. Drake's friction with the LGPL comes from the forced dynamic linking, not the disclosure of modifications. With MPL, anyone who distributes programs with CMA-ES modifications would still need to share the source to code those modifications (as with LGPL), but would not be prevented from linking CMA-ES statically. For portability and robustness, linking statically is often better for our users, especially to avoid dependency conflicts.

beniz commented 2 years ago

@hongkai-dai @jwnimmer-tri Thanks for asking. My understanding is that LGPL does not forbid you from linking statically, as long as you are making sure users can link against another version of the lib [1]. Always good to hear from people who are trying to remain compliant!

That being said, Apache 2.0 is a good and fair license, I'd just wait for @nikohansen approval in this case to make an addition to the current COPYING file.

You may not always be able to get authors to change a license to ease a build system though :)

[1] https://stackoverflow.com/questions/10130143/gpl-lgpl-and-static-linking

nikohansen commented 2 years ago

Sure, no problem for me to add the Apache 2.0 license.

jwnimmer-tri commented 2 years ago

Thanks for your consideration!

Once y'all finish discussing, if you could update the LICENSE file in github with the new decision, that would be the best way to conclude the question from my point of view as a user.

And just to be clear, for my part I am happy with either switching to Apache-2.0 exclusively, or to allow the user the choice of either LGPL or Apache (as is done with https://github.com/CMA-ES/c-cmaes/blob/master/LICENSE).

My understanding is that LGPL does not forbid you from linking statically ...

Yes, that's true; my summary above was short and incomplete. In practice, however, the options other than dynamically linking all end up even worse for our users. (Our releases would double in size, including shipping a flavor of python wheels that can never work correctly, etc.)

You may not always be able to get authors to change a license to ease a build system though :)

For sure! Drake actually has 2 LGPL dependencies already (thought sometimes we need to exclude them), and we will probably start to use libcmaes no matter the outcome here. But if we can ask the question early and prevent some future struggles by our users, then that's even better.

beniz commented 2 years ago

Done.

hongkai-dai commented 2 years ago

Thanks a lot!