가이드 · 04

듀얼(다중) 라이선스

하나의 코드에 두 개 이상의 라이선스를 제공하는 듀얼 라이선스의 두 가지 유형, SPDX 표현식 OR·AND·WITH 의 의미, CLA 가 필요한 이유와 주의점을 설명합니다.

최종 확인: 2026-09-23

한 코드에 여러 라이선스를 주는 이유

저작권자는 같은 코드를 여러 조건으로 동시에 허락할 수 있습니다. 받는 사람은 그중 하나를 골라 그 조건을 지키면 됩니다. 이렇게 하는 목적은 크게 두 가지입니다.

  1. 호환성 넓히기 — 서로 다른 생태계와 모두 잘 맞게 하려고.
  2. 사업 모델 — 오픈소스로 공개하면서 별도의 상용 라이선스를 판매하려고.

유형 1: 허용형 두 개를 함께 — MIT OR Apache-2.0

Rust 언어와 대부분의 Rust 크레이트가 쓰는 방식입니다. 사용자는 MIT 또는 Apache-2.0 중 편한 쪽을 고릅니다.

두 장점을 모두 챙기는 셈이라 라이브러리 작성자에게 인기가 많습니다. 저장소에는 LICENSE-MITLICENSE-APACHE 두 파일을 두는 것이 관례입니다.

유형 2: 카피레프트 + 상용 — 'GPL 이거나, 돈을 내거나'

코드를 GPL·AGPL 로 공개하고, 소스 공개 의무를 지고 싶지 않은 기업에게는 별도 계약으로 상용 라이선스를 판매합니다. MySQL(GPL + Oracle 상용 라이선스), Qt(LGPL-3.0/GPL + 상용) 가 대표 사례입니다.

이 모델은 저작권자가 모든 코드의 권리를 갖고 있어야 작동합니다. 외부 기여자가 GPL 로만 기여한 코드는 저작권자가 상용 라이선스로 팔 권리가 없기 때문입니다.

CLA 와 DCO

SPDX 표현식으로 적는 법

여러 라이선스의 관계는 SPDX 라이선스 표현식으로 적습니다.

표현
A OR B둘 중 하나를 골라 따른다(선택형 듀얼)MIT OR Apache-2.0
A AND B둘 다 따라야 한다(서로 다른 부분이 섞인 경우)MIT AND BSD-3-Clause
A WITH 예외라이선스에 예외 조항을 붙인다GPL-2.0-only WITH Linux-syscall-note
괄호결합 순서 지정(MIT OR Apache-2.0) AND Unicode-3.0

ORAND 를 헷갈리면 뜻이 정반대가 됩니다. 사용자가 고를 수 있다면 OR, 모두 지켜야 한다면 AND 입니다.

주의할 점

적용 예

Rust 스타일 듀얼 라이선스를 적용하려면 생성기에서 MIT 와 Apache-2.0 파일을 각각 받아 LICENSE-MIT, LICENSE-APACHE 로 저장하고, 메타데이터에 license = "MIT OR Apache-2.0" 을 적습니다. 각 파일 헤더에는 SPDX-License-Identifier: MIT OR Apache-2.0 을 씁니다.

이 글은 일반 정보이며 법률 자문이 아닙니다. 중요한 결정은 전문가와 상의하세요.

참고 출처