Yocto 프로젝트에서는 다양한 오픈소스 패키지를 관리하기 때문에 라이센스 관리가 중요하다. Yocto 프로젝트는 이를 위해 "LICENSE" 파일을 각 패키지에 포함시키고, 패키지 메타데이터에서 라이센스 정보를 관리한다.

라이센스 파일 추가

모든 패키지에는 해당 패키지의 라이센스를 명시하는 파일이 존재해야 한다. 이 파일의 위치는 보통 다음과 같다:

<recipe-directory>/LICENSE

각 패키지는 저작권 정보와 라이센스 텍스트를 포함하게 되며, 이는 패키지 배포 시 포함되어야 한다.

메타데이터에서 라이센스 지정

각 레시피 파일에서 라이센스를 지정해야 한다. 이는 레시피 파일의 주요 메타데이터 항목 중 하나이다. 레시피 파일은 .bb 확장자를 가지며, 라이센스 정보는 다음과 같이 지정할 수 있다:

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=<checksum>"

위의 예제에서 LICENSE 변수는 패키지가 사용하는 라이센스를 명시한다. LIC_FILES_CHKSUM 변수는 라이센스 파일의 체크섬을 포함하며, 이는 Yocto 프로젝트가 빌드 중 라이센스 파일의 무결성을 확인하는 데 사용된다.

여러 라이센스의 사용

일부 패키지는 여러 라이센스를 사용할 수 있다. 이 경우에는 여러 라이센스를 &| 기호로 구분하여 지정할 수 있다:

LICENSE = "GPL-2.0 & LGPL-2.1"
LIC_FILES_CHKSUM = "file://LICENSE;md5=<checksum>"

여기서 & 기호는 해당 패키지가 두 라이센스 모두를 따름을 의미하고, | 기호는 둘 중 하나의 라이센스를 선택할 수 있음을 의미한다.

라이센스 파일 체크섬

Yocto 프로젝트에서는 라이센스 파일이 변조되지 않았는지 확인하기 위해 체크섬을 사용한다. Yocto에서는 보통 MD5나 SHA256 체크섬을 사용한다:

LIC_FILES_CHKSUM = "file://LICENSE;md5=c4ca4238a0b923820dcc509a6f75849b"

라이센스 컴플라이언스

Yocto 프로젝트는 또한 라이센스 컴플라이언스를 위한 도구를 제공한다. LICENSE_CREATE_PACKAGE 변수를 통해 배포되는 모든 패키지의 라이센스 정보를 컴파일할 수 있다. 이 변수는 보통 local.conf 파일에서 설정된다:

LICENSE_CREATE_PACKAGE = "1"

이 설정을 통해 Yocto 프로젝트는 모든 라이센스 정보를 하나의 패키지로 묶어 제공할 수 있다. 이를 통해 최종 제품의 라이센스 컴플라이언스를 보장할 수 있다.

라이센스 검증 도구

Yocto 프로젝트는 라이센스 컴플라이언스를 효과적으로 관리하기 위해 여러 도구를 제공한다. 여기에는 빌드 시 라이센스를 검증하고, 빌드 후 분석하는 도구들이 포함된다.

buildhistory

buildhistory 기능을 사용하면 빌드 중 발생한 라이센스 변경을 추적할 수 있다. local.conf 파일에 다음과 같은 설정을 추가하면 된다:

INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"

buildhistory는 각 빌드에 대한 정보를 기록하고 변경사항을 확인할 수 있도록 해준다.

oe-qa-checks

Yocto는 빌드된 이미지를 검사하기 위한 다양한 QA 체크를 포함하고 있다. 라이센스 검증은 그 중 하나이다. local.conf 파일에 다음 줄을 추가하여 활성화할 수 있다:

IMAGE_CLASSES += "testimage"
TESTIMAGE_AUTO_qemux86 = "1"

이 설정을 통해 Yocto는 빌드된 이미지를 QEMU에 자동으로 로드하고 라이센스를 포함한 다양한 QA 테스트를 수행한다.

특정 라이센스 파일 위치

레시피 파일에서 라이센스 파일 위치를 보다 세부적으로 지정하고 싶다면, 각 라이센스 파일에 대한 경로와 체크섬을 명시할 수 있다. 예를 들어:

LIC_FILES_CHKSUM = " \
    file://path/to/LICENSE;md5=<checksum> \ 
    file://path/to/COPYING;md5=<checksum> \
"

이 방법을 통해 여러 파일을 사용할 수 있으며, 각 파일의 무결성을 개별적으로 확인할 수 있다.

예제: hello-world 패키지의 라이센스 설정

hello-world 패키지를 위한 간단한 레시피 파일을 작성해보겠다:

DESCRIPTION = "Hello World example"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e7859b18cb324d95c055e5214be12dea"

SRC_URI = "file://hello-world.c"

S = "${WORKDIR}"

do_compile() {
    oe_runmake
}

do_install() {
    install -d ${D}${bindir}
    install -m 0755 hello-world ${D}${bindir}
}

이 예제에서 LIC_FILES_CHKSUM 변수는 LICENSE 파일의 MD5 체크섬을 포함하고 있다. 이는 Yocto가 빌드 중 라이센스 파일의 무결성을 검증하는 데 사용한다.


Yocto 프로젝트에서의 라이센스 관리는 복잡하지만 중요한 작업이다. 라이센스 파일의 추가, 메타데이터에서의 라이센스 지정, 그리고 라이센스 검증 도구의 사용을 통해 오픈소스 소프트웨어 컴플라이언스를 효과적으로 관리할 수 있다. 이는 최종 제품의 적법성을 보장하고, 오픈소스 커뮤니티에 대한 존중을 표하는 중요한 단계이다.