들어가며
오픈소스 소프트웨어는 개발자와, 개발 커뮤니티, 여러 기업들에게 수많은 이점을 제공하고 있습니다.
오픈소스 소프트웨어는 이미 구현된 다양한 기능을 무료로 사용할 수 있을 뿐만 아니라, 개발 코드의 투명성과 손쉽게 커스터마이징도 할 수 있습니다.
하지만 이렇게 많은 이점을 제공하는 오픈소스 라이브러리도 사용할 때 반드시 이해해야 할 중요한 요소가 있는데요. 바로 라이센스 입니다.
이 글에서는 지난번 제가 작성한 글에 이어 오픈소스 라이브러리와 주요 라이센스 유형과 그 특성에 대해서 알아보도록 하겠습니다.
오픈소스 라이센스의 분류
오픈소스의 라이센스는 배포 시 소스 코드의 제공 의무(Copyleft)에 따라 크게
Reciprocal(소스코드 제공 의무)와 Permissive(소스코드 제공 의무 없음)로 분류할 수 있으며
Reciprocald은 다시 소프트웨어의 수정본이나 파생된 결과물을 배포할 때 원본 소프트웨어와 동일한 라이센스를 적용해야 하는 조건을 강하게 요구하는 Strong Copyleft와
소프트웨어의 수정본이나 파생된 결과물을 배포할 때, 일부 부분에만 카피레프트 조건을 적용 (모듈 단위로 카피레프트 적용) 하는 Weak Copyleft로 나눌 수 있습니다.
분류 | 대표적 라이센스 | 특징 | 예시 프로젝트 | |
Permissive |
MIT, Apache 2.0, BSD |
사용, 수정, 배포에 거의 제한이 없음 |
React, Node.js, TensorFlow |
|
Reciprocald |
Strong Copyleft |
GPL, LGPL, AGPL |
수정 및 배포 시 동일한 라이센스를 유지해야 함 |
Linux 커널, WordPress, MySQL |
Weak Copyleft |
MPL, EPL |
모듈 단위로 카피레프트 적용 |
Mozilla Firefox, Eclipse |
주요 오픈소스 라이센스의 특징
GPL (GNU General Public License)
GPL은 사용자가 소프트웨어를 자유롭게 사용할 수 있도록 보장하면서도, 소프트웨어의 배포에 대해 엄격한 조건을 부과하는 라이센스입니다.
주요 특징으로는
* 소프트웨어를 사용, 복사, 수정, 배포할 수 있음.
* 수정된 소프트웨어를 배포할 때는 수정된 소프트웨어도 동일한 GPL 라이센스를 따라야 함.
* 소스 코드를 공개해야 함.
* GPL2.0과 GPL2.0이후 몇 가지 조항을 추가하여 만든 GPL3.0 (제품에 대한 인증키 등 설치정보를 제공 조항이 포함된 것이 큰 특징)이 있음
GPL은 코드의 자유로운 공유와 협업을 장려하지만, 상업적으로 사용하려는 경우에는 주의가 필요합니다. GPL 소프트웨어를 포함한 소프트웨어는 반드시 소스 코드를 공개해야 하기 때문입니다. Linux 커널이 GPL 라이센스를 사용하는 대표적인 예입니다.
LGPL (Lesser General Public License)
LGPL은 GPL의 변형으로, 라이브러리와 같은 소프트웨어 구성 요소에 주로 사용됩니다. 주요 특징으로는
- 소프트웨어를 사용, 복사, 수정, 배포할 수 있음.
- LGPL 라이브러리를 사용하는 소프트웨어는 소스 코드를 공개하지 않아도 됨.
- 그러나 LGPL 라이브러리를 수정한 경우에는 수정된 라이브러리의 소스 코드를 공개 혹은 요청 시 제공하고 수정 사실 및 일시를 명시.
- 응용프로그램을 배포할 경우, LGPL 라이브러리를 사용하고 있다는 사실을 명시해야 함.
LGPL은 상업용 소프트웨어에서 오픈소스 라이브러리를 사용할 때 유용하며, 특히 소스 코드 공개 의무를 피하고자 할 때 적합합니다. 예를 들어, GNU C 라이브러리 (glibc)가 LGPL을 따릅니다.
MPL (Mozilla Public License)
MPL은 모질라 재단에서 만든 라이센스로, 다음과 같은 특징을 가지고 있습니다.
- 사용, 복사, 수정, 배포를 허용.
- 수정된 파일을 배포할 때는 수정된 파일의 소스 코드를 공개하거나 소스코드를 입수할 수 있는 방법에 대해 고지가 필요.
- 단, MPL 라이센스 파일과 함께 배포되는 다른 파일은 동일한 라이센스를 따를 필요가 없음.
- 법령이나 규제로 인해 규정의 준수가 불가능할 경우 관련 제한사항과 영향을 받는 코드에 관한 설명문을 포함.
MPL은 소스 코드의 공개를 요구하면서도, 프로젝트 전체를 동일한 라이센스로 묶지 않아도 되기 때문에 상업용 프로젝트에서 유연하게 사용할 수 있습니다. Mozilla Firefox가 MPL을 사용하는 대표적인 예입니다.
MIT 라이센스
BSD 라이센스를 기반으로 만들어진 MIT 라이센스는 가장 간단하고 자유로운 라이센스 중 하나로, 다음과 같은 특징을 가지고 있습니다.
- 사용, 복사, 수정, 병합, 게시, 배포, 서브 라이선스 및 판매를 할 수 있음.
- 배포 시 라이센스의 사본이나 저작권 안내 문구를 소프트웨어 및 복제본에 포함해야 함.
MIT 라이센스는 상업용 프로젝트에서도 자유롭게 사용할 수 있으며, 다른 라이센스와의 호환성도 뛰어납니다. 이로 인해 많은 오픈소스 프로젝트에서 널리 사용되고 있습니다. 예를 들어, React와 같은 프레임워크가 MIT 라이센스를 채택하고 있습니다.
Apache 라이센스 2.0
Apache 라이센스 2.0은 비교적 포괄적인 라이센스로, 다음과 같은 특징을 가집니다.
- 소프트웨어를 사용, 복사, 수정, 병합, 게시, 배포, 서브라이센스 및 판매할 수 있음.
- 수정된 파일에는 변경 사항을 명시해야 함.
- 저작권, 특허, 상표 등에 대한 고지사항을 소스코드에 포함 시켜야 함.
- 상표 사용에 대한 제한이 있음.
Apache 라이센스는 기업 환경에서 많이 사용되며, 특히 특허와 관련된 보호를 제공하는 점에서 유리합니다. Apache HTTP Server와 같은 주요 프로젝트가 이 라이센스를 사용하고 있습니다.
BSD (Berkeley Software Distribution License) 라이센스
BSD 라이센스는 MIT 라이센스와 유사하지만 몇 가지 추가 조건이 있습니다.
- 사용, 복사, 수정, 배포를 허용.
- 소스 코드 재배포 시, 원래 저작권 고지와 라이센스 정보 및 보증 부인에 대한 고지사항을 포함해야 함.
BSD 라이센스는 상업용 및 비상업용 프로젝트 모두에서 널리 사용되며, 특히 네트워크 관련 소프트웨어에서 자주 볼 수 있습니다. FreeBSD 운영체제와 같은 프로젝트가 BSD 라이센스를 사용합니다.
마치며
오픈소스 라이브러리는 소프트웨어 개발의 강력한 도구 중 하나가 될 수 있습니다.
하지만 오픈소스 라이브러리를 사용할 때 다양한 라이센스 조건을 정확히 이해하고, 프로젝트의 목적과 요구 사항에 맞는 라이센스를 선택, 사용하는 것이 매우 중요하다고 생각합니다.
위에서 살펴본 것처럼 각 라이센스는 사용, 배포, 수정에 대해 다양한 조건을 부과하며, 이를 준수하지 않을 경우 법적 문제가 발생할 수 있기 때문인데요.
예를 들어, 상업용 소프트웨어를 개발할 때는 MIT나 Apache 라이센스와 같은 보다 유연한 라이센스를 선택하는 것이 좋을 것이고, 반면 코드의 자유로운 공유와 협업을 중시하는 프로젝트에서는 GPL 라이센스를 고려할 수 있을 겁니다.
이외에도 오픈소스 라이센스에 대해 개발자뿐만 아니라 PM, 기획자, 디자이너 등 프로젝트의 모든 참여자가 라이센스에 대해 잘 이해하고 준수한다면 오픈소스 라이브러리를 통해 조금 더 효과적인 방법으로 조금 더 좋은 결과물을 만들어 낼 수 있는 개발 생태계를 만들어갈 수 있을 거라고 생각합니다.
감사합니다.