먼저 한글로 라이센스라고 알고 있었지만 라이선스라고 한다.
개발자들에겐 라이선스란 굉장히 중요한 부분이다.
오픈소스를 가져다 기능을 구현했지만 어느날 그 오픈소스의 라이선스때문에 코드를 강제적으로 오픈해야 될수도 있다.
또한 상업적사용을 제한할 수도 있기 때문에 사용하기전 해당 소스의 라이선스를 한번 확인하는것이 중요하다.
현재 소프트웨어 라이선스 분류는 아래와 같다.
이 중 흔히 볼수 있는 라이선스는 MIT, Apache2.0, GPL 등이 있다.
1. MIT
MIT 라이선스는 MIT공대에서 자기 학교의 개발자들을 위해 개발한 라이선스이다.
MIT 라이선스를 따르는 소프트웨어를 개조한 제품을 반드시 오픈 소스로 배포해야 한다는 규정이 없으며 다른 엄격한 라이선스를 피하려는 사용자들에게 인기가 있다.
배포시 저작권 안내문구, MIT 라이선스 문구가 모든 복제본에 포함되어야 한다는 규정외에 다른 제한적인 규정은 없다.
그래서 npm 라이브러리나 java 라이브러리들을 보면 MIT가 가장 흔하게 볼수 있다.
2. Apache2.0
개인적으로 MIT 다음으로 흔하게 봤던 Apache2.0 라이선스이다.
아파치 라이선스는 아파치 웹서버의 배포를 위해 만들어진 라이선스이다.
배포시 수취인에게 라이선스 사본을 제공하고, 수정된 파일에 대해 수정사항을 표시한 안내문구를 첨부해야한다.
그리고 저작권, 특허, 상표, attribution에 대한 고지사항을 소스코드 또는 "NOTICE" 파일 등에 포함되어야 한다.
3. GPL
라이브러리마다 보통 저작권 표시가 되어있고 상업적이용이 가능하므로 위 2개의 경우는 개발자 입장에서 크게 신경쓸 것은 없다.
하지만 GPL은 소스코드를 공개해야 될 수도 있기 때문에 까다로운 라이선스이다.
그렇기 때문에 GPL의 소스코드 전체 혹은 일부를 사용했을때 어디까지 소스코드 공개를 해야 하는지 의문이 발생한다.
우선 소스코드 공개의무가 발생하려면 물리적인 프로그램의 이동인 '배포'가 발생해야 한다.
배포시 GPL 파생 저작물로 판단될경우 해당 어플리케이션의 코드는 모두 공개해야 한다.
예를 들면 나는 MaraDB로 백엔드를 만들어 어플리케이션을 구현하고 결제시스템까지 넣어 상업적으로 어플리케이션을 이용하려고 한다.
나는 해당 어플리케이션의 클라이언트를 사용자들에게 제공하여 상업적으로 이용하는 것이다.
이런 경우 나는 유저들에게 네트워크 서비스를 제공하기 때문에 GPL이 적용되지 않는다.
다만 클라이언트에 MariaDB 라이브러리를 직접적으로 사용했다면 공개 해야 한다고 한다.
다른 케이스로는 이 어플리케이션 자체를 다른 업체에게 판매할 경우가 문제가 될 수 있다.
이때는 GPL2.0의 파생 저작물로 판단하여 코드를 공개해야 하는 경우도 있다.
자세한 케이스는 각자 따져봐야 할것이다.
라이선스 확인 방법
1. npm
npm 라이브러리들은 npm 사이트에서 해당 라이브러리 이름을 검색 한후 라이선스가 표시된다.
오른쪽에 라이선스로 MIT가 적혀져있다.
여담으로 리액트로 개발한 웹에서 문제가 생겨 리액트를 개발한 메타(전 페이스북)을 고소할 경우에 리액트에 대한 라이선스는 뺏긴다고 한다.
그래서 리액트로 개발한 웹은 라이선스가 없는 상태에서 고소를 진행하기 때문에 불리하다고 한다.
2. java spring boot
gradle7+ 기준
build.gradle 에 라이브러리 추가
plugins {
id 'com.github.jk1.dependency-license-report' version '2.0'
}
gradle 빌드 후
해당 Task 더블클릭 후 build -> reports -> dependency-license 폴더에서 확인 가능
참고
https://www.olis.or.kr/license/Detailselect.do?lId=1002
https://www.olis.or.kr/license/Detailselect.do?lId=1006
https://www.oss.kr/oss_license
https://www.oss.kr/oss_guide/show/044d96fd-413d-4ab3-ad72-4776d2b7e002
'개발 > 정리' 카테고리의 다른 글
[정리] Youtube가 가진 기능 도메인으로 정리해보기 (0) | 2023.05.10 |
---|---|
[정리] 객체지향의 4가지 특징 (0) | 2023.05.03 |
[정리] 변수란 무엇일까? (0) | 2023.05.02 |
[정리] ubuntu java 개발자 세팅 (그래픽카드 드라이버 설치, vscode, ibus, LibreOffice, virtualBox, openJDK) (0) | 2023.04.24 |
[정리] 브라우저의 작동 방식 (0) | 2023.04.11 |