오픈소스를��사용하고,�준비하는��개발자를�위한�가이드
황은경(violet.blue)�kakao�corp.(OSA)
“FOSS��(Free�and�Open�Source�Software)�저작권자가�소스코드를�공개하여�누구나�자유롭게��사용,�수정,�재배포�할�수�있는�자유로운�소프트웨어
“�If�I�have�seen�further�it�is�by�standing�on�the�shoulders�of�Giants�”�
- Isaac Newton
/*��*�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�유지
기본적인�의무사항
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
• 소스코드를�공개하지�않아도�되는�대표적인�라이선스�• 저작권�명시(고지문)�• 적용�사례�:�Nginx(The�BSD�2-Clause�License)
• MIT에서�해당�대학의��SW�공학도들을�돕기�위해�개발한�라이선스�• 라이선스�및�저작권�명시(고지문)�• 적용�사례�:�부트스트랩�,�Angular.js,�Backbone.js,�jQuery�
• 아파치�재단의�모든�SW에�적용되는�라이선스�• BSD�의무사항�+�특허권(GPL2.0으로�배포되는�코드와는�결합�불가능)�• 적용�사례�:�안드로이드(v2.0),�하둡(v2.0)
일반적으로�사용하는�라이선스�
Apache
BSD
MIT
• 수정한�소스코드�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
personally
외부�배포�O
public
3rd�party
외부�배포�X
private내부�전용
바이너리
웹�서비스
소스코드
판매
AGPL�:�웹서비스도�적용�된다고�명시
라이선스�적용�범위�
➺�오픈소스�소프트웨어의�배포의�개념?�
“소스코드�및/또는�바이너리�(실행)�코드의�카피를�다른�사람에게�제공하는�행위(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
✓모바일앱의�성장�✓전�세계�공개SW�단체에�의한�모니터링�✓오픈소스�증가�->�저작권자�증가
오픈소스�Compliance��이슈�증가�
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�대표�단체�
• SW는�SW에�관한�지적재산권에�의해�보호�받고�있는데,�원칙적으로�저작권자만이�해당�SW에�대한�독점�사용�권리를�갖는다.��
• �라이선스(License)는�이러한�독점�사용�권리에�대해�SW�개발자와�사용자간의�이용방법�및�조건의�범위를�명시한�대여�규칙을�정의해�놓은�사용�허가권(License)으로�대여의�방법은�유료�및�무료로�구분된다.��
Software의�지적재산권과�라이선스�
오픈소스�사용자는�라이선스를�준수해야�할�의무가�있습니다.�
형사처벌 판매금지와�손해배상 소스코드�공개
기업�이미지�손상
저작권법
라이선스�분쟁�
Xiaomi:�MIUI�/�리눅스�커널�기반�GPL�코드�포함�(2014년)�
해당�소스�코드�공개�-�2015.3.31��
스카이프�리눅스�전화단말기�'WSKP100’�:�리눅스�커널�코드�사용�(2007년)�소스코드�공개�및�벌금�지불�판결�유통�업체에게도�GPL위반�책임.�본국이�아닌�다른�나라에서�소송/판결�
엘림넷�v.�하이온넷:�영업비밀침해와�VTUND�(GPL)�(2005년)�
엘림넷에서�VTUND�를�기반으로�개발한�ETUND를�하이온넷에서�HL로�개작�및�상용화 엘림넷은�영업비밀침해에�대한�고소,�FSF와�GNU는�저작권법�위반�경고�▶�소스�코드�공개
Google,�Oracle�자바�소송�
❄ Google이�Android�에�java�api�37개�사용�❄ Oracle이�특허�및�저작권�침해�10조($90억)�손해배상�소송�❄ History�
○ 2012년�1심�:�API�저작권�인정하지�않음�○ 2014년�항소심�:�API�저작권�인정�○ 2015년�연방대법원�:�API�저작권�인정�확정,�공정이용�여부�확인을�위해�1심으로�돌려�보냄�○ 2016년�1심�:�공정이용�판결�○ 2018년�항소심�:�공정이용�아니다�구글�배상하라고�판결
VMWare,�리눅스�개발자�소송�
❄ VMWare:ESXi에�리눅스�커널�코드�사용�❄ 일반�개발자(크리스토프�헬비그)가�고소�진행,�오픈소스�관련�단체�지원�❄ 지난해�8월�함부르크�지방법원은�소송�기각�결정�
○ ESXi의�Vmklinux�에서�사용중으로�소스�코드�제공하고�있음�-�GPL�준수�○ Vmkernel�에는�사용되지�않음�○ Vmklinux와�Vmkernel�의�결합방식은�다루지�않음�
❄ 크리스토프�헬비그는�항소를�밝힌�상태
❄ 라이선스�소송은�본국이�아닌�다른�나라에서도�가능�❄ 미국법원에서�오픈소스�라이선스가�집행력�있는�계약임을�인정�❄ 손해배상은�침해로�인해�내가�얻지�못한�이익+침해자가�얻은�이익�등을�고려해서�결정�❄ 상용화를�포함한�라이선스�채택은�저작권자의�고유�권한
➺�다중�라이선스(Multi�License)?��- 하나의�코드를�2가지(dual�license)혹은�그�이상의�라이선스로�배포하는�형태�- 저작권자가�선택�사항으로�독자적인�유료�보증�설정
라이선스�분쟁�이슈�체크�
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�알고�씁시다!�
❄ 투명한�코드�>�가시성�확보,�책임감/능력�향상�❄ 커뮤니케이션�>�문서화,�이슈�생성,�커밋�로그,�거버넌스��❄ 기술�중심�>�코드를�중심으로�의사소통과�의사결정�❄ 개인�명성�>�소스�코드,�커밋�로그,�프로필�
http://rankedin.kr/users�http://rankedin.kr/repos��
❄ 다양성�보장�>�발견과�개선,�선택과�집중
오픈소스�공유�및�기여��
라이선스�명시�라이선스를�명시하지�않으면�기본�저작권법이�적용되어�타인이�저작물을�복제,배포�할�수�없음�https://help.github.com/articles/licensing-a-repository/�(코드�사용시에도�라이선스가�없는�코드는�기본�저작권법�적용됨)�
사용한�오픈소스의�라이선스�의무사항�준수�사용한�오픈소스를�명시하고�해당�라이선스의�의무사항을�준수해야�함�
의무조항의�충돌로�함께�사용할�수�없는�라이선스가�있는지도�확인(Compatibility)��-�Apache2.0�,�OFL�등�차별조항이�있는�라이선스는�GPL2.0과�충돌�
적합한�라이선스�채택�사용한�오픈소스�라이선스와�호환되는�라이선스를�채택해야�함�(GPL�사용�=�GPL�배포)�자신의�오픈소스의�공유�목적에�맞는�라이선스를�채택� GPL은�사용제한을�할�수�없음
코드�공개�및�배포시�주의사항�
카카오의��오픈소스�Guidance
카카오의��오픈소스�Guidance
프로세스와�정책의�강제?�No!�
“오픈소스를�잘�사용하고,�오픈소스에�기여할�수�있도록�돕는다.”�
❄ 오픈소스�라이선스�확인과�고지문�발급�자동화,�효율화�❄ 오픈소스�프로젝트(코드�공개)�지원�❄ 오픈소스�사용현황�제공
오픈소스��Guidance�
Hermes�
카카오의�오픈소스�관리�시스템
❄ Dependency�관리��❄ 고지문�발급�자동화�❄ Protex�연동�❄ OSS�DB�구축을�통한�검증�데이타�고도화
Hermes
Dependency�분석
Protex��연동
OSS�매핑
SourceCSV
Legal Notice
Target�Dependency�설정�파일,�내/외부�라이브러리�
Analysis�&�Mapping�Dependency�설정�파일�분석�고지될�OSS�로�매핑�
Remember�(Auto�Mapping)�분석/매핑된�대상�저장,�자동�매칭
Dependency�분석�
dependencies {
implementation ‘com.google.code.gson:gson:2.8.1'
}
Name : google-goon URL : https://github.com/google/gson License : Apache License 2.0 Copyright : Copyright 2008 Google Inc.
build.gradle
iOS_MacOperator
2%
Protex36%
Dependency62%
Operator1%
Protex38%
Dependency61%
Operator1%
Protex61%
Dependency38%
CommAndroid
OSS��확인�위치�
Operator1%
Protex43% Dependency
55%
DB�kakao�OSS,�License�DB�구축�
Data�정합성�주기적인��Data�확인�및�개선을�통한�Data�정합성�
Automation�검증했던�OSS와�Dependency�자동�매칭���자동�매칭�비율,�자동�매칭�후보�등의�통계자료�확인�및�개선으로�자동화�비율�증대
검증�효율화,�고도화
자동�매칭�비율
자동�매칭
0
20
40
60
80
100
(월) 1 2 3 4 5 60
25
50
75
100
(월) 1 2 3 4 5 6
dependency protex
자동�매칭�후보
신규�Device�프로젝트�검증시�대부분�수동�매칭됨
카카오톡�Andriod,�iOS�각각�100개�이상�오픈소스�사용�고지
오픈소스�사용�및�고지
페이스북�250여개�사용�(2015년�기준)
사용중인�오픈소스�약�1,700개�(2018년�8월�기준)�����
6%6%
87%
1%
3%
7%
9%
20%
58%
Apache�2.0
License�Statistics�by�Device�
BSDMIT
Apache�2.0MIT
BSD
Apple�MIT
zlib
Android iOS
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 전환)
코드�공개�프로세스�
Remind
오픈소스�출처�고지�및�copyright�유지�코드를�수정할�경우�코드의�출처를�유지하고�내�copyright�추가�
LGPL�<�GPL�<�AGPL�- 오픈소스�라이선스�의무사항�준수�(라이선스�감염�&�코드�공개)�- 코드�수정�- 라이선스�구매�
참고)�공개SW��포털,�OLIS�- 오픈소스�라이선스�가이드�문서�제공�- 오픈소스�라이선스��문의�- 사용한�오픈소스�라이선스�확인�(대상�:�국내�개인,�대학,�중소기업)
Thanks!�
ANY�QUESTIONS?