GPL 정적 및 동적 연결 규칙은 해석 된 언어에 어떻게 적용됩니까? 동적 링크는

내 이해에 따르면 GPL은 GPL이 아닌 코드에서 GPL 코드로의 정적 링크를 금지하지만 GPL이 아닌 코드에서 GPL 코드로의 동적 링크는 허용합니다. 코드가 해석 언어 (예 : Perl)로 작성 되었기 때문에 문제의 코드가 전혀 연결되지 않은 경우는 무엇입니까?

동적 연결로 간주되면 규칙을 악용하기가 너무 쉬운 것 같지만 정적으로 간주되면 GPL이 아닌 코드에서 GPL 코드를 합법적으로 참조하는 것도 불가능한 것 같습니다! 컴파일 된 언어는 최소한 정적 링크와 동적 링크를 구분하지만 모든 “링크”가 스크립트를 실행하는 경우 명시 적 라이센스없이 의도를 알 수 없습니다!

아니면이 문제에 대한 나의 이해가 잘못되어 질문을 무시할 수 있습니까? 동적 링크가 포함 된 “클래스 패스 예외”에 대해서도 들었습니다. GPL의 일부가 아니라 추가 할 수있는 것이므로 라이센스에이 예외가 포함 된 경우에만 동적 링크가 허용됩니까?



답변

통역 언어에 관한 특정 질문에 대해서는 GPL FAQ가 매우 명확합니다 .

통역사에게 통역 된 프로그램은 단지 데이터 일뿐입니다. 저작권법에 따라 GPL과 같은 무료 소프트웨어 라이센스는 귀하가 통역사를 사용하는 데이터를 제한 할 수 없습니다. 원하는 방식으로 모든 데이터 (해석 된 프로그램)에서 실행할 수 있으며 해당 데이터를 다른 사람에게 라이센스하는 데 대한 요구 사항은 없습니다.

동적 링크와 정적 링크에 대한 일반적인 질문에 관해서는. 우선, FSF와 Stallman의 견해는 연결이 정적인지 동적인지에 관계없이 GPL은 어느 방식 으로든 감염된다는 것입니다. FSF GPL FAQ에서 :

프로그램이 플러그인을 동적으로 링크 하고 서로 함수 호출을 수행하고 데이터 구조를 공유하는 경우 단일 프로그램을 형성한다고 믿어 주 프로그램과 플러그인의 확장으로 취급해야합니다. 즉, GPL로 보호되는 플러그인과 무료 프로그램이 아닌 주 프로그램을 함께 사용하면 GPL을 위반하게됩니다.

[프로그램 이름] 을 다른 모듈과 정적으로 또는 동적으로 연결하면 [프로그램 이름]을 기반으로 결합 된 작업이 이루어집니다. 따라서 GNU General Public License의 이용 약관은 전체 조합을 포괄합니다.

그러나 이것은 법적 관점에서 의문의 여지가 있습니다. 실제로 동적 인 연결에 관한 법정에가는 유일한 경우 인 Galoob v. Nintendo – 항소 법원은 파생 저작물이 “저작권 저작물의 일부를 어떤 형태로 통합해야 한다 “고 판결했습니다 . 동적 연결의 경우에는 그렇지 않습니다.

어쨌든 동적 연결이 실제로 감염되는지 여부에 관계없이 해결 방법이 있습니다. 예를 들어 Nvidia에서 Linux 용 바이너리 드라이버를 제공하는 데 사용됩니다. (L) GPL 랩퍼를 작성하지만 작성자로서 특정 폐쇄 소스와 링크하기 위해 특별한 예외를 추가 할 수 있습니다. Vide FSF GPL FAQ .


답변

참고 : 이것은 법적 질문입니다. Programmers.SE는 법률 포럼이 아니라 프로그래밍 포럼입니다. 여기 사람들은 프로그래밍에 대해 약간 알고 있지만 법에 대해서는 아무것도 모릅니다. 법적 질문을하려면 법적 포럼에서 해당 주제에 대해 실제로 알고있는 사람들이있는 곳에 문의해야합니다.


