오픈소스 개발참여한 이야기 (nipa 오픈프론티어 3기 송태웅)

40
Contributing opensource developer ( 오픈소스 개발 참여한 이야기 ) d Use Linux kernel as an example NIPA Open Frontier Lab Taeung Song [email protected] 2016-03-17

Upload: taeung-song

Post on 21-Jan-2017

1.455 views

Category:

Software


11 download

TRANSCRIPT

Page 1: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contributingopensource developer

( 오픈소스 개발 참여한 이야기 )d

Use Linux kernel as an example

NIPA Open Frontier LabTaeung Song

[email protected]

2016-03-17

Page 2: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Speaker

송태웅 (Taeung Song, https://github.com/taeung)

2016 NIPA Open Frontier Lab 3 기

2015 Linux kernel - perf 프로젝트 contributor 활동 중

2014 ( 주 ) XS 선임연구원 ( 네트워크 , 서버 , ARM, etc.)

2013 NIPA 창의도전형 R&D 2 기

2012 NIPA SW Maestro 3 기

2011 ( 주 ) MTOME 개발연구원 ( 임베디드 , WinAPI)

Page 3: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Open Frontier Lab

공개 SW 개발자 센터 (http://devlab.oss.kr/)

Page 4: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Purpose 발표의 취지

오픈소스의 중요성까지는 알겠지만 ..

오픈소스 개발 패러다임을 모르거나

시작하고싶은데 진입장벽에 봉착한 분들

오픈소스 컨트리뷰션을 왜하는지 ?

하면 어떤방식으로 하는지 ?

Page 5: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

To conclude 결론 부터 말하자면

오픈소스 컨트리뷰션을 왜하는지 ?

하면 어떤방식으로 하는지 ?

새로운 개발방식을 익히기위해 ( 오픈소스 개발방식 )

새로운 개발방식으로 .. ( 오픈소스 개발방식 )

Page 6: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

To conclude 결론 부터 말하자면

새로운 개발방식 이란 ? ( 오픈소스개발방식 )

오픈소스 개발 방식의 특징 ( 사견 )

뒤에 이어서 설명

✔ 갑으로 시작해서 을 , 병 , 정 , 무 , 기 .. 로 끝나지 않고

✔ 개발자로 시작해서 개발자로 끝난다

✔ 코드도 모르면서 말만하는 팀장 / 사장 없다

✔ 소스를 공개하면서 비가시성의 상당한 문제 극복

✔ 집단지성을 활용한 비대한 발전

✔ 자본주의 사회에서 돈도 안되는 오픈소스가 소프트웨어의 역사를 이끄는 이유

Page 7: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contents

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

Page 8: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Linux kernel – perf 현재 참여하는 오픈소스 소개

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

Page 9: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Linux kernel – Perf 현재 참여하는 오픈소스 소개

1) Linux 기반 성능분석 도구 perf (2009)

2) 커널 또는 특정 프로그램 (perf 로 알 수 있는것들 )

“ 특정 프로그램 또는 시스템 전반적으로 성능분석”

Events(Cpu-cycles, system call, cache-misses, page-faults, context-switch) 가

언제 / 얼마나 / 어떻게 발생 되었는지를 살펴보는것이다

✔ 어느함수가 cpu 를 많이 잡아먹는지 ?

✔ 어느코드부분이 메모리할당을 얼마나 하는지 ?

✔ cache-misses 가 어떤 코드 부분 때문에 발생하는지 ?

✔ 특정 커널 함수가 불려지는지 혹은 얼마나 불려지는지 ?

Page 10: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Perf 도구 간단한 예제로 알아보기

예시 ) Taeung_Program 분석

# perf record Taeung_Program ^c ( 성능정보수집 )# perf report ( 성능정보 통계출력 )

# ./Taeung_Program# perf top (record+report)

< 그림 1> perf top ‘에서 Taeung_Program’ 선택시

Page 11: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Perf 도구 간단한 예제로 알아보기

예시 ) Taeung_Program 분석

특정 프로그램 함수 (main) 에 대한 assembly code 단위 분석

< 그림 2> perf top 에서 annotate 기능으로 어셈블리 코드

Page 12: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Perf 도구 perf 의 장점 및 특징

✔ 특징

✔ 장점

'Performance counters' 라는 HW registers 를 기반

커널 및 프로그램의 감속 없이

Profiling 을 위한 Target 프로그램 재컴파일 없이

프로그래밍 언어 종속적이지 않게

커널버전에 따른 각 버전이 존재 (kernel 코드와 함께 개발 )

C program (user space) (Linux kernel 소스의 tools/perf 경로 )

Command line tool

* 공식 Linux kernel – perf 저장소 : http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git

Page 13: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

Motivation 오픈소스개발에 참여한 계기

