Proposed policy change: permit use of LGPLed libraries
Mozilla is a large and complex codebase, made up of many parts we have
written and many parts where we leverage the work of others. Mozilla
(the organization) wants people to reuse our codebase to build their own
cool products - browsers, email clients and other things. Therefore,
keeping the copyright licensing status of the codebase simple has been
an important goal.
So, our unwritten licensing rule of thumb for the last decade is that we
have wanted to be able to say to potential downstream users of our code:
"OK with the MPL? Then you can use our stuff." Since 2004 or so, we have
also provided the option for people to use it under the LGPL or GPL, but
not at the cost of MPL-based simplicity.
This has meant that all code which goes into the core Mozilla products
has needed to be licensed under the tri-license (now MPL 2) or a license
compatible with all three parts of it - for a long time, basically MIT
or BSD, but now MPL 2 is Apache 2-compatible, Apache 2 as well.
However, there is a significant body of code available under the LGPL
which it would be very useful to be able to use. One current example is
LibUSB, which we could use to provide WebUSB support in B2G. Examples in
the past include Cairo (where we did manage to persuade upstream to make
a licence change; but this was difficult and is not always possible).
If we used libraries under the LGPL in Mozilla, our "rule of thumb"
would no longer be true. Downstream users would need to read and
understand both the MPL and the LGPL to make sure they met their
On the other hand, open source licensing is much better understood now
than it was a decade ago, and the LGPL is a common licence which legal
departments will have usually heard of and know about. So the downsides
of this are not as bad as they once were.
We therefore propose that we change our stance on the trade-off between
speed of development and licensing simplicity, and alter our policy to
permit Mozilla to include clearly-demarcated 3rd-party LGPLed libraries,
with appropriate labelling and reminders against accidental code-copying
to other parts of the codebase.