Yocto 프로젝트는 임베디드 리눅스 배포판을 구축하기 위한 오픈 소스 프로젝트로, 여러 가지 오픈 소스 소프트웨어 패키지를 결합하여 최적의 시스템을 구성할 수 있다. 하지만 이 과정에서 각각의 소프트웨어가 가지는 라이센스를 관리하고 준수하는 것은 매우 중요하다.
주요 라이센스 종류
Yocto 프로젝트는 다양한 종류의 오픈 소스 라이센스를 지원한다. 다음은 그 주요 라이센스의 예이다:
- GPL (General Public License): 소스 코드의 공개를 요구하는 강력한 카피레프트(코드 공개) 라이센스. GPL의 다양한 버전이 존재하며 각각의 조건이 조금씩 다르다.
- LGPL (Lesser General Public License): GPL 규제를 조금 완화한 것으로, 라이브러리 형태로 사용될 때 원 소스 코드를 수정하지 않는다면 소스 코드 공개 의무가 없다.
- MIT License: 소프트웨어의 사용, 복사, 수정, 병합, 발행, 배포, 재라이센스를 거의 제한 없이 허용하는 라이센스.
- BSD License: MIT 라이센스와 유사하지만, 광고조항이 포함된 버전도 있다.
- Apache License: 특허권 문제를 명시적으로 다루고, MIT와 비슷한 조건의 라이센스를 제공한다.
라이센스 파일 관리
Yocto 프로젝트에서는 라이센스 정보를 명확하게 파악하고 관리하기 위해 다양한 툴과 파일을 지원한다.
- meta/conf/licenses.conf: 이 파일은 프로젝트에서 사용 가능한 라이센스의 목록과 그 설명을 제공하는 역할을 한다.
- LIC_FILES_CHKSUM: 패키지의 라이센스 파일 위치와 그 Checksum(해시 값)을 지정하며, 이를 통해 소스 코드와 라이센스 파일의 일관성을 유지한다.
라이센스 정책 설정
라이센스 정책을 설정하는 것은 Yocto 빌드 시스템의 중요한 부분이다. 이를 위해 몇 가지 주요 설정 파일과 변수들이 사용된다.
- INHERIT += "license": 라이센스 관련 기능을 활성화하는 기본 설정이다.
- LICENSE: 특정 패키지가 어떤 라이센스를 따르는지 지정한다. 예를 들어,
LICENSE = "GPLv2"
와 같이 사용한다. - LICENSE_FLAGS: 추가적인 라이센스 조건이나 주석을 지정할 때 사용된다.
- BAD_RECIPE_LICENSES: 허용되지 않는 라이센스를 가진 레시피를 건너 뜁니다.
INHERIT += "license"
BAD_RECIPE_LICENSES = "GPLv3 AGPLv3"
이 설정을 통해 프로젝트에서는 허용하지 않는 라이센스를 가진 패키지나 레시피를 제외할 수 있다.
라이센스 보고서 생성
Yocto 프로젝트는 라이센스를 추적하고 문서화하는데 유용한 라이센스 보고서 생성 기능을 제공한다. 이를 통해 사용된 패키지와 그 라이센스를 한눈에 확인할 수 있다.
bitbake your-image -c generate_license_manifest
bitbake your-image -c readme_create
이 명령어를 통해 생성된 보고서는 사용된 모든 패키지의 라이센스 정보를 포함하게 된다. 이를 통해 프로젝트의 법적 컴플라이언스 상태를 쉽게 점검할 수 있다.
라이센스 필터링
Yocto 프로젝트는 특정 라이센스를 기반으로 패키지를 필터링하는 기능을 제공한다. 이를 통해 프로젝트에 적합하지 않은 라이센스를 가진 패키지를 제외할 수 있다.
INCOMPATIBLE_LICENSE = "GPLv3"
위와 같이 설정하면 GPLv3 라이센스를 가진 모든 패키지가 빌드에서 제외된다. 이 설정은 정책적으로 특정 라이센스를 사용하지 않으려는 경우 유용하다.
예외 처리 및 커스터마이징
Yocto 프로젝트는 기본 라이센스 관리 기능 외에도 사용자 정의 가능한 여러 옵션을 제공한다. 예를 들어, 프로젝트 내부적으로 특정 소프트웨어 라이센스의 허용 기준을 재정의할 수 있다.
LICENSE:append = " Proprietary"
LIC_FILES_CHKSUM:append = " file://LICENSE;md5=abcdef123456..."
이와 같이 사용하면 기본적인 라이센스 모델에 사용자가 직접 정의한 라이센스를 추가하는 것도 가능한다.
Yocto 프로젝트에서 라이센스 관리는 프로젝트의 법적 및 윤리적 기준을 지키는 데 있어 매우 중요하다. 프로젝트의 라이센스 정책을 설정하고 관리하는 일은 임베디드 시스템 구축 과정에서 필수적인 과정이며, 이를 통해 법적 리스크를 최소화하고 프로젝트의 투명성을 유지할 수 있다.