# 라이센스

FFmpeg는 다양한 라이센스 하에 배포되며, 이에 따라 개발자는 각 라이센스 조건을 준수해야 한다. FFmpeg는 여러 오픈 소스 라이브러리 및 코덱을 포함하고 있기 때문에, 각 구성 요소의 라이센스를 이해하고 준수하는 것이 중요하다.

#### LGPL과 GPL의 차이

FFmpeg는 두 가지 주요 라이센스, 즉 \*\*LGPL (Lesser General Public License)\*\*과 \*\*GPL (General Public License)\*\*을 따르는 라이브러리들을 포함한다. 개발자는 사용하는 라이브러리의 라이센스 조건을 정확히 이해하고 이에 맞는 행동을 취해야 한다.

**LGPL**

**LGPL**은 비교적 유연한 라이센스이다. 이 라이센스를 따르는 소프트웨어는 상업용 제품에 포함될 수 있으며, 소스 코드를 공개하지 않고도 사용이 가능하다. 다만, 라이브러리 자체를 수정할 경우 수정된 소스 코드를 공개해야 한다.

**GPL**

**GPL**은 보다 엄격한 조건을 가진다. **GPL** 라이센스를 따르는 코덱 또는 라이브러리를 사용할 경우, 해당 소프트웨어를 상업적으로 배포하려면 소스 코드를 공개해야 하며, 동일한 라이센스 조건을 적용해야 한다. 따라서 상업적인 소프트웨어 개발 시 **GPL** 라이센스를 사용하는 구성 요소는 신중하게 고려해야 한다.

#### 상업적 사용과 라이센스

상업적 목적으로 FFmpeg를 사용할 경우, 어떤 구성 요소가 어떤 라이센스를 따르는지 정확히 파악하는 것이 중요하다. 만약 **GPL** 라이센스를 따르는 코덱을 사용한다면, 그 코덱을 포함한 소프트웨어의 소스 코드를 공개하고, 소프트웨어의 배포 시에도 **GPL** 조건을 준수해야 한다.

예를 들어, **x264** 코덱은 **GPL** 라이센스를 따르며, 상업용 소프트웨어에 포함될 경우 이 조건을 따라야 한다.

#### FFmpeg의 라이센스 옵션

FFmpeg는 기본적으로 **LGPL**로 배포되지만, 빌드 과정에서 일부 **GPL** 라이브러리를 포함하도록 설정할 수 있다. **FFmpeg**를 **GPL** 라이브러리 없이 컴파일하면 **LGPL** 조건에 따라 사용할 수 있지만, **GPL** 라이브러리를 포함할 경우 소프트웨어는 **GPL** 조건을 따르게 된다.

따라서, 개발자는 FFmpeg를 빌드할 때 어떤 라이브러리가 포함되는지 주의 깊게 살펴보고, 라이센스 조건을 확인해야 한다.

#### FFmpeg의 상용 패키지 사용

FFmpeg는 오픈 소스 프로젝트이지만, 상업적으로 사용될 수 있는 패키지 버전도 존재한다. 이를테면, 일부 상용 소프트웨어는 FFmpeg의 라이센스를 준수하면서도 상업적 사용에 적합한 형태로 제공된다. 이러한 패키지에는 필수 라이센스 비용이 포함될 수 있으며, 해당 패키지의 사용에 있어서도 각 라이센스를 명확히 이해하고 준수해야 한다.

#### 코덱 사용 시 라이센스 고려 사항

개발자는 다양한 코덱을 사용할 때 해당 코덱의 라이센스도 고려해야 한다. 특히, 상업적 소프트웨어에서는 코덱의 라이센스 위반이 문제가 될 수 있다.

**예시**

$$
\mathbf{C} = \mathbf{FFmpeg} \times \mathbf{Codec}
$$

여기서, $\mathbf{FFmpeg}$는 라이센스를 따르는 소프트웨어 패키지를 의미하고, $\mathbf{Codec}$은 FFmpeg에서 제공하는 다양한 코덱을 의미한다. $\mathbf{C}$는 전체 소프트웨어 패키지의 라이센스 준수 상태를 나타낸다.

#### 특정 라이브러리 및 플러그인 사용 시 주의사항

FFmpeg는 다양한 플러그인과 라이브러리를 지원한다. 이들 중 일부는 **LGPL**을 따르지만, 다른 일부는 **GPL**이나 다른 제약이 있는 라이센스를 따른다. 특히 상용 소프트웨어를 개발하는 경우 이러한 플러그인 사용 시 라이센스 위반이 발생하지 않도록 주의해야 한다.

#### 상업용 소프트웨어에서의 FFmpeg 사용

상업용 소프트웨어에서 FFmpeg를 사용할 때, 개발자는 다음과 같은 행동을 취해야 한다:

1. **소스 코드 공개 여부 결정**: 사용하려는 라이브러리와 코덱이 **GPL**을 따를 경우, 소스 코드 공개를 요구한다.
2. **라이센스 비용 지불**: 특정 코덱이나 라이브러리 사용에 있어 라이센스 비용을 지불해야 하는 경우, 이를 사전에 해결해야 한다.
3. **라이센스 호환성 검토**: FFmpeg와 함께 사용되는 다른 라이브러리들이 동일한 라이센스 조건을 따르는지 확인해야 한다.