GPL은 정적 또는 동적 연결에 대해 아무 말도하지 않습니다. 심지어 연결 대해 전혀 말하지 않습니다 . 내가 말한 모든 변호사 또는 판사는 정적 및 동적 연결 문제는 전혀 관련이 없다고 말합니다.

저작권은 창의성에 관한 것입니다. 정적 링크와 동적 링크는 기술적 구현 세부 사항입니다. 무언가가 정적으로 또는 동적으로 연결되어 있는지의 여부는 창조적 행위가 아니더라도 저작물의 저작권 상태를 변경할 수 없습니다.

귀하의 질문에, 당신은 “통역 된 언어”에 대해 이야기합니다. 그러나 그 용어는 이해가되지 않습니다 : 해석 된 언어와 같은 것은 없습니다. 언어는 추상적 인 수학적 규칙과 제한 사항입니다. 언어는 해석되거나 컴파일되지 않습니다. 언어 입니다. 용어 “해석 언어는”단지없는 잘못 이있다, 비 sensical . 영어가 입력 언어 인 경우 유형 오류 일 수 있습니다.

해석과 편집은 언어가 아닌 통역사 나 컴파일러의 특성입니다. 모든 언어는 인터프리터로 구현할 수 있으며 모든 언어는 컴파일러로 구현할 수 있습니다. 대부분의 언어에는 둘 다 있습니다. 대부분의 최신 언어 구현은 단일 실행 엔진에서 둘 다 결합합니다.

예를 들어, Rubinius Ruby 구현에는 Ruby 코드를 Rubinius 바이트 코드로 컴파일하는 정적 사전 컴파일러, Rubinius 바이트 코드를 해석하는 인터프리터 및 Rubinius 바이트 코드를 LLVM으로 컴파일하는 동적 Just-In-Time 컴파일러가 포함되어 있습니다. LLVM 인프라가 네이티브 머신 코드로 컴파일되는 IR. MacRuby Ruby 구현에는 인터프리터가 전혀 포함되어 있지 않으며 Ruby 코드를 LLVM IR로 직접 컴파일 한 다음 기본 머신 코드로 컴파일합니다.

반면에 C 또는 C ++에 대한 인터프리터가 있습니다.

이 모든 것은 단지 기술적 세부 사항 일뿐입니다. 저작권과는 전혀 관련이 없습니다.

누군가가 다른 사람의 저작권을 침해하는지 여부는 제 3자가 인터프리터로 프로그램을 실행하거나 먼저 컴파일할지 여부에 따라 달라집니다.

문제는 저작물이 다른 저작물에서 파생되는지 여부입니다. 동적으로 연결되어 여전히 파생 될 수 있으며 정적으로 연결되어 전혀 파생되지 않을 수 있습니다.


답변

이것과 IANAL 등에 얼마나 많은 진실이 있는지 전혀 모른다. 그러나 내 해석에서 중요한 것은 링크하는 라이브러리가 “이진”에 포함 된 형식인지 여부입니다 (동적 프로그래밍 언어의 경우 “이진”은 배포 된 소스 코드 일뿐입니다). 이 맥락에서 FSF의 “이진”에 대한 정의).

따라서 배포에 포함시키지 않고 코드에서 라이브러리를 참조하는 경우이를 “동적 연결”과 동등한 것으로 간주하는 반면, 라이브러리를 제품과 번들로 묶거나 라이브러리의 일부를 자신의 코드에 복사하여 붙여 넣으면 “정적 연결”시나리오가 적용됩니다. 이것은 최소한 GPL의 정신에 있습니다. 제한없이 GPL 소프트웨어를 자유롭게 사용 (실행, 검사, 참조) 할 있지만, 소프트웨어 에서 파생 되는 즉시 (일부 소프트웨어 를 링크 또는 복사하여) 자신의 배포 가능한 제품), 바이러스 성으로 바뀌고 소프트웨어도 GPL이어야합니다.