GPL 링크 예외(GPL Linking Exception)는 GNU 일반 공중 사용 허가서(GPL)가 적용된 라이브러리나 프로그램 코드를 다른 소프트웨어와 링크(link)하여 결합할 때, 결합된 전체 저작물에 GPL의 '전염성(Copyleft)' 효과가 미치지 않도록 허용하는 특허 라이선스 예외 조항을 의미한다.
배경과 목적 표준 GPL(버전 2 및 3)은 라이선스가 적용된 코드와 링크되어 단일 실행 파일을 구성하는 모든 코드에 대해 GPL 호환 라이선스를 요구한다. 이 때문에 독점 소프트웨어(Proprietary Software)나 GPL과 호환되지 않는 라이선스(예: Apache License 2.0 등)를 사용하는 프로젝트에서 GPL 라이브러리를 사용하는 것이 법적으로 제한된다. GPL 링크 예외는 이러한 제한을 완화하여, 해당 라이브러리를 더 폭넓은 소프트웨어 생태계에서 활용할 수 있도록 하기 위해 고안되었다.
주요 적용 사례
- GCC 런타임 라이브러리 예외(GCC Runtime Library Exception): GNU 컴파일러 모음(GCC)의 런타임 라이브러리(libgcc, libstdc++ 등)에 적용되어, GCC로 컴파일된 프로그램이 어떤 라이선스를 가지든 자유롭게 배포될 수 있게 한다.
- OpenJDK 클래스패스 예외(Classpath Exception): 자바 표준 라이브러리 등에 적용되어, 애플리케이션 코드가 GPL이 아니더라도 OpenJDK 라이브러리와 링크하여 실행할 수 있게 한다.
- Qt 라이브러리(LGPL v3 + 예외 조항 등): 과거 상용 라이선스와 병행하여 특정 버전에서 링크 예외를 제공한 바 있다.
법적 효력 및 조건 일반적으로 GPL 링크 예외는 다음과 같은 조건 하에 부여된다.
- 예외가 적용되는 대상 파일(라이브러리 자체)에 명시적으로 예외 조항이 포함되어 있어야 한다.
- 라이브러리 코드 자체를 수정할 경우, 수정된 라이브러리 코드에는 여전히 GPL이 적용된다(예외는 '링크' 행위에 한정됨).
- 결합된 저작물 배포 시 라이선스 고지 의무 등 GPL의 기본 요건(저작권 표시, 라이선스 사본 제공 등)은 유지되어야 한다.
GPL 버전별 차이
- GPL v2: 원문에는 링크 예외 규정이 없으므로, 저작권자가 별도의 예외 조항을 파일 헤더나 라이선스 파일에 명시적으로 추가해야 한다.
- GPL v3: 제7조(추가 조건)에서 '추가적인 권한(Additional Permissions)'을 부여할 수 있는 법적 근거를 마련하여, 링크 예외를 보다 체계적으로 문서화하고 적용할 수 있게 하였다.
관련 용어
- LGPL(Lesser GPL): 라이브러리 링크 시 동적 링크(Dynamic Linking)를 전제로 독점 소프트웨어와의 결합을 허용하는 별도의 라이선스. GPL 링크 예외는 기존 GPL 코드에 예외를 덧붙이는 방식이라면, LGPL은 애초에 링크 허용을 전제로 설계된 별도 라이선스라는 차이가 있다.
- Classpath Exception: 자바 생태계에서 널리 쓰이는 GPL 링크 예외의 대표적 구현체.