#### FFmpeg 빌드 시 라이센스 옵션 선택

FFmpeg는 빌드할 때 사용자가 선택한 옵션에 따라 포함되는 라이브러리와 코덱의 라이센스가 달라질 수 있다. 빌드 과정에서 어떤 라이브러리와 코덱을 포함하는지에 따라 라이센스 조건이 **LGPL** 또는 **GPL**로 바뀔 수 있으므로, 개발자는 이러한 옵션을 신중히 선택해야 한다.

**빌드 과정에서 선택할 수 있는 주요 옵션들:**

1. **--enable-gpl**: 이 옵션을 활성화하면 **GPL** 라이센스를 따르는 코덱이나 라이브러리가 FFmpeg 빌드에 포함된다. 이 경우, 전체 FFmpeg는 **GPL** 라이센스를 따르게 된다.
2. **--enable-nonfree**: 상업적으로 사용하기 어려운 **비자유(non-free)** 라이센스를 따르는 라이브러리나 코덱을 포함하려면 이 옵션을 사용해야 한다. 이 경우, 상업적 소프트웨어에 사용하기 위해서는 별도의 라이센스 구매가 필요할 수 있다.
3. **--enable-libx264**: **x264** 라이브러리를 포함하려면 이 옵션이 필요하다. **x264**는 **GPL**을 따르므로 이 옵션을 사용하면 전체 빌드가 **GPL** 라이센스를 따르게 된다.
4. **--enable-libmp3lame**: **LAME MP3** 인코더 라이브러리를 포함하려면 이 옵션이 필요하다. **LAME**는 **LGPL** 또는 **GPL** 중 하나를 선택할 수 있다.
5. **--enable-openssl**: **OpenSSL** 라이브러리는 **non-free** 라이센스를 따르므로, 상업적으로 사용 시 주의가 필요하다.

#### 라이센스 위반 사례 및 해결 방법

FFmpeg를 사용하는 개발자들이 흔히 겪는 문제 중 하나는 라이센스 위반이다. 라이센스 위반은 주로 다음과 같은 상황에서 발생한다:

1. **소스 코드 공개 의무를 준수하지 않음**: **GPL** 라이센스의 경우, 소프트웨어를 배포할 때 수정된 소스 코드를 공개해야 하는데 이를 무시할 경우 문제가 발생한다.
2. **상업적 사용 시 라이센스 조건 무시**: 상업적 소프트웨어에서 **GPL** 라이브러리나 **non-free** 라이브러리를 사용할 경우, 별도의 라이센스 비용을 지불하지 않으면 법적 문제가 될 수 있다.
3. **코덱 라이센스 무시**: 특정 코덱을 사용할 때 해당 코덱의 라이센스에 따라 상업적 사용이 제한될 수 있는데 이를 간과하는 경우가 있다.

**해결 방법:**

1. **소스 코드 공개**: **GPL** 라이센스를 따르는 FFmpeg 구성 요소를 사용할 경우, 반드시 소프트웨어의 소스 코드를 공개하고, 수정 사항에 대한 정보를 제공해야 한다.
2. **라이센스 비용 지불**: 상업적으로 FFmpeg를 사용하고, 특정 코덱이나 라이브러리에 대한 라이센스 비용을 요구하는 경우 이를 준수해야 한다.
3. **라이센스 검토 및 조정**: FFmpeg 빌드 시 어떤 라이브러리나 코덱을 사용할 것인지 미리 검토하고, **GPL** 조건을 피하고자 할 경우 **LGPL** 라이센스 옵션만을 사용하도록 빌드를 구성해야 한다.

#### 외부 라이브러리와의 호환성

FFmpeg는 다른 소프트웨어 라이브러리와 통합하여 사용할 수 있지만, 이때 각 라이브러리의 라이센스 호환성을 반드시 검토해야 한다. **GPL**과 **LGPL** 외에도, 특정 라이브러리는 그 자체로 고유한 라이센스를 가질 수 있다. 이를 무시하면 법적 문제가 발생할 수 있다.

**라이센스 호환성 예시:**

$$
\mathbf{S}*\text{total} = \mathbf{S}*\text{ffmpeg} + \mathbf{S}\_\text{external}
$$

여기서, $\mathbf{S}*\text{total}$은 최종 소프트웨어 패키지의 라이센스를 의미하고, $\mathbf{S}*\text{ffmpeg}$는 FFmpeg가 따르는 라이센스, $\mathbf{S}\_\text{external}$은 외부 라이브러리의 라이센스를 의미한다. 두 라이센스가 호환되지 않을 경우, 상업적 사용이나 배포 시 문제가 될 수 있다.

#### 배포 시 주의 사항

FFmpeg를 포함한 소프트웨어를 배포할 때는, 배포 형태와 사용된 라이브러리 및 코덱의 라이센스 조건을 신중하게 검토해야 한다. 잘못된 배포 방식은 라이센스 위반으로 이어질 수 있다.

