동일한 저장소의 다른 분기에 대해 다른 라이센스 사용

Aug 20 2020

GitHub에 중간 규모 프로젝트가있는 Git 저장소가 있습니다. GPL 라이브러리에 따라 일부 구성 요소가 있기 때문에 저장소는 현재 GPL에 따라 라이센스가 부여됩니다. 그러나 GPL 라이선스 라이브러리는 일부 구성 요소 (분리 가능)에서만 사용되며 프로젝트의 나머지 부분은 이러한 구성 요소없이 완벽하게 사용할 수 있습니다. 따라서 MIT 라이선스에 따라 GPL 라이브러리에 의존하지 않는 모든 것에 라이선스를 부여하고 싶습니다. 이를 달성하기위한 모범 사례는 무엇입니까?

내 생각은 두 개의 다른 브랜치를 갖는 것입니다. 하나의 브랜치는 전체 코드를 포함하고 GPL에 따라 라이센스가 부여됩니다. 다른 지점은 GPL 코드에 의존하고 MIT에 따라 라이센스가 부여 된 모든 기능을 제거합니다. 동일한 저장소의 서로 다른 지점에 대해 서로 다른 라이센스를 갖는 것이 가능하고 /하거나 일반적입니까? 그렇지 않다면 더 나은 대안은 무엇입니까?

기술적으로 새로운 비 GPL 브랜치의 전체 역사에 한때 GPL 코드가 포함되었다는 것이 문제일까요? 아니면 분기에 새 MIT 라이센스 파일을 추가하기 전에 모든 GPL 코드를 해당 분기에서 제거하면 괜찮습니까?

참고 이 문제는 다소 비슷하지만, 난 내가 더 우려되는 느낌이 기술적 인 구현을 . 즉, 현재 어떤 브랜치에 있는지에 따라 저장소의 루트 디렉토리에 두 개의 다른 LICENSE 파일을 간단히 넣을 수 있습니까?

답변

5 amon Aug 20 2020 at 16:51

Git 브랜치는 동일한 프로젝트의 다른 "에디션"을 유지하는 데 잘 작동하지 않습니다. 변경 사항을 완전히 병합하지 않고 브랜치간에 공유 할 수있는 좋은 방법이 없기 때문입니다. 따라서 단순히 기술적 인 이유로 라이선스가 다른 브랜치를 사용하지 말 것을 촉구합니다. 이러한 분기는 사용자가 쉽게 찾을 수 없습니다.

대신 모든 코드를 하나의 메인 브랜치에 보관하되 라이선스가 다른 코드를 다른 폴더에 보관하고 어떤 코드가 어떤 라이선스에 속하는지 명확하게하십시오.

GPL은 다운 스트림 코드가 GPL에 속할 것을 요구하지 않습니다. 모든 파생물 (전체)이 동일한 GPL 라이선스하에 있어야합니다. 그러나 이것은 당신이 직접 작성한 컴포넌트가 MIT와 같은 GPL 호환 라이센스하에있을 때 만족할 수 있습니다. 의심의 여지를 없애기 위해 이러한 구성 요소를 "MIT 또는 GPL"로 이중 라이센스를 부여 할 수도 있습니다. 이것은 "Apache-2.0 또는 GPL-2.0-only"와 같이 호환되지 않는 라이센스에 중요합니다.

따라서 가장 좋은 방법은 GPL이 적용되는 부분을 직접 작성한 부분에서 분리하고 최상위 라이선스를 사용하여 어떤 라이선스에서 어떤 부분을 사용할 수 있는지 설명하는 것입니다. 이를 매우 정확하게 수행하려면 glob 패턴을 라이선스와 연결하는 데비안의 기계 판독 가능 copyright파일 형식 을 채택 할 수도 있습니다. 별도의 파일이 원하는대로 당신은 아마도 동일한 라이센스 파일에 하나 전체 라이센스 텍스트를 저장하거나 수 LICENSE.GPL.txt, LICENSE.MIT.txt또는 각각의 디렉토리에.

현재 필요로 일부 지역의 MIT를 이동, GPL 하에서 전체 코드를 제공하고 있기 때문에 라이센싱을 . 귀하가 단독 기여자 인 경우 이는 사소한 일입니다. 귀하가 단독 저작권 소유자로서 원하는대로 라이선스를 발급 할 수 있기 때문입니다. 그러나 다른 기여자가있는 경우에는 재 라이센스에 대한 동의를 얻거나 기여를 제거해야합니다 (일반적으로 GPL이 적용되는 기여 이전의 마지막 상태로 시작하는 구성 요소를 다시 작성해야하기 때문에 매우 까다로울 수 있음). 나는 Git 히스토리가 재 라이선싱 후에도 GPL에 포함 된 파일과 동일한 파일을 표시하는 것이 중요하지 않다고 생각합니다. 이전 라이센스는 해당 이전 버전에 대해 여전히 유효하며 새 라이센스는 해당 새 버전에 대해 여전히 유효합니다.