문제

저는 Python으로 GPL 라이센스 응용 프로그램을 개발 중이며 GPL이 내 프로그램에서 독점 플러그인을 사용할 수 있도록 허용하는지 알고 싶습니다.이것은 FSF가 말하는 것 문제에 대해:

GPL에 따라 출시된 프로그램이 플러그인을 사용하는 경우 플러그인 라이선스에 대한 요구 사항은 무엇입니까?

프로그램이 플러그인을 호출하는 방법에 따라 다릅니다.프로그램이 포크와 exec를 사용하여 플러그인을 호출하는 경우 플러그인은 별도의 프로그램이므로 기본 프로그램에 대한 라이센스에는 플러그인에 대한 요구 사항이 없습니다.

프로그램이 플러그인을 동적으로 연결하고 서로 함수를 호출하고 데이터 구조를 공유하는 경우, 우리는 이들이 단일 프로그램을 형성한다고 믿으며, 이는 기본 프로그램과 플러그인 모두의 확장으로 취급되어야 합니다.이는 플러그인이 GPL 또는 GPL 호환 자유 소프트웨어 라이센스에 따라 릴리스되어야 하며 해당 플러그인이 배포될 때 GPL 조건을 따라야 함을 의미합니다.

프로그램이 플러그인을 동적으로 연결하지만 이들 간의 통신이 일부 옵션을 사용하여 플러그인의 '기본' 기능을 호출하고 반환을 기다리는 것으로 제한되는 경우 이는 경계선 사례입니다.

포크/실행과 동적 연결 사이의 구별은 일종의 인위적일 뿐 아니라 해석된 언어에도 적용되지 않습니다.다음을 통해 로드되는 Python/Perl/Ruby 플러그인은 어떻습니까? import 또는 execfile?

(편집하다:나는 왜 포크/exec와 동적 연결 사이의 차이를 이해하지만, GPL을 준수하고 싶지만 "정신"에 어긋나는 누군가가 포크/exec 및 프로세스 간 통신을 사용하여 거의 무엇이든 할 수 있습니다).

가장 좋은 해결책은 내 라이센스에 예외를 추가하여 독점 플러그인의 사용을 명시적으로 허용하는 것입니다. 하지만 현재 플러그인을 사용하고 있기 때문에 그렇게 할 수 없습니다. Qt/PyQt 그것은 GPL입니다.

도움이 되었습니까?

해결책

<인용구>

인위적인 것 외에도 fork / exec와 동적 연결의 차이

인위적이라고 생각하지 않습니다. 기본적으로 그들은 통합 수준에 따라 분할을 만들고 있습니다. 프로그램에 API 수준 통합없이 기본적으로 실행되고 잊어 버리는 "플러그인"이있는 경우 결과 작업은 파생 작업으로 간주되지 않을 것입니다. 일반적으로 단순히 분기 / 실행 된 플러그인은이 기준에 적합하지만 그렇지 않은 경우도있을 수 있습니다. 이 경우는 특히 "플러그인"코드가 코드와 독립적으로 작동하는 경우에 적용됩니다.

반면에 코드가 광범위하게 API를 호출하거나 데이터 구조를 긴밀하게 통합하는 것과 같은 GPL 작업에 크게 의존하는 경우에는 파생 된 작업으로 간주 될 가능성이 높습니다. 즉, "플러그인"은 GPL 제품 없이는 단독으로 존재할 수 없으며이 플러그인이 설치된 제품은 본질적으로 GPL 제품에서 파생 된 작업입니다.

좀 더 명확하게하기 위해 동일한 원칙이 해석 된 코드에 적용될 수 있습니다. 해석 된 코드가 API에 크게 의존하는 경우 (또는 그 반대의 경우) 파생 작업으로 간주됩니다. 극히 적은 통합으로 자체적으로 실행되는 스크립트라면 그렇지 않을 수도 있습니다.

이게 더 이해가 되나요?

다른 팁

@다니엘

포크/실행과 동적 연결 사이의 구별은 일종의 인위적일 뿐 아니라 해석된 언어에도 적용되지 않습니다.import 또는 execfile을 통해 로드되는 Python/Perl/Ruby 플러그인은 어떻습니까?

구분이 잘 안가네요 ~이다 인공의.동적 로드 후 플러그인 코드는 GPL 코드와 실행 컨텍스트를 공유합니다.포크/실행 후에는 그렇지 않습니다.

어쨌든 나는 그렇게 추측할 것이다 importing을 사용하면 새 코드가 GPL 비트와 동일한 실행 컨텍스트에서 실행되므로 이를 동적 링크 사례처럼 처리해야 합니다.아니요?

플러그인과 기본 프로그램간에 얼마나 많은 정보를 공유하고 있습니까?단순히 실행하고 결과를 기다리는 것 이상을 수행하는 경우 (프로세스에서 프로그램과 플러그인간에 데이터를 공유하지 않음) 독점적으로 처리 할 수 있습니다. 그렇지 않으면 GPL이 필요합니다. 'd.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top