1. **소스 코드 배포**: **GPL** 조건을 따르는 소프트웨어는 반드시 소스 코드를 함께 배포해야 한다.
2. **라이센스 문서 포함**: 배포하는 소프트웨어에 FFmpeg의 라이센스 문서를 포함하고, 사용된 코덱과 라이브러리의 라이센스를 명확히 표시해야 한다.
3. **기타 법적 요구 사항 준수**: 배포 시 각국의 법적 요구 사항에 따라 추가적으로 요구되는 조치를 확인해야 한다.

#### FFmpeg의 상용 패키지와 라이센스

FFmpeg는 오픈 소스로 무료로 사용될 수 있지만, 상용 소프트웨어에 통합할 때는 주의가 필요하다. 상용 패키지는 FFmpeg가 제공하는 라이브러리나 코덱을 상업적으로 사용하기 위한 라이센스 옵션을 제공하며, 개발자는 이를 통해 법적 문제를 방지할 수 있다.

**상용 패키지 구매**

특정 코덱이나 라이브러리가 **GPL** 또는 **non-free** 라이센스를 따를 경우, 상업적 목적의 소프트웨어에서는 이를 피하기 위해 상용 라이센스를 구매할 수 있다. 상용 패키지는 일반적으로 다음과 같은 형태로 제공된다:

1. **코덱별 상용 라이센스**: 특정 코덱에 대해 상용 라이센스를 구매하면 해당 코덱을 상업적 소프트웨어에 통합할 수 있다.
2. **전체 패키지 상용 라이센스**: FFmpeg의 전체 패키지에 대한 상용 라이센스를 구매하면, 상용 소프트웨어에 자유롭게 통합 가능하다. 이 경우, 사용된 코덱과 라이브러리의 라이센스 제약 사항을 피할 수 있다.

#### 법적 문제와 해결 방안

FFmpeg는 오픈 소스 라이브러리이므로 상업적으로 사용되는 경우 라이센스 위반에 대한 법적 문제가 발생할 수 있다. 특히 **GPL** 라이센스를 준수하지 않거나, 상업적 소프트웨어에 **non-free** 라이브러리를 포함한 경우, 법적 분쟁이 발생할 가능성이 있다.

**FFmpeg 법적 분쟁의 주요 원인**

1. **소스 코드 공개 의무 위반**: **GPL** 라이센스를 따르는 라이브러리나 코덱을 사용할 경우, 소프트웨어 배포 시 소스 코드를 공개하지 않으면 법적 문제가 발생할 수 있다.
2. **상업적 사용 라이센스 미준수**: 상업적 목적으로 FFmpeg를 사용할 때 라이센스 비용을 지불하지 않거나, 라이센스 조건을 충족하지 않는 경우에도 문제가 발생할 수 있다.

**법적 문제를 피하기 위한 개발자의 행동 지침**

1. **라이센스 검토**: 개발자는 FFmpeg와 통합되는 모든 라이브러리와 코덱의 라이센스를 정확히 검토해야 한다. 각 라이브러리가 상업적 사용에 적합한지 확인하고, 필요한 경우 상용 라이센스를 구매해야 한다.
2. **소스 코드 공개**: **GPL** 라이브러리를 사용하는 경우, 수정된 소프트웨어의 소스 코드를 공개해야 하며, 이를 배포할 때 소스 코드 접근 권한을 제공해야 한다.
3. **법률 자문**: 상업적 소프트웨어에서 FFmpeg를 사용할 경우, 법률 자문을 구해 라이센스 조건을 완벽히 이해하고 준수해야 한다.

#### 오픈 소스 라이센스의 호환성과 충돌

FFmpeg와 다른 오픈 소스 라이브러리를 통합할 때는 각 라이브러리 간의 라이센스 호환성을 고려해야 한다. 오픈 소스 라이센스 간의 충돌이 발생하면 소프트웨어 배포에 문제가 발생할 수 있다.

**라이센스 충돌 예시:**

$$
\mathbf{L}*\text{FFmpeg} \neq \mathbf{L}*\text{External}
$$

위의 식에서 $\mathbf{L}*\text{FFmpeg}$는 FFmpeg가 따르는 라이센스를 의미하고, $\mathbf{L}*\text{External}$은 외부 라이브러리의 라이센스를 의미한다. 두 라이센스가 서로 충돌할 경우, 상업적 사용이나 배포에 문제가 생길 수 있다.

#### 개발자의 라이센스 준수 행동 지침

1. **라이센스 조건 확인**: 통합하는 모든 라이브러리와 코덱의 라이센스 조건을 반드시 확인하고, 이를 준수할 수 있는지 검토해야 한다.
2. **코덱과 라이브러리 선택**: 상업적 소프트웨어에서는 가능한 한 **LGPL** 라이센스를 따르는 코덱과 라이브러리를 선택하여 라이센스 위반 가능성을 줄이는 것이 좋다.
3. **상용 라이센스 고려**: 상업적 사용이 필요한 경우, 상용 라이센스를 제공하는 코덱이나 라이브러리를 사용하는 것이 바람직하다.
