DougM과 AER의 대답은 공정한 지적입니다. 정적 예외가있는 MPLv2 및 LGPLv3은 카피 레프트를 트리거하는 이벤트와 관련하여 동일합니다. 그러나 LGPL과 MPL의 또 다른 중요한 차이점이 누락되었다고 생각합니다. 카피 레프트가 트리거되면 카피 레프트는 다음에 적용됩니다.
- MPL의 경우 : 원본 라이브러리와 정확히 동일한 파일
- LGPL의 경우 : "라이브러리를 사용하는 작업"과 반대로 "라이브러리 기반 작업" 따라서 LGPL은 자신의 카피 레프트를 새로운 파일로 확장 할 수 있습니다.
Edge-case : MPL을 사용하면 사용자가 개선 사항을 공유 할 수 없습니다
MPL은 파일 수준의 카피 레프트 라이센스입니다. 누군가가 더 큰 프로젝트에 (정적으로 또는 동적으로) 파일을 포함시키고 파일을 변경하면이 특정 파일에 대한 변경 사항 만 해제하면됩니다.
코드베이스의 무결성을 열어 두어야 할 경우 MPL의 이러한 카피 레프트 효과로 충분하지 않은 경우가 있습니다.
예를 들어, 누군가 프로젝트의 기본 파일 중 하나를 가져 와서 "import 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은 자유 소프트웨어 재단 (Free Software Foundation)에 의해 독점적 세계에서 자유 소프트웨어 라이브러리의 광범위한 사용을 가능하게하기 위해 만들어졌지만 자유 소프트웨어를 홍보하고 독점 소프트웨어와의 싸움이라는 생각을 항상 염두에두고 있습니다. 그것은 모두 그들의 이념을 향한 전략의 일부입니다. 참조 :
https://www.gnu.org/licenses/why-not-lgpl.html
MPL은 Mozilla가 원래 라이브러리에 대해 일종의 공유 를 적용하도록 설계된 실제 라이센스 이며, 사람들이 여전히 독점 소프트웨어 (부가 기능 포함)를 Mozilla (Mozilla 자체 포함)에 만들도록 권장합니다. LGPL이지만 여전히 유해한 것으로 간주합니다.
본질적으로 MPLv2는 많은 사람들에게 허용되는 라이센스로 간주되는 반면 정적 예외를 포함한 LGPLv3은 이러한 방식으로 거의 불려지지 않습니다.
편집하다
중요한 것을 언급하는 것을 잊었습니다. LGPLv3 (정적 예외 유무에 관계없이)는 tivoization을 금지 합니다. "세부 사항"이라고 생각할 수도 있지만 목표에 따라 실제로는 그렇지 않습니다. 사용자 자유에 관심이 있습니까? 그런 다음 세부 사항이 아닙니다. Apple 기기에서 라이브러리를 사용할 수 있습니까? VLC는 사용에 대해 더 신경을 쓰므 로 그러한 제한이없는 LGPLv2를 사용하기로 결정했습니다 . 마찬가지로, Linux가 GPLv2를 계속 사용 하는 이유 중 하나입니다 . MPLv2는 또한 FSF 이념이 아니라보다 "실용적인"오픈 소스 철학을 염두에두고 만들어진 라이센스이기 때문에 명백한 제한이 없습니다.
내가 놓친 이와 같은 "사소한"것들이있을 수 있습니다.