Відповідь DougM та AER робить справедливим. MPLv2 та LGPLv3, за винятком статики, однакові щодо подій, які спричинили копілефт. Однак я думаю, що нам не вистачає ще однієї дуже важливої різниці між LGPL та MPL. Коли спрацьовує копілефт, копілефт застосовується до:
- для MPL: до тих самих файлів вашої оригінальної бібліотеки
- для LGPL: до "роботи, заснованої на бібліотеці", на відміну від "роботи, яка використовує бібліотеку". Таким чином, LGPL може потенційно поширити копілефт на нові файли.
Кордон: Використання MPL дозволяє користувачам не ділитися своїми вдосконаленнями
MPL - це ліцензія на файл-рівень copyleft. Це означає, що якщо хтось вбудує його у більший проект (статично чи динамічно) та внесе зміни у ваш файл, він повинен лише випустити зміни, внесені до цього конкретного файлу.
Якщо ви стурбовані збереженням цілісності вашої кодової бази відкритими, є крайні випадки, коли цього ефекту MPL від копіювання може бути недостатньо.
Наприклад, хтось може взяти один з головних файлів вашого проекту, додати "імпорт my_private_new_file" та змінити ваш основний метод, наприклад, додавши "my_private_new_file.newAwesomeFeature.run ()" .
І таким чином він міг додати нові функції до вашого проекту, лише випустивши модифікований основний файл і зберігаючи фактичну логіку нового закритого джерела в "my_private_new_file" .
Повернення основного файлу до спільноти просто дасть вам інформацію про те, що "Ей ви додали нову функцію", але це не дозволяє вам використовувати цю нову функцію відкрито ... Це може дратувати, якщо нова функція буде тісно - пов'язана з проблемою, яку намагається вирішити ваша бібліотека.
Очевидно, що це крайній випадок, і навряд чи хтось захоче цього зробити, але це ризик, про який ви повинні знати, користуючись MPLv2.
LGPL написано для заборони такої поведінки. Побачити:
Я цитую оригінальну ліцензію LGPL:
Зверніть пильну увагу на різницю між "роботою, заснованою на бібліотеці", і "роботою, яка використовує бібліотеку". Перший містить код, отриманий з бібліотеки, тоді як останній повинен поєднуватися з бібліотекою, щоб працювати.
Копілефт стосується лише "роботи на основі бібліотеки". Тепер що таке "робота на основі бібліотеки" на практиці? Це залишає простір для інтерпретації. Що не тільки приємна річ, оскільки це означає, що дотримання ліцензії стає складнішим і, отже, страшним. Це може призвести до того, що деякі люди просто не користуються вашою бібліотекою.
У цьому сенсі LGPL є більш обмежуючим, ніж MPL, але також захищає цілісність проекту.
MPL полегшує користувачам із власного світу виправити вашу бібліотеку та користуватися нею, при цьому все-таки потрібно ділитися виправленням
Перевагою для MPL є те, що якщо користувач знайде помилку у вашій бібліотеці, він може виправити її безпосередньо у файлі, не маючи роздавати весь свій код, а лише надаючи виправлення. Практично кажучи, розповсюджуючи свою роботу клієнту, він може просто надати посилання на вилку вашого проекту, що містить виправлення, і він хороший.
За допомогою LGPL все складніше. Якщо хтось розсилає ваш проект, виправляє помилку та вбудовує її статично у своє власне програмне забезпечення, він повинен розповсюдити своїм користувачам "роботу на основі бібліотеки" в рамках LGPL. Що є досить незрозумілим поняттям, особливо коли бібліотека є статично вбудованою ... У цьому відношенні я думаю, що це була первісна причина, чому в оригінальному LGPL немає такого поняття, як "статичний" виняток. Це робить ідентифікацію "роботи на основі бібліотеки" тривіальною: це динамічна бібліотека, яку ви викликаєте у власному програмному забезпеченні.
Як результат, MPL значно простіше використовувати власників-постачальників використовувати І надсилати виправлення у вашу бібліотеку, ніж LGPL.
У той же час, у більшості випадків власники постачальників не мають ані ресурсів, ані часу, щоб зануритися у вашу складну бібліотеку, і, швидше за все, не вирішили б її самі. Вони скоріше відкриють проблему у вашому репортажі GitHub або надішлють електронний лист у списку розсилки та чекають вашого виправлення.
У зв'язку з цим LGPL більше застосовує подібну поведінку. Але чи потрібне виконання справді?
Висновок
Вибір між LGPL та MPL є складним питанням, і, як правило, з ліцензією на програмне забезпечення, залежить від вашої мети. Обидві ліцензії дуже схожі, але в той же час надзвичайно різні. Вони були розроблені для дуже різних цілей та філософії.
LGPL був створений Фондом вільного програмного забезпечення, щоб забезпечити широке використання бібліотек вільного програмного забезпечення у світі, але завжди маючи на увазі ідею просування вільного програмного забезпечення та боротьби з власником програмного забезпечення. Це все є частиною стратегії щодо їх ідеології. Дивіться:
https://www.gnu.org/licenses/why-not-lgpl.html
MPL практична ліцензія розроблена Mozilla для забезпечення якої - то через ShareAlike в оригінальній бібліотеці, в той же час заохочуючи людей , щоб зробити патентовані програмні забезпечення і доповнення в верхній частині ( в тому числі і самої Mozilla), який є практика , що FSF санкціонує через LGPL, але все ще вважає шкідливим.
За своєю суттю MPLv2 багатьма розглядається як дозвільна ліцензія, тоді як LGPLv3, у тому числі зі статичним винятком, рідко називається таким чином.
EDIT
Я забув згадати щось важливе. LGPLv3 (зі статичним винятком або без нього) забороняє сприймання . Ви можете подумати, що це "деталь", але насправді це не так, залежно від вашої мети. Чи дбаєте ви про свободу користувачів? Тоді це не деталь. Чи хвилює вас, що вашу бібліотеку можна використовувати на пристрої Apple? VLC більше піклується про використання, тому вони вирішили використовувати LGPLv2, який не містить такого обмеження. Так само, це одна з причин, чому Linux продовжує використовувати GPLv2 . MPLv2 також не має обмежень щодо тивіонізації, очевидно, оскільки це ліцензія, створена з урахуванням "практичної" філософії з відкритим кодом, а не ідеології FSF.
Можуть бути й інші "незначні" речі, подібні цій, яку я пропустив.