요약

  • SPDX 라이선스 표현식은 라이선스 정보에 대한 정의된 표현이며, 형식이 올바른 표현식이 컴플라이언스, 허가, 배포 또는 출시에 대한 판정은 아닙니다.
  • SPDX는 패키지 저자가 선언한 정보, 파일에서 발견된 라이선스 정보, 문서 작성자의 결론 라이선스 기록을 구분합니다. 각각은 서로 다른 질문에 답하면서도 유용할 수 있습니다.
  • 내구성 있는 기록은 표현식, 아티팩트 범위, 관찰 출처, 결론 및 그 설명, 그리고 별도로 소유된 결정 또는 명시적 결정 공백을 보존해야 합니다.

짧은 문자열은 짧은 주장만 담을 수 있다

SPDX 표현식은 결정적인 것처럼 보입니다.MIT,GPL-2.0-only OR BSD-3-Clause, 또는AND와WITH를 포함한 표현식은 소스 헤더, 패키지 매니페스트, BOM, 조달 파일, 출시 검토를 기계 판독 가능한 형태를 잃지 않고 이동할 수 있습니다. 이 이식성은 실질적인 운영상 이득입니다. 패키지가 이동할 때마다 일관성 없는 자연어 헤더를 다시 파싱하지 않아도 됩니다.

그러나 이식성은 권한이 아닙니다. SPDX의 표현식 문법은 식별자, 참조, 예외, 연산자가 유효한 표현식을 이루는 방식을 기술할 뿐, 그 문자열이 패키지에 대해 완전하다는 것, 작성자가 독자가 도출하는 모든 함의에 대한 권한을 가졌다는 것, 수신자가 어떤 의무를 이행했다는 것을 말하지 않습니다. 유효한 문법은 구문론적 질문을 해결할 뿐, 그 정보로부터 뒤따르는 결정을 해결하지 않습니다.

이 경계가 중요한 이유는 통상의 약칭이 라벨을 확장하기 때문입니다. "SPDX가 Apache-2.0이다"는 조용히 "그 소프트웨어는 클리어됐다", "출시할 수 있다", "이미 배포됐다"로 확장됩니다. 이는 무해한 문법적 변형이 아닙니다. 라이선스 정보의 표현에서 결론으로, 그리고 운영 행위로 이동합니다. 각 단계는 서로 다른 범위, 소유자, 정정 경로를 필요로 합니다.

SPDX의 공개된 역할 설명은 특히 직접적인 절제를 제공합니다. 즉, 사실을 수집하고 전달하며, 라이선스나 라이선스 컴플라이언스에 대한 법적 해석을 하지 않습니다. 이 절제는 형식의 약점이 아니라, 정책, 관할권, 리스크, 배포 제약이 서로 다른 조직 간에서도 SPDX로 구축된 기록이 유용하게 남을 수 있는 이유입니다. 공통의 정보 표현은 공통의 결정 규칙보다 더 멀리 전달될 수 있습니다.

하나로 합쳐서는 안 되는 세 가지 기록

SPDX 명세의 패키지 필드는 이 구분을 구체적으로 만듭니다. Declared License는 패키지 저자가 선언한 정보입니다. 명세는 제3자 저장소에서 얻은 정보를 해당 필드에 삽입하지 말라고 규정합니다. 이 필드에는 출처가 있습니다. 패키지 저자가 선언한 내용을 기록할 뿐, 이후 연구자, 스캐너, 구매자가 다른 곳에서 알게 된 모든 것을 기록하지 않습니다.

이 출처가 필드에 가치를 부여합니다. 독자는 좁고 답변 가능한 질문을 할 수 있습니다. 패키지 저자가 제시한 라이선스 정보는 무엇인가? 답은 SPDX 표현식,NONE, 또는NOASSERTION일 수 있으며, 값이 없다는 것은 이 형식 내에서 정의된 정보적 의미를 갖습니다. 이 어떤 상태도 허가, 컴플라이언스, 거래에 대한 결론을 조용히 제공하지 않습니다. 선언의 부재는 라이선스가 존재하지 않는다는 판정이 아니며, 수신자가 진행해도 된다는 증거도 아닙니다. 가시적으로 남아야 하는 기록 상태입니다.

Concluded License 필드는 다른 질문에 답합니다. 이는 governing 라이선스를 판단할 수 없을 때의 대안 값을 포함하여, SPDX 문서 작성자가 패키지 또는 파일을 지배한다고 결론지은 내용을 기록합니다. 결론은 가치 있을 수 있습니다. 소스 헤더 뒤로 불일치를 숨기는 대신 누군가의 평가를 기록합니다. 그러나 그 소유자는 선언의 소유자와 다릅니다. 문서 작성자가 SPDX 문서를 작성한다고 해서 패키지 저자가 되지 않으며, 저자 선언이 동일한 표현식 문법을 사용한다고 해서 이후의 결론이 되지 않습니다.

