ianmackenzie / elm-geometry

2D/3D geometry package for Elm
Mozilla Public License 2.0
183 stars 26 forks source link

Change license to something a little more permissive maybe? #145

Closed coballast closed 3 years ago

coballast commented 3 years ago

Is it intended for this to be licensed under the Mozilla Public License? I would be happy to help contribute, but I would also like the freedom to add my own secret sauce if I so chose. Would you be willing to change it to the BSD 3-Clause or Apache License?

coballast commented 3 years ago

I'm dropping the issue, it's plenty reasonable.

ianmackenzie commented 3 years ago

Just if you were curious - the short answer is that yes, it was a deliberate choice based on a certain amount of research/deliberation. It seemed like a reasonable compromise between allowing freedom of use and encouraging contribution, but I'd certainly like to hear about any cases where the MPL causes problems.

For the benefit of anyone else who finds this issue in the future, note that my understanding is that the MPL generally only applies to existing source files - there are basically no meaningful restrictions placed on code that links to/uses MPL-licensed code (you can distribute the result commercially, no requirement to provide source or allow LGPL-style relinking, etc.). The only real requirement is that if you make changes to an elm-geometry source file itself (e.g. Point3d.elm) and then distribute a piece of software using that modification, you have to make that modification public.

If you want to add something like Point3d.mySuperSecretFunction and don't want to publish it, then you can do something like create a new Point3d.SecretSauce module of your own...

module Point3d.SecretSauce exposing (mySuperSecretFunction)

mySuperSecretFunction : Point3d units coordinates -> Point3d units coordinates
mySuperSecretFunction point =
    ...

...which you can then 'merge' with the main Point3d module when importing it:

import Point3d
import Point3d.SecretSauce as Point3d

-- go ahead and use Point3d.rotateAround and Point3d.mySuperSecretFunction
-- as if they were both in the main Point3d module

This way you get basically all the advantages of having a fully integrated elm-geometry function, but without the requirement to publish your code (since they're in a source file of your own, not as a modification to an elm-geometry source file).

coballast commented 3 years ago

For anyone that is not into reading legalize, what @ianmackenzie said (I am not a lawyer!) in my judgement is an accurate summary. Thank you.