1. 개요
GNU LGPL (GNU Lesser General Public License; 약소 일반 공중 사용 허가서)는 자유 소프트웨어 재단 GNU 프로젝트의 라이선스 종류중에 하나로 어플리케이션 개발자를 위해 제창되었다. 이전에는 Library General Public License로 불리기도 했다.
2. 내용
기본적으로 GNU GPL과 비슷하지만, GNU GPL이 라이브러리의 라이선스로 쓰일 경우에 발생하는 문제점을 해결할 수 있도록 만들어져 있다.GNU GPL로 허가된 프로그램이 라이브러리일 경우 그 프로그램과 링크되어 작동하는 프로그램은 반드시 GPL로 배포되어야 한다. 프로그램에서 '링크'란 목적 코드인 실행물을 실행할 때 라이브러리를 불러오면서 하나의 실행 프로그램으로 결합하도록 하는 기능을 말한다. 이는 운영체제의 링커가 작업하여 RAM에 일시적으로 올라가 작동하게 된다. 자유 소프트웨어 재단은 GPL 프로그램 또는 라이브러리가 독점 라이브러리 또는 프로그램과 링크되어 결과값을 공유하며 단일 프로그램인 것처럼 작동하는 라이브러리 또는 프로그램의 경우 파생 저작물로 해석되며 그에 따라 해당하는 독점 라이브러리 또는 프로그램의 소스가 공개되어야 한다.
하지만 위와 같이 라이브러리를 GPL로만 배포한다면, 상용 프로그램에서 그 라이브러리를 사용할 수 없으므로 충분한 경쟁력이 없는 라이브러리에 대해서는 이를 대체하는 라이브러리를 새로 만들게 될 것이며, 이는 자유 소프트웨어 생태계에 큰 위협이 된다. 자유 소프트웨어 재단은 이에 따라 LGPL이라는 새로운 라이선스를 만들었고, 지금에 이르러서는 FFmpeg 등의 대형 프로젝트에도 사용되고 있다.
LGPL은 다음과 같은 사용 요건을 제시하고 있다.
- 'LGPL 라이브러리에 기반한 저작물'은 LGPL 라이브러리를 직접적으로 개작한 2차적 저작물로서, LGPL에 따라 재배포되어야 한다. 단, 'LGPL 라이브러리에 기반한 저작물'이 소프트웨어 라이브러리가 아니게 되었거나 그 저작물을 라이브러리로 쓰는 응용 프로그램과 독립적으로 동작하지 않게 되었다면 LGPL에 따라 재배포할 수 없다.
- 위 요건에 따라 LGPL로 배포할 수 없는 'LGPL 라이브러리에 기반한 저작물'은 GPL로 배포할 수 있다.
- 'LGPL 라이브러리를 사용하는 저작물' 자체는 LGPL 라이브러리의 2차적 저작물이 아니므로 대상 외이다.
- 'LGPL 라이브러리를 사용하는 저작물'과 LGPL 라이브러리를 링크 또는 결합한 실행물은 LGPL 라이브러리의 2차적 저작물이므로 다음과 같은 조건에 따라 배포되어야 한다.
- 위 실행물은 아래 조건을 준수하는 한 LGPL이 아닌 어떤 다른 조건으로도 배포될 수 있다.
- 실행물을 개인적인 용도로 개작하거나 리버스 엔지니어링 할 수 있다는 고지를 하여야 한다.
- LGPL 라이브러리가 사용되고 있다는 사실을 분명하게 알려야 한다.
- LGPL 원문과 GPL 원문(LGPLv3의 경우)의 사본을 모두 포함하여 배포하여야 한다.
- 저작물이 실행될 때 저작권 사항을 표시하는 경우 LGPL 라이브러리에 대한 저작권 사항이 함께 표시되어야 한다.
- 다음 중 하나를 따라야 한다.
- (1) LGPL 라이브러리를 수정한 경우 그 저작물의 원시 코드를 최상단 요건에 따라 LGPL 라이브러리로 제공해야 한다. 또한, 실행물이 LGPL 라이브러리와 링크되어 있는 경우 LGPL 라이브러리를 개작하여 새로운 실행물을 만들기 위해 'LGPL 라이브러리를 사용하는 저작물' 부분을 원시 코드 또는 목적 코드의 형태로 배포하여야 한다.
- (2) 적절한 공유 라이브러리 방식을 사용하여 링크한다. LGPL 라이브러리의 함수는 실행물로 직접적으로 복제되지 않아야 하고, 실행 시점에 컴퓨터에 이미 존재하는 LGPL 라이브러리의 복제물이 사용되어야 한다. 또한, 사용자가 LGPL 라이브러리의 개작된 버전을 설치했을 때 인터페이스가 호환되는 한 적절하게 동작되어야 한다.
요약하자면, LGPL 라이브러리 소스코드를 '정적 링크'로 사용하는 경우 프로그램의 목적 코드를 제공해야 하며 그게 싫으면 '동적 링크' 방식으로 이용한다면 어플리케이션 소스코드를 제공할 필요가 없다는 것이다. '정적 링크'일 시 프로그램의 목적 코드를 제공해야 한다는 부분은 LGPL 라이브러리 사용에 대한 남용을 방지하기 위함이다. 동적 링크 방식으로 어플리케이션을 컴파일하면 프로그램 소스코드를 공개할 필요가 없어 상용 프로그램들과 같은 클로즈드 소프트웨어 대부분이 이 방식을 이용한다. 즉 다이나믹 링크로 공통적으로 사용하는 LGPL 바이너리 라이브러리 정도를 외부에 노출시켜 달라는 요청과도 같다.
GNU 역시 다른 플랫폼이나 컴파일러 라이브러리들과 경쟁을 해야하는 상황이라 어플리케이션 개발자를 위한 라이선스로 제창된것이다.
일부 LGPL 프로젝트는 별도 표기에 정적 연결을 해도 파생 저작물로 인정하지 않는다는 조항을 두어 더 자유롭게 하기도 한다.