“클래스 패스 예외가있는 GPL”은 실제로 무엇을 의미합니까?


69

오라클은 GPL에 따라 모든 Java 관련 오픈 소스 코드를 클래스 패스 예외 로 라이센스하는 것으로 보입니다 . 내가 이해 한 바에 따르면,이 라이브러리를 자신의 코드와 함께 GPL에서 다루지 않아도되는 제품으로 결합 할 수있는 것으로 보입니다.

  1. 어떻게 작동합니까?
  2. 이 수업을 어떻게 사용할 수 있고 사용할 수없는 예는 무엇입니까?
  3. LGPL과 달리이 새로운 라이센스가 사용 된 이유는 거의 동일하지만, 더 잘 확립되고 이해되는 이유는 무엇입니까?
  4. LGPL과의 차이점은 무엇입니까?

1
나는 이것을 wikipedia에서 발견했다 : en.wikipedia.org/wiki/… 이것들은 약간 정리 하지만, 왜 누군가가 이것을 LGPL보다 이것을 사용하는지 이해하지 못한다. 좋은 질문!

1
Wikipedia 페이지에는 LGPL의 조항 인 "사용자가 자신의 버전으로 라이브러리를 교체 할 수 있어야합니다"와 같은 내용은 언급되어 있지 않습니다. 어쩌면 GPL + 예외는 그것을 필요로하지 않습니까?
Thilo

1
"LGPL은 연결 예외에 대한 추가 요구 사항을 공식화합니다. 사용하는 라이브러리의 일부를 수정하고 그러한 수정을 디버그하기 위해 (프로그램 및 라이브러리의 리버스 엔지니어링) 수정을 허용해야합니다."
틸로

이 경우, 어떤 일이 나는 되지 이 라이선스에 따라 할 수? 라이센스가있는 코드 (선택 + 선택 클래스)를 내 코드베이스 (물론 수정되지 않은)에 복사 할 수 있습니까? 자동화 된 빌드 도구를 사용하여 결과 바이너리를 수정할 수 있습니까? 난독 화기, 최소화 기, 데드 코드 스트리퍼?
Thilo

자신의 코드가 "클래스 패스 예외가있는 GPL"라이센스하에 릴리스 된 경우에만 이 코드를 복사하여 자신의 코드에서 사용할 수 있습니다 . 귀하의 코드가 독점적이거나 MIT와 같은 대부분의 다른 오픈 소스 라이센스에 따라 사용할 수 없습니다.
Abhi Beckert

답변:


69

우선, 저는 변호사가 아닙니다. 그러나 많은 라이센스를 연구하고 라이센스에 관한 문제를 이해했습니다.

둘째, 나는 이것이 오래된 질문이라는 것을 알고 있지만 여전히 혼란과 우려의 포인트라고 생각합니다. 그것이 관심의 대상이 아니라면 그럴 것입니다. 라이센스를 선택하는 것은 특히 여러 기고자가 참여하는 경우 사소하게 도로를 바꿀 수없는 큰 문제입니다.

(L) GPL은 불행히도 C / C ++를 염두에두고 작성되었습니다. "소스 코드", "오브젝트 코드", "동적 링크", "정적 링크", "컴파일러"및 "오브젝트 코드 인터프리터"에 대해 설명합니다. 따라서 동일한 컴파일 기술을 따르지 않는 다른 언어 (예 : Java의 바이트 코드, Python의 적시 컴파일 또는 Javascript의 해석 된 자연)를 번역하려면 약간의 추측과 가정이 필요합니다. 법에 대해 이야기 할 때, 즉 두 당사자가 논쟁을 벌이는 최종 법원 사건에 ​​대해 생각할 때 명확한 구분이없는 것은 나쁜 것입니다.

표준 GPL 라이센스 코드는 의도가 매우 간단합니다. 해당 코드를 사용하는 사람은 코드를 배포하거나 판매 할 때 모든 사용자에게 코드를 공개해야합니다. 이것이 Richard Stallman이 명확하고 깨끗하게 만들고 싶었던 GPL 바이러스입니다.

