Câu trả lời của DougM và AER làm cho một điểm công bằng. MPLv2 và LGPLv3 với ngoại lệ tĩnh giống nhau về các sự kiện sẽ kích hoạt copyleft. Tuy nhiên, tôi nghĩ chúng ta đang thiếu một sự khác biệt rất quan trọng khác giữa LGPL và MPL. Khi copyleft được kích hoạt, copyleft áp dụng cho:
- cho MPL: với các tệp rất chính xác của thư viện gốc của bạn
- đối với LGPL: đối với "công việc dựa trên thư viện" trái ngược với "công việc sử dụng thư viện". Vì vậy, LGPL có khả năng có thể mở rộng copyleft của mình sang các tệp mới.
Case-case: Sử dụng MPL cho phép người dùng không chia sẻ các cải tiến của họ
MPL là một giấy phép copyleft cấp tập tin. Điều đó có nghĩa là nếu ai đó nhúng nó vào một dự án lớn hơn (tĩnh hoặc động) và thực hiện thay đổi cho tệp của bạn, anh ta chỉ phải phát hành thay đổi được thực hiện cho tệp cụ thể này.
Nếu bạn lo lắng về việc giữ tính toàn vẹn của cơ sở mã của mình mở, có những trường hợp cạnh trong đó hiệu ứng sao chép này của MPL có thể không đủ.
Ví dụ: ai đó có thể lấy một trong các tệp chính của dự án của bạn, thêm "nhập my_private_new_file" và sửa đổi phương thức chính của bạn chẳng hạn bằng cách thêm "my_private_new_file.newAw đũaFeature.run ()" .
Và bằng cách này, anh ta có thể thêm các tính năng mới vào dự án của bạn trong khi chỉ phát hành tệp chính đã sửa đổi và giữ logic thực tế của tính năng mới đóng trong "my_private_new_file" .
Việc đưa tệp chính trở lại cộng đồng chỉ cung cấp cho bạn thông tin rằng "hey bạn đã thêm một tính năng mới" nhưng nó không cho phép bạn kết hợp tính năng mới này trong mở ... Thật khó chịu nếu tính năng mới bị chặt chẽ liên quan đến vấn đề mà thư viện của bạn đang cố gắng giải quyết.
Rõ ràng, đó là một trường hợp cạnh và rất khó có ai đó muốn làm điều đó, nhưng đó là một rủi ro mà bạn phải nhận thức được khi sử dụng MPLv2.
LGPL được viết để cấm các hành vi đó. Xem:
Tôi trích dẫn giấy phép LGPL gốc:
Hãy chú ý đến sự khác biệt giữa "công việc dựa trên thư viện" và "công việc sử dụng thư viện". Cái trước chứa mã có nguồn gốc từ thư viện, trong khi cái sau phải được kết hợp với thư viện để chạy.
Copyleft chỉ áp dụng cho "công việc dựa trên thư viện". Bây giờ "công việc dựa trên thư viện" trong thực tế là gì? Nó để lại không gian để giải thích. Đó không chỉ là một điều tốt đẹp vì nó có nghĩa là việc tuân thủ giấy phép của bạn trở nên phức tạp hơn và do đó đáng sợ. Nó có thể dẫn một số người chỉ đơn giản là không sử dụng thư viện của bạn.
Theo nghĩa này, LGPL hạn chế hơn MPL, nhưng cũng bảo vệ tính toàn vẹn của dự án nhiều hơn.
MPL giúp người dùng từ thế giới độc quyền dễ dàng sửa thư viện của bạn và sử dụng nó, trong khi vẫn phải chia sẻ bản sửa lỗi
Một lợi thế cho MPL là nếu người dùng tìm thấy lỗi trong thư viện của bạn, anh ta có thể sửa nó trực tiếp trong tệp mà không phải đưa ra tất cả mã của mình mà chỉ cung cấp bản sửa lỗi. Thực tế mà nói, khi phân phối công việc của mình cho khách hàng, anh ta chỉ có thể cung cấp một liên kết đến một ngã ba của dự án của bạn có chứa bản sửa lỗi, và anh ta rất tốt.
Bằng cách sử dụng LGPL, mọi thứ phức tạp hơn. Nếu ai đó giả mạo dự án của bạn, sửa lỗi và nhúng nó vào phần mềm độc quyền của anh ta, anh ta phải phân phối cho người dùng của mình "công việc dựa trên thư viện" theo LGPL. Đó là một khái niệm khá mơ hồ, đặc biệt là khi thư viện được nhúng tĩnh ... Về vấn đề này, tôi nghĩ đó là lý do ban đầu tại sao không có ngoại lệ "tĩnh" trong LGPL gốc. Nó làm cho việc xác định "công việc dựa trên thư viện" trở nên tầm thường: đó là thư viện động mà bạn gọi trong phần mềm độc quyền của mình.
Do đó, MPL giúp các nhà cung cấp độc quyền dễ dàng sử dụng VÀ gửi bản sửa lỗi đến thư viện của bạn hơn LGPL.
Đồng thời, hầu hết các nhà cung cấp độc quyền không có tài nguyên cũng không có thời gian để đi sâu vào thư viện phức tạp của bạn và rất có thể họ sẽ không tự sửa nó. Họ thà mở một vấn đề trên repo GitHub của bạn, hoặc gửi e-mail trong danh sách gửi thư và chờ sửa chữa của bạn.
Về vấn đề này, LGPL thi hành nhiều loại hành vi này. Nhưng thực thi có thực sự cần thiết?
Phần kết luận
Lựa chọn giữa LGPL và MPL là một câu hỏi khó và như thường lệ với giấy phép phần mềm, tùy thuộc vào mục tiêu của bạn. Cả hai giấy phép đều rất giống nhau nhưng đồng thời vô cùng khác nhau. Chúng được thiết kế cho các mục tiêu và triết lý rất khác nhau.
LGPL được Quỹ Phần mềm Tự do tạo ra để cho phép sử dụng rộng rãi các thư viện Phần mềm Tự do trong thế giới độc quyền nhưng luôn có ý tưởng thúc đẩy Phần mềm Tự do và chống lại phần mềm độc quyền. Tất cả là một phần của chiến lược hướng tới ý thức hệ của họ. Xem:
https://www.gnu.org/licenses/why-not-lgpl.html
MPL là một giấy phép thực tế được Mozilla thiết kế để thực thi một số loại chia sẻ tương tự với thư viện ban đầu, trong khi vẫn khuyến khích mọi người tạo ra các phần mềm và tiện ích bổ sung độc quyền (kể cả chính Mozilla), đây là một hoạt động mà FSF ủy quyền LGPL nhưng vẫn coi có hại.
Về bản chất, MPLv2 được nhiều người coi là giấy phép cho phép, trong khi LGPLv3 bao gồm ngoại lệ tĩnh hiếm khi được gọi theo cách này.
CHỈNH SỬA
Tôi quên đề cập đến một cái gì đó quan trọng. LGPLv3 (có hoặc không có ngoại lệ tĩnh) cấm tivoization . Bạn có thể nghĩ rằng đó là một "chi tiết" nhưng thực tế không phải vậy, tùy thuộc vào mục tiêu của bạn. Bạn có quan tâm đến người dùng Tự do không? Sau đó, nó không phải là một chi tiết. Bạn có quan tâm rằng thư viện của bạn có thể được sử dụng trên thiết bị của Apple không? VLC quan tâm nhiều hơn đến việc sử dụng, vì vậy họ đã quyết định sử dụng LGPLv2 không có hạn chế đó. Tương tự, đó là một trong những lý do tại sao Linux tiếp tục sử dụng GPLv2 . MPLv2 cũng không có bất kỳ hạn chế tiviozation nào, rõ ràng vì đây là giấy phép được tạo ra với triết lý Nguồn mở "thực tế" hơn, không phải là ý thức hệ của FSF.
Có thể có những thứ "nhỏ" khác như thế này mà tôi đã bỏ lỡ.