오늘은 오픈소스에 기여하는 실제적인 방법이 어떤 것이 있는지에 대해서 설명하도록 하겠습니다.
대표적인 오픈소스인 리눅스만 하더라도 리누스 토발즈가 처음 그 코드를 공개했을 때 세계 최대 규모의 오픈소스 소프트웨어가 될 거라는 생각조차 못했을 것입니다. 여전히 토발즈는 커널의 승인 여부를 혼자 결정하고 있지만 누구나 개선될 수 있는 소스코드를 보내게 되고 그것이 도움이 된다고 판단되면 해당 소스코드의 저자(Author) 항목에 기여자(Contributor)가 되어 다음 릴리즈 되는 버전에 이름이 나오게 되었습니다. 이는 유명해지려는 사람들의 욕구(과시욕)를 충족시켜 주었을 뿐더러 개발자들에게 돈 한푼 주지 않고도 커널의 버그 수정, 드라이버 개발, 기능 추가를 할 수 있는 중요한 원동력이 되었습니다.
화끈한 창시자
리누스 베네딕트 토발즈(Linus Benedict Torvalds, 1969년 12월 28일 ~ )는 스웨덴 계 핀란드 인 소프트웨어 개발자이다. 리눅스의 아버지 로 유명하며, 분산 버전 관리 시스템 인 Git 등을 만들었다. 그의 종특은 맘에 안드는 것은 뭐든지 까는 것으로, 거친 언사도 서슴지 않으며, 일반인들과도 뉴스그룹, 이메일 등지에서 욕설섞인 배틀을 자주 뜨는 현장을 목격 할 수 있다. 특히 리눅스 개발 커뮤니티의 분위기를 살벌하게 만드는 일등 공신이 리누스 본인인데, 오픈소스 개발이라고 하면 누구나 편하게 자신의 코드를 커밋할 수 있을 것 같지만 현실은 시궁창으로, 리눅스에 함부로 손을 댄 사람은 리누스에게 쌍욕을 먹고 멘붕을 하게 되기 일쑤다. 소스 코드 리뷰에서 심각하게 결함이 있는 부분이나 마음에 안드는 부분을 가차없이 까내리는 모습이 거의 고든 램지 급.
기여의 1단계로 보자면 우선 내가 사용하고 있는 오픈소스에 대한 관심과 그것이 가진 기능을 활용해 보는 것이 첫번째일 것입니다. 어떤 업무시스템 또는 소프트웨어를 개발하고자 하는 경우 개발하고자 하는 기능에 대한 충분한 분석을 한 뒤, 이미 존재하는 오픈 소스 소프트웨어 프로젝트들이면 내가 원하는 요구 사항을 만족하는 것이 있는지 확인하는 작업부터가 시작일 것입니다.
1. 기여 #1 – 있는거 참여할래!
가. 오픈소스 프로젝트 검색
현재 오픈소스 프로젝트는 셀 수 없을 정도로 많으며, 해당 프로젝트가 관리되고 있는 저장소도 각각 다릅니다. 이렇게 많은 프로젝트들 중 특정 프로젝트를 찾기 위해 다음과 같은 방법을 사용할 수 있습니다.
(1) 구글링
잘 알려진 유명한 오픈소스 프로젝트들은 타이틀만으로도 구글링을 통해 충분히 검색할 수 있습니다.
[그림 1-1 구글링을 이용한 프로젝트 검색]
(2) 오픈소스 저장소 내 검색
GitHub, SourceForge, Bitbucket, Google Code 등 오픈소스 저장소에 접속하여 직접 검색합니다.
[그림 1-2 오픈소스 저장소 내 프로젝트 검색] – 아이고 많기도 하여라!
(3) 오픈소스 재단 내 검색
아파치 재단, 리눅스 재단, 모질라 재단 등 오픈소스 재단에 접속하여 직접 검색할 수 있습니다.
[그림 1-3 오픈소스 재단 내 프로젝트 검색]
그 밖에 http://www.findbestopensource.com , https://www.openhub.net/ 등의 사이트에서도 검색할 수 있습니다.
나. 오픈소스 프로젝트 참여
오픈소스 프로젝트에 참여하는 방법은 다음과 같이 아주 다양합니다.
- 버그 리포트
- 커뮤니티 활동을 통한 의견 교류
- 프로젝트 문서 수정 또는 번역
- 기능 등록 및 수정 요청
- 패치 요청
- 커미터 또는 컨트리뷰터 활동
- 한글 번역
* 커미터(Committer) : 프로젝트내에서 직접 코드를 push할 수 있는 권한을 가진 사람
* 컨트리뷰터(Contributter) : 패치 등의 소스 코드를 제공하는 사람
즉, 반드시 코드를 수정, 작성해야만 프로젝트에 참여하는 것이 아니고 자신이 할 수 있는 부분에서 꾸준한 관심과 희생정신을 가지고 활동하는 것이 바람직합니다.
개발자에게 있어 커미터 또는 컨트리뷰터가 되는 것이 가장 이상적인 참여 방법이 될 수 있으며, 일반적인 과정은 다음과 같습니다.
(1) 기술 및 사용법 습득과 개발환경 구축
오픈소스 프로젝트에서 사용하는 언어 및 프레임워크 등의 기술을 습득하고 해당 오픈소스 프로젝트를 활용할 수 있어야 하며 개발가이드를 통한 자신만의 개발 환경을 구축합니다.
GitHub의 경우 개발환경 구축 시 프로젝트를 개인 저장소로 복제하기 위해 Fork를 수행합니다.
[그림 1-4 GitHub 소셜 메뉴]
Watch, Star, Fork는 GitHub의 소셜 기능으로써 Watch는 해당 프로젝트를 지속적으로 관찰하겠다는 의미로 이 기능을 활성화 시키면 해당 프로젝트가 처리하고 있는 이슈들에 대해서 알림이 오게 됩니다. Star는 해당 프로젝트에 관심을 나타내는 것으로 별점과 비슷하며, Star가 많은 프로젝트들은 월간, 주간, 일간으로 분류하여 인기 프로젝트로 선정되며 Explore 메뉴에서 보여집니다. 마지막으로 Fork는 해당 프로젝트를 내 계정에 그대로 복사하는 기능으로 해당 프로젝트에 Push 권한이 없다면 복제된 프로젝트에 기능을 추가, 수정하고 Pull Request로 변경사항을 적용 요청할 수 있습니다.
(2) 메일링 리스트 구독 및 커뮤니티 활동
메일링 리스트를 구독함으로써 프로젝트 관련 정보를 받아볼 수 있으며, 커뮤니티 활동으로 구성원들과의 의견 교류를 활발히 합니다. 본인이 해당 컴포넌트에 대한 장단점을 파악하고 이에 대한 설명이 가능한 상태에서 영어 작문이 능통하다면 StackOverflow를 활용 하여 꾸준히 활동하는 방법도 정말 좋습니다.
(아 영어!) – 영어의 중요성!!
(3) 버그 리포트 & 기능 제안
재현할 수 있는 버그에 대해 상황과 상태를 자세히 기술하며, JIRA나 GitHub 이슈 등의 공식 이슈 트래커를 사용하여 리포트합니다. 단, 버그 리포트를 등록하기 전 유사한 버그가 있는지 확인하고 이미 존재한다면 기존 내용에 코멘트 등으로 부가 설명 후 vote나 watch 등으로 관심을 표현하는 것이 좋겠죠! 기능 제안도 버그 리포팅과 마찬가지고 이슈 트래커를 사용하며, 유사한 이슈가 있는지 확인 후 등록하면 더욱 좋습니다.
(4) 패치 등록 / Pull Request
버그, 기능 개선, 신규 기능 등을 위해 등록된 이슈에 패치를 첨부하면 커미터들이 패치를 검토한 후 적용하게 됩니다. GitHub가 사실상 오픈소스 코드 저장소의 표준이 되었기 때문에 요즘은 패치를 보내는 일은 많지 않고 대부분 GitHub의 Pull Request를 이용하면 됩니다. 자세한 설명은 인터넷에 무지하게 널렸으니 참고하여 주셔도 됩니다.
[그림 1-5 GitHub Pull Request]
(5) 이도 저도 안되겠다?!
그러면 우선 번역하는데 참여하겠다로 시작하는 방법도 최고의 시작점이 아닐까 합니다.
국내 오픈소스 커미터 현황
2019년 2월 기준* 총 500여 명 의 국내 커미터가 OS, Cloud, Mobile, BigData, IoT, AI, Network, Web, Embedded, Development Environment 등의 10개의 분야의 총 1,398 글로벌 오픈소스 프로젝트*에 참여하고 있습니다.
* 글로벌 커미터 현황은 프로젝트의 기여도와 코드의 정성적 평가 등을 거쳐 30 일 ~90 일 간격으로 신규 커미터를 추가하며 , 기존 커미터도 지속적인 소스코드 개발과 기여가 없으면 커미터 자격이 유지되지 않음
ㅇ 국내 커미터들이 가장 많이 개발에 참여하고 있는 글로벌 오픈소스 프로젝트는 구글 안드로이드(Google Android)이며, 총 86명의 국내 커미터가 분포되어 있음
– 구글 안드로이드 다음으로는 Google Chromium 프로젝트에 46명, WebKit 프로젝트와 Rust 프로그래밍 언어에 각각 18명의 국내 커미터가 개발하고 있음
국내 커미터가 참여하는 글로벌 프로젝트 분야 Top 3는 ① Development Environment* 분야 119명 ② Mobile 분야 105명 ③ Web분야에 80명이 참여하여 Top 3를 형성하고 있음
* 개발환경 분야는 Programming Language, Testing Tool, Simulator, Compiler, Build system, Library, Framework 등을 포함하고 있음