LGPL은 원래 바이러스 성이없는 "라이브러리"를 허용하려는 시도였습니다. 그러나 그들은 여전히 ​​최종 사용자가 스스로 라이브러리를 교체 할 수 있기를 원했기 때문에 "정적"링크와 "동적"링크의 차이점이 있습니다. 사용자는 다른 동적 링크 라이브러리로 교체 할 수 있으므로 GPL로 라이센스가 부여됩니다. 그리고 정적 링크를 사용하려면 사용자가 GPL이어야합니다. 라이센스는 실제로 C / C ++에서는 명확하지만 Java, Python, Javascript 등의 세계에서는 명확하지 않은 "헤더 파일"에 대해 설명합니다. 따라서 LGPL 자료의 L ( "라이브러리")은 가장 탁합니다.

이것은 문제의 핵심에 도달합니다. 불분명 한 것은 법의 세계에서 나쁜 것입니다. GPL 또는 LGPL 구성 요소를 사용하여 무언가를 만들려고한다면, 법정에 입소 할 경우 법적 근거가 무엇인지 확실히 알고 싶습니다. 그러나 현재로서는 법적인 판례를 확립하는 좋은 법원 사건이 없었고 이와 같은 포럼에 대한 지적 주장 만 있었기 때문에 확실하지 않습니다.

여기에 클래스 패스 예외가 매우 중요합니다. 라이센스에 따른 코드는 (L) GPL이지만, 해당 코드를 사용 하는 모든 코드는 원하는 라이센스를 따를 수 있습니다. if, ands, 또는 buts는 없습니다. 핵심 코드 (예 : 버그 수정)를 변경해도 GPL의 일부로 해당 변경 사항을 릴리스해야합니다. 그러나을 사용해도 감염되지는 않습니다.

비즈니스 관점에서, 일부는 왜 10 '극으로 GPL 코드를 건드리고 싶지 않은지 이해합니다. 법적 지위가 불분명하고 법적 선례가 마침내 결정될 때 사업이 10 년 동안 멈출 수 있습니다. 또는 법적 선례를 세우기 위해 수년간 법원에 갇혀있을 수도 있습니다. 어쨌든 그들은 그 전투 비용을 위험에 빠뜨리고 싶지 않습니다. Classpath Exception 조항을 추가하면 법적 질문을 없애고 (심각한) 잠재적 인 법원 사건을 피할 수 있습니다.

따라서 클래스 패스 예외는 LGPL과 크게 다릅니다. GPL 또는 LGPL 소스 코드 또는 라이브러리를 GPL 이외의 용도로 사용할 수 있도록 밝은 선을 그리는 것이 합법적으로 깨끗한 방법입니다.


20
IANAL, 그러나 나는 Classpath Exception의 제작자 중 하나이며 이것이 정답입니다. 개발자가 바이너리를 정적으로 연결하는 AOT 컴파일 임베디드 사용 사례를 지원하기 위해 예외가 작성되었습니다 (이 경우 gcj 사용). libgcc 라이센스와 같은 것이 필요했기 때문에이를 기반으로 Classpath Exception의 첫 번째 버전을 작성했습니다. 그 이후로 성숙해졌지만 그 정신은 같습니다.
Anthony Green

6

클래스 경로 예외가있는 GPL은 대부분의 경우 LGPL처럼 동작합니다.

즉, 필요할 때 라이브러리의 소스를 배송 할 수 있어야합니다. 그것은 당신이 당신의 자신의 소스를 배송 할 수 있어야한다는 것을 의미하지는 않습니다. 정적으로 링크 된 경우 라이브러리를 교체 할 방법을 제공 할 필요는 없지만 공개 키를 사용하여 교체를 방지 할 수는 없습니다.


-3

"클래스 패스 예외가있는 GPL"스타일 라이센스는 LGPL보다 오래된 것 같습니다.

아마도 누군가가 여전히 그것을 사용하는 유일한 이유는 코드를 제공 한 모든 사람의 서면 허가없이 GPL 코드를 LGPL 코드로 마이그레이션 할 수 없기 때문일 것입니다.


7
LGPL의 첫 번째 버전은 1991 년에 출시되어 Java보다 이전 버전입니다. en.wikipedia.org/wiki/LGPL
Thilo

Java보다 먼저 사용되지만 Java 내부의 모든 코드보다 먼저 사용됩니까? Java의 첫 번째 릴리스에는 이전 "GPL with classpath"프로젝트의 코드가 포함되어있을 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.