SPDX는 이 간극을 지워야 할 오류가 아니라 가시화합니다. 결론 패키지 값과 선언 패키지 값이 다를 때, 명세는 라이선스 필드에 대한 주석에 서면 설명을 요구합니다. 대응하는 파일 수준 자료는 파일에서 실제로 발견된 정보와 문서 작성자의 결론을 구분하고, 다를 경우 다시 설명을 요구합니다. 이는 강력한 거버넌스 패턴입니다. 불일치를 최종처럼 보이는 하나의 라벨로 합칠 필요 없이, 불일치의 이유, 범위, 소유자와 함께 보존할 수 있습니다.

세 번째 기록은 관찰입니다. 파일 수준에서 파일 안에서 발견된 라이선스 정보는 패키지 전체 저자 선언이나 결론 라이선스 주장과 같은 것이 아닙니다. 그 범위는 특정 바이트와 특정 조회로 한정될 수 있습니다. 그렇기 때문에 정정이 가능합니다. 파일이 바뀌면 관찰은 바뀔 수 있고, 이전 결론이 존재하지 않았던 것처럼 다시 쓰일 필요가 없습니다. 결론을 수정해야 한다면, 수정은 어떤 새 관찰이 그 원인이었는지 식별할 수 있습니다.

결정은 다른 곳에 남아 있다

이러한 기록들이 모인 후 다른 질문이 제기될 수 있습니다. 조직은 무엇을 해야 하는가? 추가 검토가 필요한지, 출시 프로세스가 진행될 수 있는지, 자체 정책 하에 배포가 허용되는지, 배포가 이뤄져야 하는지를 결정해야 할 수 있습니다. SPDX 기록의 사실은 그 결정에 정보를 줄 수 있습니다. 그러나 결정자, 정책 버전, 관할권, 예외 경로, 영향받는 아티팩트, 적용 시점을 선택할 수 없습니다.

이는 SPDX를 덜 유용하게 만들라는 초대가 아닙니다. 하나의 표현식에 수행할 수 없는 일을 맡지 말라는 경고입니다. 결정은 조직의 정책, 계약, 패키지 버전, 정확한 아티팩트 내용, 고지 처리, 예외, 다른 구성 요소, 고객 약속 또는 배포 환경에 의존할 수 있습니다. 이 글은 그 어떤 사안도 판단하지 않습니다. 라이선스 정보를 담은 문자열에서 조용히 빌려지는 일만 막을 뿐입니다.

따라서 독자는 두 가지 반대 오류를 피해야 합니다. 첫째는 의례적 확신입니다. 익숙한 식별자를 완전한 컴플라이언스 결과로 다루는 것입니다. 둘째는 허무주의입니다. 모든 것을 결정하지 않는다는 이유로 표현식을 무가치하게 다루는 것입니다. 더 나은 자세는 절제된 사용입니다. 기록된 표현식은 그것이 어떤 종류의 기록인지에 대한 정밀한 증거가 될 수 있습니다. 모호성을 줄이고, 불일치를 가리키고, 이후 검토를 재현 가능하게 만들 수 있습니다. 그러나 그것이 내리지 않은 결정으로 광고되어서는 안 됩니다.

표현식-결정 영수증을 유지하라

가장 작은 실용적 추가물은 표현식-결정 영수증입니다. 이는 새로운 SPDX 프로파일이 아니며 어떤 조직의 법적 프로세스도 규정할 필요가 없습니다. 서로 다른 주장을 판독 가능하게 유지하는 간결한 보조 기록입니다.

첫째, 정보를 범위에 묶습니다. 기술되는 패키지, 파일, 아티팩트 또는 버전, 그리고 가능하다면 안정적인 조회 또는 콘텐츠 참조입니다. 둘째, 어떤 정보 기록을 보존하는지 명시합니다. 저자 선언, 파일에서 관찰된 정보, 또는 문서 작성자의 결론입니다. 셋째, 정확한 표현식과 그 출처를 보존합니다. 결론이 선언이나 관찰과 다르다면 하나를 다른 것으로 덮어쓰는 대신 서면 설명을 보존합니다.

넷째, 결정 경계를 명시합니다. 영수증은 별도의 결정이 실제로 존재할 때만 결정 소유자와 적용 정책 버전을 명명해야 합니다. 결정의 범위와 시점을 기록해야 하며, 라벨의 보편적 속성으로 제시해서는 안 됩니다. 결정이 이뤄지지 않았다면 정직한 상태는not assessed이지, 독자가 승인으로 해석하도록 초대하는 세련된 표현식이 아닙니다. 마지막으로 정정은 새 관찰이나 결론을 그 이유와 함께 추가해야 합니다. 이전 기록을 지우거나 이전 결정이 잘못된 주체에 의해 내려졌다고 암시해서는 안 됩니다.

결과는 소박하지만 유용합니다. 패키지 저자는 모든 다운스트림 결정에 대한 책임을 지지 않고 자신의 선언을 할 수 있습니다. 문서 작성자는 모든 수신자에 대한 법적 판단이라고 가장하지 않고 결론을 보존할 수 있습니다. 결정 소유자는 SPDX 표현식을 자신의 권한 근거로 소급 변환하지 않고 자신이 결정한 내용을 기록할 수 있습니다. 독자는 체인이 어디서 끝나는지 볼 수 있습니다.

출처

  1. SPDX — Overview
  2. SPDX Specification 2.3 — Package Information
  3. SPDX Specification 2.2.2 — File Information
  4. SPDX Specification 3.0.1 — License Expressions