SPDX 란
SPDX(Software Package Data Exchange)는 리눅스 재단 산하 프로젝트로, 소프트웨어의 구성요소와 라이선스 정보를 기계가 읽을 수 있게 표현하는 표준입니다. 2021년에 ISO/IEC 5962:2021 국제 표준이 됐습니다. 그중 가장 널리 쓰이는 것이 SPDX 라이선스 목록의 짧은 식별자입니다. 'MIT License' 'The MIT license' 'MIT 라이선스'처럼 제각각인 이름 대신 MIT 하나로 적자는 약속입니다.
파일 헤더 두 줄
소스 파일 맨 위에 다음 두 줄을 주석으로 넣으면, 사람도 도구도 그 파일의 저작권자와 라이선스를 바로 알 수 있습니다.
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
SPDX-License-Identifier는 라이선스 식별자나 표현식(MIT OR Apache-2.0)을 적습니다.SPDX-FileCopyrightText는 저작권 표시입니다. 여러 명이면 줄을 여러 개 씁니다.- 긴 라이선스 고지문 대신 이 한 줄만 두는 방식을 리눅스 커널이 2017년부터 도입해, 수천 줄의 중복된 보일러플레이트를 줄였습니다.
생성기의 파일 헤더 탭은 이 두 줄을 7가지 주석 형식으로 만들어 줍니다.
폐기된 식별자에 주의
SPDX 라이선스 목록 3.0(2017년 12월)부터 GNU 라이선스의 버전 조항을 식별자에 드러내도록 바뀌었습니다.
| 폐기된 식별자 | 현재 식별자 |
|---|---|
GPL-2.0 | GPL-2.0-only |
GPL-2.0+ | GPL-2.0-or-later |
GPL-3.0 | GPL-3.0-only |
LGPL-2.1 | LGPL-2.1-only |
AGPL-3.0 | AGPL-3.0-only |
그냥 GPL-3.0 이라고 적으면 'only'인지 'or later'인지 알 수 없기 때문입니다. 두 방식의 차이는 only vs or-later에 정리했습니다.
패키지 메타데이터
대부분의 패키지 관리자가 SPDX 식별자나 표현식을 받습니다.
| 생태계 | 파일 | 예 |
|---|---|---|
| npm | package.json | "license": "MIT" · 비공개는 "UNLICENSED" |
| Rust | Cargo.toml | license = "MIT OR Apache-2.0" |
| Python | pyproject.toml | license = "Apache-2.0" (PEP 639) |
| Maven | pom.xml | <licenses> 안에 이름과 URL |
npm 의 UNLICENSED 는 'Unlicense'와 전혀 다른 뜻으로, 사용을 허락하지 않는 비공개 패키지라는 표시입니다. 철자가 비슷해 실수가 잦습니다.
REUSE: 저장소 전체를 기계가 읽게
유럽자유소프트웨어재단(FSFE)의 REUSE 명세는 SPDX 헤더를 저장소 전체에 일관되게 적용하는 방법을 정합니다.
- 모든 라이선스 원문을
LICENSES/폴더에SPDX식별자.txt이름으로 둡니다(예:LICENSES/MIT.txt). - 각 파일에
SPDX-FileCopyrightText와SPDX-License-Identifier를 넣습니다. - 주석을 넣을 수 없는 파일(이미지, JSON 등)은
파일명.license옆 파일이나 저장소 루트의REUSE.toml로 정보를 적습니다. reuse lint도구로 빠진 파일이 없는지 검사합니다.
실무 팁
- 식별자는 대소문자를 구분해 목록에 있는 그대로 적습니다(
Apache-2.0이지apache2가 아님). - 목록에 없는 자체 라이선스는
LicenseRef-접두어로 적습니다(예:LicenseRef-Proprietary). - 식별자만 있고 원문이 없으면 고지 의무를 다했다고 보기 어렵습니다. 원문 파일은 따로 둡니다.
이 글은 일반 정보이며 법률 자문이 아닙니다. 중요한 결정은 전문가와 상의하세요.
참고 출처
- SPDX License List — https://spdx.org/licenses/
- SPDX Specification, Annex: Using SPDX short identifiers in source files — https://spdx.github.io/spdx-spec/v2.3/using-SPDX-short-identifiers-in-source-files/
- REUSE Specification — https://reuse.software/spec/
- npm Docs, package.json license — https://docs.npmjs.com/cli/configuring-npm/package-json#license
- PEP 639 — https://peps.python.org/pep-0639/