황은경(violet.blue) / kakao corp.(OSA)
---
오픈소스를 사용하면서 오픈소스 라이선스 의무사항을 지키고 있나요?
오픈소스를 준비하면서 (여러분의 프로젝트를 Github으로 오픈하기 위해) 어떤 오픈소스 라이선스로 배포해야 할지 알고 있나요?
오픈소스를 사용한다면 오픈소스 라이선스 의무사항을 준수하고,
오픈소스로 공개한다면 여러분의 코드를 보호하고 올바르게 사용되도록 하기 위해서 오픈소스 라이선스에 대한 이해가 필요합니다.
이 세션에서는 Apache, MIT, GPL 등의 오픈소스 라이선스 의무사항을 살펴보고, 오픈소스 분쟁사례를 통해 관련 리스크를 파악합니다. 더불어, 코드 공개 및 배포를 위한 오픈소스 라이선스의 양립성 및 주의사항을 확인하고, 카카오의 오픈소스 Guidance에 대해 소개합니다.
2. “
FOSS
(Free and Open Source Software)
저작권자가 소스코드를 공개하여 누구나 자유롭게
사용, 수정, 재배포 할 수 있는 자유로운 소프트웨어
“ If I have seen further it is by standing
on the shoulders of Giants ”
- Isaac Newton
3. /*
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All
rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of Oracle or the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** The HelloWorldApp class implements an application that simply prints "Hello World!" to
standard output. */
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
“코드를 사용하면서 출처를 밝히는 것은
개발자의 의무사항”
License, copyright 유지
기본적인 의무사항
4. Open Source License 구분
Public Domain
free for all
MIT / X11
BSD-New
Apache 2.0
GPL 2
AGPL 3
LGPL 2.1+
LGPL 3 or
LGPL 3+
MPL 1.1
GPL 3 or
GPL 3+
GPL 2+
keep-on share-alike
Network
Protective
LGPL 2.1
5. • 소스코드를 공개하지 않아도 되는 대표적인 라이선스
• 저작권 명시(고지문)
• 적용 사례 : Nginx(The BSD 2-Clause License)
• MIT에서 해당 대학의 SW 공학도들을 돕기 위해 개발한 라이선스
• 라이선스 및 저작권 명시(고지문)
• 적용 사례 : 부트스트랩 , Angular.js, Backbone.js, jQuery
• 아파치 재단의 모든 SW에 적용되는 라이선스
• BSD 의무사항 + 특허권(GPL2.0으로 배포되는 코드와는 결합 불가능)
• 적용 사례 : 안드로이드(v2.0), 하둡(v2.0)
일반적으로 사용하는 라이선스
Apache
BSD
MIT
6. • 수정한 소스코드 LGPL로 공개 (Static Linking 으로 사용하면 전체 코드 공개)
• 라이선스 및 저작권 명시
• 적용 사례 : 모질라 파이어폭스(v2.1)
• GPL 소스코드를 이용한 소프트웨어 전체 GPL로 공개
• 라이선스 및 저작권 명시
• 적용 사례 : 리눅스 커널(v2.0)
• AGPL 소스코드를 이용한 소프트웨어 전체 AGPL로 공개. 웹서비스 포함!
• 라이선스 및 저작권 명시
• 적용 사례 : 몽고DB(v3.0)
■ Database Server and Tools : AGPL 3.0
■ Drivers : Apache 2.0
LGPL
GPL
주의해야 할 라이선스
AGPL
8. ➺ 오픈소스 소프트웨어의 배포의 개념?
“소스코드 및/또는 바이너리 (실행) 코드의 카피를 다른 사람에게 제공하는 행위(to give someone
else a copy of its code — either its source code, or its binary (executable) code, or both)”
[출처] Open Source Initiative (https://opensource.org)
XX 소스코드야 땡큐~
배포 !
USB
9. ✓ 모바일앱의 성장
✓ 전 세계 공개SW 단체에 의한 모니터링
✓ 오픈소스 증가 -> 저작권자 증가
오픈소스 Compliance 이슈 증가
10. Free Software Foundation
GNU 프로젝트 운영 및 Free SW 배포/관리
OSI (Open source Initiative)
OSS 라이선스 인증 관리
GPL Violations
GPL 라이선스 기반의 저작권 보호 및 소송지원 단체
SFLC (Software Freedom Law Center)
OSS 개발자를 위한 법적 자문기관
기타 : Linux Foundation, FOSS, OIN(Open
Innovation Network), 국내 OSSF 등
OSS 대표 단체
11. • SW는 SW에 관한 지적재산권에 의해 보호 받고 있는데, 원칙적으로 저작권자만이 해당 SW에 대한
독점 사용 권리를 갖는다.
• 라이선스(License)는 이러한 독점 사용 권리에 대해 SW 개발자와 사용자간의 이용방법 및 조건의
범위를 명시한 대여 규칙을 정의해 놓은 사용 허가권(License)으로 대여의 방법은 유료 및 무료로
구분된다.
Software의 지적재산권과 라이선스
오픈소스 사용자는 라이선스를 준수해야 할 의무가 있습니다.
14. Xiaomi: MIUI / 리눅스 커널 기반 GPL 코드 포함 (2014년)
해당 소스 코드 공개 - 2015.3.31
스카이프 리눅스 전화단말기 'WSKP100’ : 리눅스 커널 코드 사용 (2007년)
소스코드 공개 및 벌금 지불 판결
유통 업체에게도 GPL위반 책임. 본국이 아닌 다른 나라에서 소송/판결
엘림넷 v. 하이온넷: 영업비밀침해와 VTUND (GPL) (2005년)
엘림넷에서 VTUND 를 기반으로 개발한 ETUND를 하이온넷에서 HL로 개작 및 상용화
엘림넷은 영업비밀침해에 대한 고소, FSF와 GNU는 저작권법 위반 경고 ▶ 소스 코드 공개
15. Google, Oracle 자바 소송
❄ Google이 Android 에 java api 37개 사용
❄ Oracle이 특허 및 저작권 침해 10조($90억) 손해배상 소송
❄ History
○ 2012년 1심 : API 저작권 인정하지 않음
○ 2014년 항소심 : API 저작권 인정
○ 2015년 연방대법원 : API 저작권 인정 확정, 공정이용 여부 확인을 위해 1심으로 돌려 보냄
○ 2016년 1심 : 공정이용 판결
○ 2018년 항소심 : 공정이용 아니다 구글 배상하라고 판결
16. VMWare, 리눅스 개발자 소송
❄ VMWare:ESXi에 리눅스 커널 코드 사용
❄ 일반 개발자(크리스토프 헬비그)가 고소 진행, 오픈소스 관련 단체 지원
❄ 지난해 8월 함부르크 지방법원은 소송 기각 결정
○ ESXi의 Vmklinux 에서 사용중으로 소스 코드 제공하고 있음 - GPL 준수
○ Vmkernel 에는 사용되지 않음
○ Vmklinux와 Vmkernel 의 결합방식은 다루지 않음
❄ 크리스토프 헬비그는 항소를 밝힌 상태
17. ❄ 라이선스 소송은 본국이 아닌 다른 나라에서도 가능
❄ 미국법원에서 오픈소스 라이선스가 집행력 있는 계약임을 인정
❄ 손해배상은 침해로 인해 내가 얻지 못한 이익+침해자가 얻은 이익 등을 고려해서 결정
❄ 상용화를 포함한 라이선스 채택은 저작권자의 고유 권한
➺ 다중 라이선스(Multi License)?
- 하나의 코드를 2가지(dual license)혹은 그 이상의 라이선스로 배포하는 형태
- 저작권자가 선택 사항으로 독자적인 유료 보증 설정
라이선스 분쟁 이슈 체크
18. GPL 사용 = GPL로 소스 코드 공개
GPL을 사용한 프로젝트를 배포한 경우 그 프로젝트의 전체 소스코드를 공개해야 함
✼ AGPL은 네트워크로 연결되어 연동되는 프로그램의 전체 소스코드 공개(웹서비스도 공개)
GPL2.0 + Apache2.0 = 배포 불가능
프로젝트에 GPL2.0과 Apache2.0 오픈소스를 같이 사용했다면 배포할 수 없음
Apache2.0의 특허 보복 조항을 GPL2.0에서는 보장하지 않아 라이선스 충돌(양립불가능)
※ 특허 보복 : 사용자가 특허 소송 제기시 라이선스 종료(사용불가)되고 사용료 청구
LGPL2.1 + Apache2.0 = 결합방식에 따라 배포 불가능 할 수 있음
LGPL2.1도 특허 보장하지 않으므로 라이선스 충돌(양립불가능)
라이선스의 적용 범위에 따라 LGPL2.1을 사용한 코드가 Apache2.0 오픈소스를 사용한
코드와는 독립적으로 사용(Dynamic Linking)되고 있는 경우는 배포 가능
GPL 알고 씁시다!
19. ❄ 투명한 코드 > 가시성 확보, 책임감/능력 향상
❄ 커뮤니케이션 > 문서화, 이슈 생성, 커밋 로그, 거버넌스
❄ 기술 중심 > 코드를 중심으로 의사소통과 의사결정
❄ 개인 명성 > 소스 코드, 커밋 로그, 프로필
http://rankedin.kr/users
http://rankedin.kr/repos
❄ 다양성 보장 > 발견과 개선, 선택과 집중
오픈소스 공유 및 기여
20. 라이선스 명시
라이선스를 명시하지 않으면 기본 저작권법이 적용되어 타인이 저작물을 복제,배포 할 수 없음
https://help.github.com/articles/licensing-a-repository/
(코드 사용시에도 라이선스가 없는 코드는 기본 저작권법 적용됨)
사용한 오픈소스의 라이선스 의무사항 준수
사용한 오픈소스를 명시하고 해당 라이선스의 의무사항을 준수해야 함
의무조항의 충돌로 함께 사용할 수 없는 라이선스가 있는지도 확인(Compatibility)
- Apache2.0 , OFL 등 차별조항이 있는 라이선스는 GPL2.0과 충돌
적합한 라이선스 채택
사용한 오픈소스 라이선스와 호환되는 라이선스를 채택해야 함 (GPL 사용 = GPL 배포)
자신의 오픈소스의 공유 목적에 맞는 라이선스를 채택
GPL은 사용제한을 할 수 없음
코드 공개 및 배포시 주의사항
28. DB
kakao OSS, License DB 구축
Data 정합성
주기적인 Data 확인 및 개선을 통한 Data 정합성
Automation
검증했던 OSS와 Dependency 자동 매칭
자동 매칭 비율, 자동 매칭 후보 등의 통계자료 확인 및 개선으로 자동화 비율 증대
검증 효율화, 고도화
29. 자동 매칭 비율
자동 매칭
0
20
40
60
80
100
(월) 1 2 3 4 5 6
0
25
50
75
100
(월) 1 2 3 4 5 6
dependency protex
자동 매칭 후보
신규 Device 프로젝트 검증시 대부분 수동 매칭됨
30. 카카오톡 Andriod, iOS 각각 100개 이상 오픈소스 사용 고지
오픈소스 사용 및 고지
페이스북 250여개 사용
(2015년 기준)
34. 1. 오픈 여부 승인 - 팀 리더 및 기술 직군 리더 승인
2. 사내 코드/라이브러리의 오픈 계획안 작성
3. 특허, 오픈소스 라이선스 확인 - 법무 + OSA 지원
4. 저장소 명칭(github.com/kakao/[reopository-name]) 확정
github.com/kakao > Private 저장소로 코드/라이브러리 이동
5. License 확정 - Apache 2.0 추천
Readme / CONTRIBUTING / CLA(Contributor License Agreement) 추가
6. 사용자/기여자와 커뮤니케이션 채널 준비, Company repository 팀 멤버 권한 조정
7. 오픈 (Private > Public 전환)
코드 공개 프로세스
35. Remind
오픈소스 출처 고지 및 copyright 유지
코드를 수정할 경우 코드의 출처를 유지하고 내 copyright 추가
LGPL < GPL < AGPL
- 오픈소스 라이선스 의무사항 준수 (라이선스 감염 & 코드 공개)
- 코드 수정
- 라이선스 구매
참고) 공개SW 포털, OLIS
- 오픈소스 라이선스 가이드 문서 제공
- 오픈소스 라이선스 문의
- 사용한 오픈소스 라이선스 확인 (대상 : 국내 개인, 대학, 중소기업)