Page 14: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Motivation 오픈소스개발에 참여한 계기

개인적인 개발실력에 대한 의문 / 생각 ( 졸업 전 )

개발자 ? 이것저것 조합하는 유저 ?

Core 개발자 , 프로 개발자가 되고싶은 마음

내가만든 프로그램 , 제품이 내가만든것인가 ?

Page 15: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Motivation 가 내 하고싶은 SW 찾기

졸업 후 첫 회사 다니면서 고민 / 생각

Low level, system 분야의 관심 → ( 주 ) XS

순수한 (?) 소프트웨어 vs 업무 및 제품 의존적인 소프트웨어

Web (frontend, backend), AngularJS, Django, Jquery, Bootstrap

ARM, Linux porting, L4/Fiacso, QT/C++, Ncurses

NAS(Network Attached Storage), bash, python

시스템 소프트웨어 개발에 관심 ( 커널모듈 , 데몬 , Utility, syscall)

Page 16: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Motivation 오픈소스 개발의 시작

회사내의 오픈소스 참여기회

회사업무로 인해 → L4/Fiasco → Mailing List 경험

Porting & Device Driver 관련 가이드 문서공유 (첫 오픈소스 기여 )

< 그림 3> l4-hackers 메일링리스트에 공유한 Device driver & Porting 가 이드 문서

Page 17: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Motivation 오픈소스 개발의 시작

회사외의 오픈소스 참여시도

오픈소스 분석 목적 스터디 , 국내 kernel 커미터 contact

무산됨 , 더딘진행 , 진입장벽 난관에 봉착

소스 읽고 이해해보고 , perf 소개 강의도 듣고

스터디에서 perf 분석시작

C 문법은 알지만 Source Reading 의 어려움

Page 18: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

Contribution 오픈소스 활동 이력

Page 19: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 첫 PATCH 작업 (perf)

처음적용된 Bug fix 기여 perf tools: Modify error code for when perf_session__new() fails

< 그림 4> 첫 commit 정보 스크린샷

Page 20: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 지속적인 기여활동 (perf)

perf-config 가 관련 기능추 기여 (2 개 commit 적용 )

perf-config subcommand 가 기능추 완료 perf-config Document 가 추 완료 perf-config 의 get, set 가 기능추 중 perf-config options (list, list-all, remove, skel, system, user 등 ) 가 추 중

toggle zeroing of samples 가 기능추 기여 (1 개 commit 적용 )

perf top 실행중 zeroing of samples 기능에 toggle 가 버튼추 작업완료

Bug fix 기여 (6 개 commit 적용 )

perf_session__new() 실패 시 에러처리완료 perf subcommands (mem, kvm, report, kmem, inject) 도중 에러처리완료 perf_session__delete() 수행안하는 부분 수정보완완료

더디고 느리지만 계속해서 Contributor 로 활동 진행

Page 21: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 활동 이력 (perf)

perf-config 가 관련기능추 기여 (2 개 commit 완료 / 22 개 patchset 계속진행중 )

< 그림 5> perf-config 의 usage message

Page 22: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 활동 이력

< 그림 6> perf-config 가 관련기능추 24 개 patchset cover letter

Contribution 활동 이력 (perf)

Page 23: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 활동 이력

< 그림 7> 최근적용된 perf-config 명령 , doc 2 개의 커밋관련메일

Contribution 활동 이력 (perf)

Page 24: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 활동 이력Contribution 활동 이력 (perf)

Linux kernel – perf 정식 git ‘저장소 tip’

Maintainer : Arnaldo, Ingo, Jiri, 김남형

https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git

< 그림 8> 리눅스 커널 perf 정식 git 저장소에 적용된 commit 정보 (2014-2015)

Page 25: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Contribution 활동 이력Contribution 활동 이력 (perf)

< 그림 9> 최근 리눅스 커널 perf 정식 git 저장소에 적용된 commit 정보

Page 26: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

Opensource Linux kernel 이외의 다른 오픈소스

Page 27: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource Linux kernel 이외의 다른 오픈소스

