Skip to main content Link Menu Expand (external link) Document Search Copy Copied

라이선스 간 양립성

하나의 프로젝트에서 사용하고 있는 다양한 오픈소스 라이선스들은 서로 다른 의무사항을 가집니다.
이로 인해 라이선스의 의무사항들이 충돌하여, 라이선스 간 양립이 불가능한 경우가 발생할 수 있습니다.
이 가이드에서는 라이선스 간 양립 및 충돌할 수 있는 경우에 대해서 알아봅니다.

라이선스 간 충돌과 배포

의무사항이 모순(상호 위배)되는 서로 다른 2개 이상의 라이선스를 결합하는 경우, 배포가 불가능합니다.

예를 들어, Apache 2.0과 GPL 2.0 라이선스를 결합하는 경우, Apache 2.0는 특허권을 보장하는 라이선스입니다.
하지만 GPL 2.0 라이선스의 경우, 특별한 제약을 허용하지 않으며 GPL과 결합되는 모든 소스는 GPL로 라이선싱 되어야 합니다.
이로 인해 Apache 2.0의 의무사항을 지킬 수 없는 상황이 발생하고, 라이선스 충돌이 발생하여 양립이 불가능합니다.

다만, 라이선스 충돌은 단순히 두 개의 라이선스를 하나의 프로젝트에서 사용할 때 항상 발생하는 것이 아니기 때문에 각 라이선스의 의무사항 및 결합관계 등을 잘 따져봐야 합니다.

일반적인 라이선스 충돌 판단 기준

일반적인 라이선스 충돌의 판단 기준은 아래와 같습니다.

  • 각 라이선스의 적용 범위가 어떻게 되는가?
  • 적용 범위가 중첩되는 서로 다른 두 개 이상의 라이선스가 사용되었는가?
  • 각 라이선스 간 의무사항 충돌이 존재하는가?

라이선스 양립 및 충돌 케이스(Case) 분석

프로젝트에서 서로 다른 의무사항을 가지는 라이선스를 사용했을 때, 양립 혹은 충돌하는 케이스에 대해 알아봅니다.

프로젝트에서 Apache 2.0과 MPL 1.1 또는 LGPL 2.1 라이선스의 jar 파일을 결합하여 사용한 경우

  • MPL 1.1의 경우 카피레프트(Copyleft) 조항을 가지며, 그 적용 범위는 파일 단위이므로 충돌이 발생하지 않습니다.
  • LGPL 2.1의 경우 별개의 라이브러리로 구성되고, Apache 2.0이 사용된 소스와는 독립적으로 결합되는 동적 링크(Dynamic Linking) 형태의 사용이므로 충돌이 발생하지 않습니다.

프로젝트에서 LicenseFile.java에 Apache 2.0과 MPL 1.1 라이선스의 코드를 포함하여 사용한 경우

  • MPL 카피레프트(Copyleft) 적용 기준이 파일(File)이기 때문에, 충돌 조건을 판단해야 합니다.
  • MPL 1.1의 경우 별도의 제한 조건 추가를 허용하지 않으나, Apache 2.0은 특허에 대한 권한을 보장해야 합니다.

프로젝트에서 GPL 2.0과 Apache 2.0 라이선스의 오픈소스를 함께 사용한 경우

  • GPL 2.0의 카피레프트(Copyleft) 범위는 연결된 모든 소스코드이므로 Apache 2.0과 구체적으로 충돌 조건이 있는지 판단해야 합니다.
  • GPL 2.0의 경우에도 MPL 1.1과 같이 조건 추가 사항을 보장하지 않기 때문에, Apache 2.0과 충돌이 발생합니다.

내부 프로젝트를 Apache 2.0로 라이선싱 후 오픈소스로 배포하는 경우 프로젝트에 MPL 1.1, LGPL 2.1 라이선스의 jar 파일과 Apache 2.0 라이선스의 파일들을 사용한 경우

  • MPL 1.1와 LGPL 2.1의 결합관계는 동적 링크(Dynamic Linking)의 형태이며, 서로 다른 소스파일입니다. 이러한 경우 mpl.jar와 lgpl.jar를 제외한 전체 소스에 대해서 Apache 2.0을 적용하여 배포할 수 있습니다.
  • 예를 들어, Chromium Project의 경우 BSD-3로 라이선싱이 되어 배포되고 있으며, 그 외 사용한 라이브러리들은 서드파티(3rd-party) 디렉터리(Directory)에 별도로 모아서 배포하고 있습니다. 즉, 서드파티(3rd-party)를 제외한 모든 소스에 대해서만 BSD-3을 적용해서 배포하고, 서드파티(3rd-party) 디렉터리(Directory)의 소스들은 단순히 함께 패키징만 해서 배포되는 형태를 가집니다.

결론

라이선스의 적용 범위에 따라 파일 및 모듈로 제한된 경우, 적용 범위를 벗어난 다른 파일 및 모듈에서 사용한다면 라이선스 충돌 관련 문제는 없습니다.
또한, GPL, AGPL 등 전체 코드에서 적용되는 라이선스는 라이선스 충돌이 발생하면 배포가 불가능합니다.

참고

GPL 계열 라이선스 양립성

GPL(General Public License) 계열의 라이선스 들은 각 버전별로 결합이 가능한 경우와 가능하지 않는 경우가 있습니다.

보통 GPL 계열 라이선스 충돌은 LGPL(Lesser General Public License)과 GPL을 결합할 때 발생하게 됩니다.
두 라이선스 모두 추가 제약 사항을 금지하는 조항을 가지고 있습니다.

이때, LGPL 2.1의 경우, 라이브러리 형태로 결합 시 카피레프트(Copyleft)가 적용되지 않는데, 이는 추가 제약 사항에 해당됩니다.
따라서, GPL 2.0과 LGPL 2.1 버전을 사용 시, 충돌이 발생하게 됩니다.
자세한 충돌 관계는 GNU 사이트1에서 확인할 수 있습니다.



© Kakao Corp. All rights reserved.
This site uses Just the Docs, a documentation theme for Jekyll.