페이지

2013년 11월 24일 일요일

오픈소스 프로젝트에 참여하는 효과적인 방법


얼마전 아는 분의 소개로 아래와 같은 질문을 받았다.

"오픈소스에 공헌하기 위해, 새롭게 프로젝트를 만들어볼까 했는데, 이미 생각한 프로젝트는 거의 다 있는 것 같고, 기존 프로젝트에 참여하려고 하니, 참여할만한 프로젝트를 찾기가 너무 어려워요. 어떤 분야라도 좋으니, 꼭 구현해야 하는 기능이나, 고쳐해야할 버그, 바로 공부해서 기여할 수 있는 프로젝트 있는지 알고 싶습니다."

참 어려운 질문이다. 솔직히 이런 질문으로 나도 한적이 있다. WebKit Reviewer에게 시급하게 수정해야할 버그나 내가 할만이 일이 있으면 알려달라고 했지만, 대답을 받지 못했다. 아마도, 그 reviewer입장에서 쉽게 해결될 문제면 벌써 해결했을 것이고, 어려운 부분은 내가 해결하기 어렵기 때문에 딱히 알려주기 힘들었을 것이다. 사실, 오픈소스 프로젝트에 등록된 버그 또는 요구사항등을 살펴보면 대부분 딱히 해결방법이 잘 떠오르지 않거나, 많은 시간과 노력이 필요한 버그나 기능이 대부분이다. 한마디로 maintainer도 귀찮아하는 버그만 남아있다고 보면 된다. 정말 쉬운 버그가 있다면, 이미 다 해결되었을 것이다. 그러니 처음 시작하는 분들이 이런 버그를 해결해보겠다고 나서는 것이 상당히 무모한 일이다.

새로 프로젝트를 시작하는 것은 쉽지만, 의미있는 작업이 되기 위해서는 독창적인 프로젝트를 시작해야 하는데, 오픈소스도 이미 red ocean이라서, 이미 비슷한 프로젝트가 상당수 존재한다.

처음부터 새 프로젝트를 시작하는 것 보다, 기존 프로젝트에서 경험을 먼저 쌓는 것도 중요하 것 같다. 그렇다면, 어떻게 하면 나에게 잘맞고 오픈소스 프로젝트를 찾을 수 있을까? 여기서 두가지 중요한 관점 있다.  첫번째, "내가 잘할 수 있는 프로젝트" 두번째, "열정을 갖고 지속할 수 있는 프로젝트"이다.

첫번째, "내가 잘 할 수 있는 프로젝트"를 찾는 것은 쉬을 수 있다. 일단, 본인의 개발 경험이 중요하다. 오랫 동안 게임을 개발했다면, 게임과 관련해서 프로젝트를 찾는 것이 좋다. 임베디드 시스템에서 리눅스 커널 드라이버를 개발했다면 리눅스 커널 프로젝를 참여하면 좋다. 웹개발자라면 JQuery와 같은 JavaScript toolkit에 관심을 가지면 좋다. C++ 개발자라면 역시 C++로 쓰여진 프로젝트가 더 편할 것이고, 윈도 개발자라면, 특정 프로젝트의 윈도용 포트 부분을 공부하다면 더 빠르게 기여할 수 있을 것이다.

두번째, "열정을 가지고 지속할 수 있는 프로젝트"를 찾는 것은 조금 어렵다. 열정이 어디서 부터 시작하는지 각자 다르기 때문이다. 지적 호기심일 수도 있고, 회사 업무나 취업과도 연관성이 있을 수도 있고, 오픈소스 운동/철학에서 열정이 시작될 수도 있다.

예를 들어, Firefox같은 경우, Open Web이라는 철학적 기반이 있다. 웹은 절대 특정 회사나 단체의 소유가 될 수 없고, 누구나 참여해서 웹을 발전시켜 나가야 한다는 것이 주된 내용이다. 이런 생각으로 MS나 Google 틈속에서 Mozilla가 묵묵히 웹이 한쪽으로 치우치지 못하도록 조정자 역할을 하고 있고, 웹이 정체되지 않도록 늘 혁신을 준비하고 있다. 

이런 두가지 관점에서 프로젝트를 찾으면 좋겠다.

한가지 조언을 한다면 너무 성숙한 프로젝트에 참여를 시작하기 보다는 새로 시작하고 혁신적으로 프로젝트에 참여하면 더 좋을 것 같다. 유명한 리눅스 커널 해커인 Alan Cox는  인터뷰에서, 지금 Linux Kernel프로젝트에 참여하지 말라고 조언하고 있다. 너무 방대하고 유명해서, 어떤 문제가 생기면 이미 수 많은 사람들이 관심 갖기 때문이다. 그 대신, 3D Printing, HTML5, WebGL과 같은 새로운 프로젝트에 참여를 권유했다. 이들 프로젝트는 시작한지 얼마안되서 오픈되어 있고, 유연성이 있기 때문에, 누구나 새로운 시도를 할수 있고, 어떻게 될지 모르기 때문에, 일단 받아들이기가 쉽다. 이는 마치 Linux 초기 시절과 비슷하다고 언급했다. 

개인적으로 지금 오픈소스 참여를 시작한다면, Mozilla의 Rust나 Servo에 참여해보고 싶다. 이미 본궤도 올아와 있고, 웹브라우저 개발을 위해 언어 부터 새로 개발하니까, 뭔가 해야할 일이 많이 있을 것 같다. 

아, 생각보다 글이 길어졌다. 짧은 경험으로 이런 글을 쓰려고 하니, 글만 길어진 것 같다. 주제넘지만, 이런 고민을 하는 분들께 조금이나 도움이 되면 좋겠다. 특히 Alan Cox의 인터뷰는 많은 것을 생각하게 해준다. 역시 고수는 달라.