<그림 10> 전세계 각종 오픈소스 통계 사이트 (https://www.openhub.net/)

Page 28: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource Linux kernel 이외의 다른 오픈소스

<그림 11> 오픈소스 커미터 개인별 통계 뷰 (https://www.openhub.net/accounts/namhyung)

Page 29: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource Github / Not Github

- Node.js (https://github.com/nodejs/node)

- Angular.js (https://github.com/angular/angular.js)

- Spring-boot (https://github.com/spring-projects/spring-boot)

- Rust (https://github.com/rust-lang/rust)

- Redis (https://github.com/antirez/redis)

- Flask (https://github.com/mitsuhiko/flask)

- Apache (http://git.apache.org)

- Linux kernel (http://git.kernel.org)

- GNU (http://git.savannah.gnu.org/cgit/)

- Webkit (git://git.webkit.org/WebKit.git)

Github

Not Github

Page 30: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource 유망오픈소스 정리자료

< 그림 11> 유망오픈소스 정리 PDF (http://www.oss.kr/oss_repository12/103649)

OSS 에서 정리한 전세계 유망오픈소스 정리 자료 (2013 기준 )

Page 31: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource 가 내 참여할 오픈소스찾기 ? (IMHO)

졸업 이후 3~5 년 안에 한 분야 만큼은 전문성을 지녀야한다고봄 (준 전문가 ?)

하나의 분야에 대한 선택이 필요 ( 메타인지 필요 )

1) Big data

2) OS (memory, device driver, sched, network, FS etc.)

3) Embedded (RTOS, firmware, etc.)

4) Web (frontend, backend)

5) Web brower

6) Cloud, Paas, Baas, etc

7) Language, Compiler (Rust, Go, etc.)

8) AI

9) X-window system (Gnome, KDE, Unity, Xfce, etc.)

10) Tools (eclipse, IDE, git, etc.)

11) Application (mobile, PC, embedded, etc.)

...

Page 32: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource 가 내 참여할 오픈소스찾기 ? (IMHO)

하나의 분야에 대한 선택작전 ( 진입장벽 부수기 )

✔ 구글링을 통한 주체적인 선택 ( 능력자들 )

✔ 오픈소스 분석 스터디 그룹활동 ( 분야선택 , source reading, etc)

✔ 해당 분야를 하는 회사에 실무경험 쌓기 ( 회사일과 오픈소스병행 )

Page 33: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Opensource 가 내 참여할 오픈소스찾기 ? (IMHO)

하나의 분야에 대한 선택작전 ( 진입장벽 부수기 )

✔ 구글링을 통한 주체적인 선택 ( 능력자들 )

✔ 오픈소스 분석 스터디 그룹활동 ( 분야선택 , source reading, etc)

✔ 해당 분야를 하는 회사에 실무경험 쌓기 ( 회사일과 오픈소스병행 )

< tip: 프로젝트 별 간단정리 공유 (5분 ) >

- 사용언어

- 총라인수 , 소스폴더 구조 (2-3 depth)

- 대표기능 1 개 시나리오 설명

- 소스받기→ ( 컴파일 /세팅 ) → 실행 방법 ( 간단한 사용법 )

Page 34: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

How to contribute 오픈소스 컨트리뷰션 작전 (IMHO)

Page 35: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

How to contribute 오픈소스 컨트리뷰션 작전 (IMHO)

메인테이너가 쉽게받아줄거라 예상되는 PATCH/Pull-request 는 ? ( 사견 )

1 위 – Refactoring ( 가장 부담 zero)

2 위 – Bugfix ( 명확한 버그라면 )

3위 – Documentation (첫 접근성은 좋으나 기술적인 description 이 문제 )

4위 – Minor features

그 이후 new feature 나 core 부분은 신뢰가 필요하다고봄 ( 다수의 commits 필요 )

Page 36: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

How to contribute 오픈소스 컨트리뷰션 작전 (IMHO)

가보통 어떻게짜는 ? ( 문법다 안다고좋은영작못하듯 )

작전 1) 시나리오 기반 Source Reading

작전 2) 오픈소스의 설계구조

질 좋은 오픈소스를 통한 나만의 소스 데이터베이스 필요

명확한 feature 이해 → 구현방식이해 (by navigator (ctags, cscope, intelij, eclipse, etc))

소스구조 공유 (http://aosabook.org/en/index.html)

좋은구조 , 좋은 Name, 간결한코드

Page 37: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

현재 참여하는 오픈소스 소개

오픈소스 참여 계기 오픈소스 활동 이력 여러가지오픈소스

컨트리뷰션작전

앞으로의 길

Future plan 오픈소스에서의 앞으로의목표

Page 38: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Future plan 오픈소스에서의 앞으로의목표

1. Linux kernel 에대한 PATCH 작업 ( 기본실력쌓기 )

- perf : Bugfix, minor features, new features, etc.

- frace 등 기타 서브시스템에 대한 Bugfix 작업

2. 알고리즘 코딩훈련

- Knapsack, Quick-sort, Cheese, etc.

3. 커널 및 CS관련 이론학습

- Tracing, Network, Memory, File System, etc.

올해 1년간의 목표

Page 39: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Future plan 오픈소스에서의 앞으로의목표

향후 목표와 방향

✔ Linux kernel Committer (@kernel.org, @apache.org 등의 위엄 )

✔ 개발자로서의 성장 ( 프로개발자 되기 , 오픈소스 개발패러다임에서의 실력자 )

✔ 오픈소스로 다져진 실력으로 취업 목표

Page 40: 오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)

Thanks