원문 캡처 · code.geohack.top
원문 캡처 · code.geohack.top

GitHub는 10월 16일 오픈소스 라이선스 준수 기능을 정식 출시했다. GitHub Enterprise Cloud 조직은 이 기능으로 의존성 변경 사항을 정책과 대조하고, 규칙 집합을 활성화하면 정책을 위반한 풀 리퀘스트의 병합을 막을 수 있다.

이 기능은 GitHub의 모든 저장소에서 쓸 수 있는 것은 아니다. GitHub Enterprise Cloud 조직(데이터 레지던시 적용 조직 포함)에서 사용할 수 있으며, 저장소에 GitHub Code Security와 의존성 그래프가 활성화돼 있어야 한다. 관리자에게는 엔터프라이즈 정책과 규칙 집합을 관리할 권한도 필요하다. 자세한 내용은 기능 개요와 설정 안내를 참고하면 된다.

풀 리퀘스트에서 패키지 매니페스트가 바뀌면 GitHub는 기준 브랜치와 풀 리퀘스트 브랜치의 의존성 변경 사항을 비교한다. 의존성 그래프 데이터를 이용해 감지된 직접·전이 의존성의 라이선스를 확인한 뒤 정책과 대조하고, 정책을 따르지 않는 의존성에는 주석을 단다. 엔터프라이즈 정책에는 기본 제공 라이선스 목록이나 SPDX 식별자를 사용할 수 있다. Enterprise Open-Source License Manager는 패키지나 라이선스 단위의 예외를 승인할 수 있다.

이 검사는 저장소의 기존 의존성을 한꺼번에 판정하는 것이 아니라 풀 리퀘스트에서 발생한 의존성 변경을 평가한다. 기능은 조직이 정한 정책을 감지된 의존성 데이터에 적용할 뿐, 어떤 라이선스를 허용해야 하는지 결정하지는 않는다.

규칙 집합을 Evaluate 모드로 설정하면 검사를 수행하고 풀 리퀘스트에 주석을 달지만 병합을 차단하지 않는다. Active 모드에서는 정책에 어긋나는 의존성을 추가한 풀 리퀘스트가 위반 사항을 해결할 때까지 차단된다. 다만 저장소의 브랜치 보호 규칙에서 댓글 해결을 요구하면 라이선스 준수 주석도 해당 규칙의 적용을 받는다. 따라서 Evaluate 모드에서도 기존 댓글 해결 보호 규칙 때문에 병합이 막힐 수 있다. 실제 팀의 브랜치 보호 설정을 적용해 시험해야 한다.

도입할 때는 라이선스 결정을 담당하는 사람들과 정책을 검토한 뒤 시범 저장소부터 시작하는 편이 안전하다. 의존성 그래프가 활성화됐는지 확인하고, 처음 허용할 라이선스 목록과 직접 추가한 SPDX 식별자를 검토한다. Evaluate 모드에서 허용·비허용 라이선스와 전이 의존성을 포함한 테스트 풀 리퀘스트를 열어 결과를 살펴본다. 주석 해결이 필요한지, 예외를 어떻게 요청하고 승인하는지도 확인한다. 이후 별도 규칙 집합이나 저장소 속성을 이용해 적용 대상을 나누고 Active 모드로 점진적으로 전환할 수 있다.

GitHub는 저장소를 비활성, Evaluate, Active 그룹으로 나눠 단계적으로 도입하는 방식을 제안한다. 문서에 따르면 기본 제공 라이선스 위험 분류는 참고 정보이며 법률 자문이 아니다. 경고는 법률 검토를 대신하는 것이 아니라 조직의 정책에 따라 판단해야 한다.

이 기능을 쓰면 풀 리퀘스트 단계에서 의존성 라이선스 정책을 적용할 수 있다. 다만 라이선스 규칙이나 전이 의존성, 브랜치 보호 설정의 상호작용으로 예상치 못하게 병합이 차단될 수 있다. 시범 적용으로 정책과 병합 보호 설정을 모두 시험한 다음 차단 기능을 켜야 한다. 정책 위반 이유를 개발자가 이해하고 해결 방법을 알 때 정책 게이트가 도움이 된다.

관련 자료: GitHub의 정식 출시 발표, 오픈소스 라이선스 준수 기능 안내, 오픈소스 라이선스 정책 설정