본문 바로가기
개발 및 운영

GPLv2 라이센스 관련

by Joseph.Lee 2020. 11. 26.

본 글은 법적인 효력이 없으며 그냥 이리저리 찾아본걸 정리한 것임.

Kernel 관련 GPLv2

References

예외조항

커널에 system call으로 접근하는 Application에 대해서는 Kernel의 라이센스 적용을 받지 않음

Loadable Kernel Module 형태의 Device Driver

EXPORT_SYMBOL로 Export된 심볼은 GPL 라이센스가 아닌 모듈도 사용할 수 있지만
EXPORT_SYMBOL_GPL로 Export된 심볼은 GPL라이센스가 아닌 모듈은 사용할 수 없다.

근데 IOCTL은 어케 되는것일까.... 궁금하다...

Application 관련 GPLv2

Reference

GPL 전파 범위

Static Linking, Dynamic Linking 등을 통해 로드되어, 동일한 Executable 프로그램의 메모리 공간에서 실행되는 경우 GPL 의 영향을 받는다.

소스를 공개하지 않아도 되는 상황

설치 프로그램

Reference: https://www.gnu.org/licenses/gpl-faq.en.html#GPLCompatInstaller

GPL 소프트웨어를 일종의 설치 소프트웨어와 함께 묶고 싶습니다. 해당 설치 프로그램에 GPL 호환 라이선스가 필요합니까? ( #GPLCompatInstaller )

아니요. 설치 프로그램과 설치 파일은 별도의 작업입니다. 결과적으로 GPL의 조건은 설치 소프트웨어에 적용되지 않습니다.

개별 프로그램

프로그램과 플러그인은 언제 단일 결합 프로그램으로 간주됩니까?
https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.html.en#TOCGPLPlugins

기본 프로그램이 플러그인을 호출하는 방법에 따라 다릅니다. 메인 프로그램이 fork 및 exec를 사용하여 플러그인을 호출하고 복잡한 데이터 구조를 공유하거나 복잡한 데이터 구조를 앞뒤로 전달하여 친밀한 통신을 설정하면 하나의 결합 된 프로그램이 될 수 있습니다. 간단한 fork 및 exec를 사용하여 플러그인을 호출하고 이들 간의 긴밀한 통신을 설정하지 않는 기본 프로그램은 플러그인이 별도의 프로그램이되도록합니다.
메인 프로그램이 플러그인을 동적으로 연결하고 서로에 대한 함수 호출을 만들고 데이터 구조를 공유한다면, 메인 프로그램과 플러그인 모두의 확장으로 취급되어야하는 단일 결합 프로그램을 형성한다고 생각합니다. 기본 프로그램이 플러그인을 동적으로 연결하지만 이들 간의 통신이 일부 옵션을 사용하여 플러그인의 '기본'기능을 호출하고 반환을 기다리는 것으로 제한되는 경우 이는 경계선 인 경우입니다.

공유 메모리를 사용하여 복잡한 데이터 구조와 통신하는 것은 동적 연결과 거의 동일합니다.

"단순한 집계"와 "두 모듈을 하나의 프로그램으로 결합"의 차이점은 무엇입니까?
https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.html.en#TOCMereAggregation

두 프로그램을 단순히 통합한다는 것은 동일한 CD-ROM 또는 하드 디스크에 나란히 놓는 것을 의미합니다. 이 용어는 단일 프로그램의 일부가 아닌 별도의 프로그램 인 경우에 사용합니다. 이 경우 프로그램 중 하나가 GPL의 적용을 받으면 다른 프로그램에 영향을주지 않습니다.
두 모듈을 결합한다는 것은 하나의 더 큰 프로그램을 형성하도록 함께 연결하는 것을 의미합니다. 어느 한 부분이 GPL의 적용을받는 경우 전체 조합도 GPL에 따라 공개되어야합니다. 그렇게 할 수 없거나 그렇지 않을 경우 결합 할 수 없습니다.

두 부분을 하나의 프로그램으로 결합하는 것은 무엇입니까? 이것은 궁극적으로 판사가 결정할 법적 질문입니다. 우리는 적절한 기준이 통신 메커니즘 (exec, 파이프, rpc, 공유 주소 공간 내의 함수 호출 등)과 통신의 의미 (어떤 종류의 정보가 교환되는지)에 따라 달라진다고 믿습니다.

모듈이 동일한 실행 파일에 포함되어 있으면 확실히 하나의 프로그램에 결합됩니다. 모듈이 공유 주소 공간에서 함께 연결되어 실행되도록 설계 되었다면 이는 거의 확실하게 모듈을 하나의 프로그램으로 결합하는 것을 의미합니다.

반대로 파이프, 소켓 및 명령 줄 인수는 일반적으로 두 개의 개별 프로그램간에 사용되는 통신 메커니즘입니다. 따라서 통신에 사용되는 모듈은 일반적으로 별도의 프로그램입니다.
그러나 통신의 의미가 충분히 친밀하고 복잡한 내부 데이터 구조를 교환한다면, 그것 역시 두 부분을 더 큰 프로그램으로 결합 된 것으로 간주하는 기초가 될 수 있습니다.

반응형

댓글