페이지

2013년 7월 4일 목요일

Why upstream?


오픈소스 소프트웨어를 상용 제품에 적용하는 것은 이제 너무나 당연한 일이다. 특히 리눅스를 기반으로 제품을 개발하는 경우에는. 하지만, 많은 회사들이 여전히 실수하는 것 중 하나가 바로 개발 중에 upstream을 하지 않는 것이다. 도대체 upstream이 왜 중요하며, 개발 중에 upstream하면 뭐가 좋을까?

첫번째, maintainer들에게 code review를 받을 수 있다. 상용 제품에 들어가는 code를 maintainer에게 review를 받는다면 그 만큼 좋은 질의 code가 들어간다는 것을 의미한다. 뿐만 아니라 project 방향과 architecture에 잘 들어맞는지 확인도 해준다. 이는 나중에 upstream 불가능한 사태를 미리 피할 수 있도록 해준다. 또한 maintainer와 함께 patch를 review하면서 개발자도 더 많은 것을 배우게 되고 이는 제품의 품질 향상에 기여한다.

두번째, rebase 또는 merge에 따른 비용을 줄일 수 있다. 보통 제품이 나올 때면 작업하는 code의 기반이 upstream으로 최소 1년 최대 2년정도 차이가 생긴다. 이는 엄청난 차이인데, 나중에 upstream에서 code를 다시 가져올 때, 이미 상품화에 적용된 patch가 upstream에 반영되어 있다면 그 만큼 작업이 쉬워질 것이다.

세번째, code가 죽는 것을 방지
사실 개발자에게 상품화 이후 만들어진 patch를 upstream할 시간적 여유는 주어지지 않는 경우가 많다. 바로 다음 프로젝트에 투입되거나 다른 일을 맡기도 한다. 이런 경우, patch는 죽은 code가 되어 버리고 최소한 License 규약을 지키기 위해 tarball로 묶여서 인터넷 어딘가를 떠돌게 된다. 최악의 경우, 다음 상품화 버전에 다른 개발자가 똑같은 patch를 만드는 경우도 발생할 수 있다.

네번째, 특정 feature 또는 module에 관해 ownership확보 가능
작성한 patch의 규모가 큰 경우, ownership을 가지고 지속적으로 maintain도 가능하다. 이런 경우 자사 상품화 최적화도 할 수 있고 개발 방향을 이끌 수 있다.

그렇다면 왜, upstream을 못하는가?

첫번째, 가장 큰 이유는 code 공개에 따른 체질적 두려움이 있다.
회사 입장에서 비용들여 만든 code를 남이 쓴다는 것, 특히, 경쟁사가 쓰면 어떻게 하냐고 걱정 하는 경우가 많다. 설사 경쟁 회사가 쓰더라도 이미 우리는 상품화를 끝낸 후가 될 가능성이 높다. 그들 역시 upstream으로 부터 먼 code를 기반으로 제품을 개발하기 때문에 바로 해당 patch를 반영하기 어려울 수도 있고, 여러가지 기술적 검토를 안할 수 없기 때문에 patch가 공개된 이후 경쟁사가 이를 상품화 반영하기까지는 당연히 시간이 걸린다.

그리고, 우선 알아야할 것이 오픈소스 소프트웨어를 쓴다는 것이 경쟁사와의 차별화 요소가 아니라는 것이다. 소바자가 제품을 선택할 때, 리눅스 커널 버전 살피고 patch 내용을 살필 수 없다.  오픈소스 소프트웨어는 마치 3rd party에서 부품을 구매하듯이 누구나 공유하는 공공재라고 보면 된다. 기업의 오픈소스 참여는 공동 개발을 통해 개발 비용을 줄이는 것이 목적이지 경쟁사와의 차별화를 위한 것이 아니라는 것을 강조하고 싶다.

두번째, 너무 바쁘다.
최소한 개발자에게 upstream할 시간적 여유를 줘야 하는데, 상품화에 치여 그럴 여유를 주지 못하는 경우가 많다.

세번째, upstream process가 없다.
기업에서 code를 upstream할 때는 최소한의 process가 필요하다. 사소한 bug fix는 그냥해도 되지만, feature단위라면 IP 문제가 있는지도 확인할 필요가 있다. 다른 특허를 침해한다면 복잡한 특허 분쟁에 엮일 수 있기 때문이다. 주의할 점은 개발자에 또 하나의 업무가 아닌 upstream을 장려할 수 있는 process를 만들어야 한다.

Linux Kernel과 WebKit project는 여러 회사가 공동으로 개발에 참여하는 좋은 본보기이다. 살펴보면, contribution을 많이 하는 회사 제품이 당연히 시장에서도 잘 팔린다. 그 이유는 해당 소프트웨어를 더 잘 이해하는 개발자가 좋은 제품을 개발하기 때문이다. 예를 들어, 애플과 노키아를 제외한 모든 스마트폰 제조사가 똑같은 구글의 Android를 기반으로 스마트폰을 출시하고 있다. 하지만 삼성 제품이 독보적으로 잘 팔리고 있다. 이유를 살펴보면, 물론, 디자인도 중요하지만, 삼성이 Android 폰을 만드는 제조사 중에 Linux Kernel contribution을 제일 많이 하는 회사라는 사실은 우연이 아니다. 같은 Android에서 차별화가 가능한 부분은 Linux Kernel과 device driver가 가장 큰데, upstream 경험이 많은 Linux Kernel 개발자를 보유한 회사가 빠르고 안정적인 Android 폰을 만들 수 있는 것은 당연한 것이 아닌가 싶다.

이제 upstream은 선택이 아닌 기업의 경쟁력 확보를 위해 반드시 필요한 전략임을 깨달아야 한다.

댓글 없음:

댓글 쓰기