본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Career

오픈소스 라이선스: 허용형과 카피레프트

작성 2026. 10. 21.추가
목차7개 항목
출처와 참고

freeCodeCamp의 「How open source licenses work and how to add them to your projects」(2017)를 바탕으로, OSI의 승인 라이선스 목록, choosealicense.com, SPDX 라이선스 목록으로 확인해 재구성한 노트다. 법률 자문이 아니다.

오픈소스 라이선스란

코드는 쓰는 순간 저작권이 생긴다. 라이선스가 없으면 남은 코드를 볼 수는 있어도 쓰거나 고치거나 배포할 권리가 없다(all rights reserved). GitHub의 공개 저장소도 마찬가지다. 오픈소스 라이선스는 저작권자가 그 권리를 조건부로 넘겨주는 문서다.

「오픈소스」라는 이름은 OSI(Open Source Initiative, 1998년 설립)가 정한 오픈소스 정의(OSD)를 만족하고 승인받은 라이선스에만 붙인다. 승인된 라이선스는 대부분 다음을 공통으로 담는다.

  • 수정, 상업적 사용, 배포, 사적 사용을 허락한다.
  • 라이선스와 저작권 고지를 함께 담아야 한다.
  • 작성자는 보증하지 않고 책임지지 않는다.

두 계열: 허용형과 카피레프트

계열원칙대표
허용형(permissive)고지만 남기면 무엇이든 해도 된다. 수정본을 비공개 상용 제품에 넣어도 된다MIT, BSD-2/3-Clause, Apache 2.0, ISC
약한 카피레프트(weak copyleft)그 라이브러리(또는 파일) 자체를 고친 부분만 같은 라이선스로 공개한다. 가져다 쓰는 쪽 코드는 자유다MPL 2.0(파일 단위), LGPL(라이브러리 단위)
강한 카피레프트(strong copyleft)배포하는 파생물 전체를 같은 라이선스로, 소스와 함께 공개한다GPLv2, GPLv3
네트워크 카피레프트배포하지 않고 서버에서 서비스로만 제공해도 사용자에게 소스를 공개한다. GPL의 「SaaS 구멍」을 막는다AGPLv3

주요 라이선스 비교

제한이 강한 쪽에서 약한 쪽 순서다(사용자 입장).

라이선스배포할 때 소스 공개수정본도 같은 라이선스변경 사항 표시특허대표 프로젝트
AGPLv3필수(네트워크 제공 포함)필수필수명시적 특허 허락Grafana, MongoDB(2018년 전), Nextcloud
GPLv3필수필수필수명시적 특허 허락. 특허 소송을 걸면 권리를 잃는다Bash, GIMP
GPLv2필수필수필수명시 없음(v3에서 추가)Linux 커널, Git
LGPL·MPL 2.0그 라이브러리·파일만그 부분만필수명시적 허락Firefox(MPL)
Apache 2.0필요 없음아무 라이선스나필수(NOTICE 유지)명시적 특허 허락. 상표 사용 금지Android, Kubernetes, Swift
BSD-3-Clause필요 없음아무 라이선스나필요 없음명시 없음. 저작자 이름으로 파생물 홍보 금지Go
MIT필요 없음아무 라이선스나필요 없음명시 없음React, Rails, jQuery, Bootstrap
  • GPLv2와 v3의 핵심 차이는 특허 조항과, 기기 제조사가 수정 소프트웨어 설치를 막는 것(티보이제이션)을 금지한 점이다.
  • 허용형 중에서 특허 분쟁이 걱정되는 회사 프로젝트는 명시적 특허 허락이 있는 Apache 2.0을, 가장 단순한 것을 원하면 MIT를 고른다.

호환성: 가장 흔한 실수

내 코드의 라이선스는 내가 쓰는(링크하는) 오픈소스의 라이선스와 호환돼야 한다. 독점(비공개) 제품에 GPL 라이브러리를 넣어 배포하면 제품 전체를 GPL로 공개해야 한다. 그래서 회사는 의존성 라이선스를 자동으로 검사한다(FOSSA, license-checker, GitHub의 의존성 그래프).

쓰려는 라이브러리독점 제품에 넣어 배포서버에서만 실행(SaaS)
MIT·BSD·Apache 2.0고지만 남기면 된다된다
LGPL·MPL라이브러리를 고치지 않고 동적 링크·별도 파일로 쓰면 된다된다
GPL제품 전체를 GPL로 공개해야 한다배포가 아니라서 공개 의무가 없다
AGPL제품 전체를 AGPL로 공개해야 한다사용자에게 소스를 공개해야 한다

Apache 2.0 코드는 GPLv3 프로젝트에 넣을 수 있지만 GPLv2 전용 프로젝트에는 넣을 수 없다(특허 조항 충돌).

프로젝트에 라이선스 붙이기

  1. 저장소 루트에 LICENSE(또는 LICENSE.md, LICENSE.txt) 파일을 둔다. GitHub에서 새 파일 이름을 LICENSE로 입력하면 라이선스 템플릿 선택 버튼이 뜬다.
  2. 연도와 저작권자 이름을 채운다.
  3. 패키지 메타데이터에 SPDX 식별자를 적는다. package.json의 "license": "MIT", 파일 머리의 // SPDX-License-Identifier: Apache-2.0처럼 쓴다. 둘 중 선택이면 "MIT OR Apache-2.0"(Rust 생태계의 관례)처럼 쓴다.

고르기 어려우면 choosealicense.com에서 「단순하고 허용적인 것(MIT)」, 「특허가 걱정됨(Apache 2.0)」, 「공유를 강제하고 싶음(GPLv3)」 중에서 출발한다.

오픈소스가 아닌 「소스 공개」 라이선스

클라우드 사업자가 오픈소스 DB를 그대로 관리형 서비스로 파는 일이 늘자, 일부 회사는 라이선스를 바꿨다. 이 라이선스들은 소스를 볼 수는 있어도 OSI 기준으로는 오픈소스가 아니다.

라이선스제한바꾼 예와 그 뒤
SSPL서비스로 제공하면 서비스 운영 스택 전체의 소스를 공개MongoDB(2018), Elasticsearch(2021). Elastic은 2024년 AGPL을 선택지로 다시 더했다
BSL(Business Source License)경쟁하는 상용 사용 금지. 몇 년 뒤 오픈소스 라이선스로 자동 전환HashiCorp Terraform(2023) → 커뮤니티가 MPL 시절 코드를 포크해 OpenTofu를 만들었다
RSAL·SSPL 이중관리형 서비스 제공 제한Redis(2024) → Valkey 포크가 생겼고, Redis 8(2025)은 AGPLv3를 선택지로 더했다

의존성의 라이선스는 버전마다 바뀔 수 있다. 메이저 업그레이드 때 라이선스도 다시 확인한다.

정리

  • 라이선스 없는 코드는 쓸 수 없다. 공개 저장소라도 마찬가지다.
  • 허용형(MIT·BSD·Apache)은 고지만 남기면 되고, 카피레프트(GPL·AGPL)는 파생물을 같은 조건으로 공개해야 한다.
  • 독점 제품에 GPL·AGPL 의존성을 넣지 않도록 자동 검사한다. AGPL은 SaaS에도 적용된다.
  • 내 프로젝트에는 LICENSE 파일과 SPDX 식별자를 붙인다.
  • BSL·SSPL은 소스 공개일 뿐 오픈소스가 아니다.

관련 노트: 오픈소스 기여 시작하기, 오픈소스 프로젝트 운영, 패키지 매니저

원본 기록4

댓글

GitHub 계정으로 댓글을 남길 수 있어요.