Why is MPL *recommended* to module maintainers of the Scala Platform?

I don’t think the Scala Platform projects should be encouraged to use any particular kind of license, except to encourage collaboration within the ecosystem.

I personally understand all the arguments for share-alike licenses, like GPL or MPLv2. And for applications and end-user products those might be the best choice, however I don’t find the share-alike mentality to be healthy for libraries.

For every GPL success story, like the Linux kernel, you can also find a LLVM that was born primarily because GCC made it hard to extend and use as a library on philosophical grounds and LLVM is winning.
As a matter of fact, the Linux kernel itself was more successful than BSD because of the USL v. BSDi lawsuit, because Linux was the first to adopt a decentralized development model, that remains to this day much more decentralized than any of the BSDs, because it was distributed along with the GNU toolchain, because it had a community. In other words Linux was successful because people collaborated for its development and naysayers can place the blame on its license, however I don’t believe it was the license, as sharing doesn’t happen and communities aren’t built because a piece of paper says so :wink:

Apache 2.0 is a strong license created by lawyers and one of the few that has a patents grant in it. I feel safe when using Apache 2.0 licensed projects and this license is also very popular throughout the whole Java ecosystem. Off the top of my head I can name about 10 projects that I use licensed with Apache 2.0, whereas for MPL I can only name Firefox, which practices dual licensing, so it doesn’t count for much.

As a matter of personal opinion, I believe copyleft licenses impede collaboration because you can import code using a less restrictive license into a copyleft project, but that’s a one way street. In other words copyleft is about protections against reuse and that’s not relevant only for commercial projects, working against other open-source projects as well.

Of course, I don’t want to impose my preferences on the rest of the community. Everybody else should pick the license that best fits their own project. The only guidelines I would draw would be in terms of collaboration and compatibility with the rest of the community:

  1. license should be compatible with the popular licenses in the ecosystem (e.g. L/GPLv2 is not compatible with Apache 2.0)
  2. license should allow effortless embedding / linking in proprietary/commercial projects and this should include “shading” IMO (e.g. GPL without an exception clause is out, LGPL too ;-))
  3. license should be standard (not a roll your own BSD or MIT with dumb clauses attached - e.g. beware the “do no evil” jokes)
2 Likes

Agreed completely, and honestly if you want an example of licenses which are used persuasively in terms of both open source collaboration and usage (in both free and commercial situations), those licenses are Apache/MIT or BSD.

What do you mean by that?

Shading is when you rename all signatures in a library so they aren’t exposed in some API. Its usually done to solve binary compatibility issues. i.e. lets say you make a HTTP wrapper, and you use dispatch as your http client. To prevent possible binary compatibility issues (where the users of your library may be using a binary incompatible version of Dispatch), shading would rename all class signatures of your dispatch dependency so it wont conflict with the clients version of dispatch

For more info you can see https://maven.apache.org/plugins/maven-shade-plugin/ and https://github.com/sbt/sbt-assembly