오픈(open)에 대하여

솔직하게 고백하면서 시작하겠다.

Linux를 비롯한 오픈 소스와 그 개발 방식이 유행하기 시작할 때, 일부 컴퓨터 긱(geek)들의 문화라 치부했고, 주류가 되지 못할 거라고 생각했다. Microsoft나 Oracle이 하는 것처럼 소프트웨어는 과금을 해야 하고, 이 수익을 다시 소프트웨어에 투자해야 제대로 된 소프트웨어가 나올 것이라고 생각했다.

하지만, 틀린 것 같다. 지금 세상을 움직이는 많은 소프트웨어들은 오픈소스 프로젝트이고, 그리고 점점 많은 회사들이 오픈된 개발 문화를 지향하고 있다.

오픈 소스와 오픈 소스 개발 방식 그리고 그 근저의 철학에 대해서 생각해 본 바를 정리하고자 한다. 잘못된 시각일 수도 있고, 편협한 시각일 수도 있다. 그러니 이 글을 읽으신 분께서는 어떤 내용이라도 좋으니 피드백을~

1. Open Source?

간단히 정의하면, 오픈 소스는 소프트웨어의 소스 코드를 공개해 다른 사람이 이용할 수 있도록 하는 것을 말한다. 건축으로 치면 설계도를 공개하는 것이고, 학교 생활로 비유해보면, 열심히 한 숙제를 공개해서 누구나 베낄 수 있게 하는 것이라고 할 수 있겠다.

아, 보통의 사고 방식이라면 참으로 이해할 수 없는 방식이다. 왜 나의 노하우와 노력의 결실을 공개하는 것인가? 왜 다른 사람들이 별다른 노력 없이 내가 만든 걸 쓸 수 있게 하는 것인가? 누가 이렇게 한단 말인가?

놀랍게도 지금의 인터넷 세상을 가능하게 하는 많은 기술들이 사실은 오픈 소스 프로젝트들이다. 서버 OS로 이용되는 Linux, Database 솔루션인 MySQL, 웹서버 솔루션인 Apache, 대용량 처리를 가능하게 해주는 Hadoop 등이 오픈소스다. 거꾸로 이러한 오픈소스가 없었다면 Facebook이나 Twitter, KakakoTalk등이 없었을 지도 모르겠다.

2. Open Source 개발 방식?

오픈 소스 프로젝트들은 소스를 공개하는 것과 더불어서, 자신들의 소스가 많이 쓰일 수 있도록 여러 적극적인 활동을 한다. 익명의 개발자가 코드에 기여(contribution)를 할 수 있도록 프로세스를 갖추고 있고, 소스의 내부 구조(architecture)와 사용 방법에 대해 블로그와 컨퍼런스 등을 통해 알린다. 이러한 활동을 열심히 하는 오픈 소스 프로젝트들이 더욱 많이 사용되고 살아남는다.

요즘은 소프트웨어 회사에서 소스를 꼭 공개하지 않더라도, 이러한 개발 방식을 도입한 사례를 종종 볼 수 있다. 자사가 사용한 오픈소스 솔루션에 대해 사용 경험(best practice)을 블로그나 컨퍼런스 등을 통해 공유하고 있다.

3. 누가하는가?

Facebook이나 Twitter와 같은 회사들이 아이디어를 잘 만들어 성공한 회사라고 생각하면 오산이다. 적어도 내가 아는 한 이 두 회사는 컴퓨터공학에 있어서, 구글과 어깨를 나란히 하는 세계 최고의 기술 회사이다. 많은 오픈 소스 프로젝트들의 스폰서이고, 그리고 이 이 회사들의 엔지니어들이 직접 오픈소스 프로젝트에 참여하고 있다. 그리고, 이 오픈 소스를 자사의 서비스에 이용하고 있다. 특히 최근의 대용량 서비스를 가능하게 해주는 솔루션인 Cassandra, Hadoop 등이 바로 그 예이다.  국내에서도 NHN, Daum, KTH와 같은 회사에서는 컨퍼런스나 블로그를 통해서 노하우를 공유하고, 이따금씩 자사의 솔루션을 오픈 소스화 하고 있다.

누구도 부인하지 못하는 점은, 이 회사들이 이렇게 자사의 엔지니어들이 만든 소스를 오픈하면서도 성공을 하고 있고, 또 그들의 서비스들이 유사한 서비스를 제치고 지속되고 있다는 점이다.

4. Why successful?

솔직히 아직도 잘 모르겠다. 그저 짧은 지식으로 나름 파악해본 바는 다음과 같다.

4.1 집단 지성이 발휘된다

오픈 소스들의 특징은 commitor라 불리는 소스를 직접 컨트롤 하는 사람들외에도 익명의 다수 사람들이 기여할 수 있다는 점이다. 물론 오픈 소스가 지향하는 큰 방향은 commitor들에 의해 결정이 되겠지만, 자잘한 버그들이나 성능 개선 등은 익명의 수많은 프로그래머들에 이루어 지는 듯 하다. 마치 Wikipedia가 수많은 사람들의 참여로 브리태니커(Britannica) 백과 사전보다 그 내용이 우수한 것과 같은 이유가 아닌가 생각 된다.

4.2 참여자의 자기 만족이 크다

오픈 소스 프로젝트들은 저마다 정의한 문제를 각각의 시각으로 풀어내고 있다. 때문에 비슷한 솔루션을 여기 저기서 만드는 것이 아니라, 각각 고유한 솔루션을 만들어 낸다. 프로그래머들 사이에서 많이 쓰이는 말 중에 ‘Don’t reinvent the wheel’이라는 말이 있다. 똑같은 작업을 다시 싫어하기 싫어하는 프로그래머들의 특성을 잘 보여주는 말이 있는데, 오픈 소스에서는 이럴 가능성이 적다. 이것이 참여자의 생산성을 높여주는 것이 아닌가 생각된다.

또, 오픈소스에 참여하는 개발자는 자신이 가치 있는 일에 기여하고 있고, 이것이 오픈 소스를 통해 알려지고 명예를 얻는 것에 만족감을 느끼는 것 같다.

개발자들이 오픈소스에 참여하는 이유에 대해서는 @sm_park님께서 잘 정리해주신 소프트웨어, 잉여와 공포를 참고하기를.

5. 기업 입장에서 Open이란?

그러면 개개의 기업들은 오픈 소스와 오픈 소스 개발 문화를 어떻게 보고 어떻게 접근해야 할까?

기업 입장에서 오픈 소스 솔루션 자체를 도입하는 것은 좋은 점, 나쁜 점 모두 있는 것 같다. 당연히 새로 개발을 안하고, 어느 정도 검증된 솔루션을 쓸 수 있다는 것은 장점이다.

하지만, 간과해서는 안되는 부분이, 기술 회사를 지향한다면 오픈 소스를 도입하는 것과 더불어 자사의 기술 역량을 높이는 것을 게을리 해서는 안되는 것 같다. 오픈 소스를 도입하는 것은 마치 어려운 수학 문제를 푸는 데에 있어서, 답안지를 펴놓고 하는 것과 비슷하다고 생각하기 때문이다. 한 문제의 답을 아는 것이 지금의 상황을 이겨나가기는 좋지만, 나중에 또 다른 어려움이 닥칠 것을 생각해보면 근본적으로 역량(capability)를 키워 놓는 것이 중요하지 않나 생각된다. 마치 숙제를 열심히 베끼다 보면 숙제는 빨리 할 수 있지만, 실력은 늘지 않는 것처럼.

이것을 좀 과장해 표현하자면, 오픈하는 쪽의 마수(?)에 걸리지 않도록 조심해야 한다. 그 방법 중에 하나는 오픈 소스를 도입함과 동시에 자신도 오픈하는 것이 아닌가 생각된다. 회사 입장에서 ‘오픈’은 그 의미가 여러가지 일 수 있는데, 넓은 의미로는 타사에 대한 오픈이고, 좁은 의미로는 개인과 팀의 성과물을 다른 팀에게 오픈하는 것이다. 그러면 이 두 가지 의미를 포괄해서, 회사 입장에서 ‘오픈’이 갖는 의미에 대해서 좀더 자세히 이야기해보겠다.

5.1 사내에서 갖는 의미

1) 품질이 올라간다.

누군가 내 코드를 보고 거기에 대해서 평가한다고 생각하면, 프로그래밍에 임하는 자세가 분명히 다를 것이다. 알면서도 무시했던 여러가지 프로그래밍 원칙들을 지키려고 노력할 것이다. 쪽팔리기 싫으니까.

많은 오픈 소스 코드들과 그동안 내가 회사에서 보았던 코드와 비교해보면, 품질에 있어서는 오픈 소스 코드들이 압도적이다. 프로그래밍의 기본 원칙부터, 그 구조에 있어서 디자인 패턴의 적용 등 모든 부분에 있어서 좋다. 나 스스로는 이런 오픈 소스의 소스를 보면서 많이 배우고 있다고 생각한다.

2) 장기적으로 도움이 된다.

예전에, 오픈 소스의 버그를 고치고, 이것을 오픈 소스 커뮤니티에 알려주지 않고 자기 회사에서만 쓰는 경우를 보았다. 단기적으로는, 이 오픈 소스를 사용하는 다른 제품에 비해 경쟁우위가 생겼을 지 몰라도, 장기적으로 보면 손해 보는 일이다. 오픈 소스 버전이 올라갈 때 마다 수동으로 이 버그의 패치를 따로 해줘야 하면서 생기는 관리 비용이 생기기 때문이다. 또, 결국 이런 버그들은 언젠가 패치가 될 텐데 그때 가서 이것을 반영(merge)하려면 별도의 수고가 들고, 이런 것들이 프로젝트의 위험요소(risk)가 될 수 있다.

5.2 사외적으로 갖는 의미

실력과 자신감을 바탕으로, 자사가 만든 소스를 오픈하거나 또는 자사의 경험을 공유하게 되면, 업계와 개발자 커뮤니티에서 주목을 받게 되고, 기술 리딩(leading)회사로서 입지를 다지게 되는 것 같다. 특히 국내의 경우에 이렇게 하는 회사가 많지 않아, 해외의 솔루션을 잘 이용한 경험을 공유 해도 단번에 주목 받는다.

이렇게 회사가 주목 받으면, 그 회사가 내놓는 서비스나 제품도 초기에 주목 받기가 쉽다. 또 이렇게 기술을 리딩하는 회사로 포지셔닝을 하면 훌륭한 인재를 모으기도 쉽다. 적어도 내 주변만 보아도, 여러 조건이 비슷하면 기술적으로 명망이 있는 회사로 지원하는 개발자들이 꽤 있었다.

5.3 도의적으로 갖는 의미

약간은 이상적인 측면에서도 조금 언급해보고 싶다. 간단히 말하면, 공짜로 받은 것이 있으면 공짜로 줄 줄도 알아야 하는 것이 아닌가 싶다. 매일 친구의 숙제를 베끼지 말고, 한번쯤은 나도 친구들에게 숙제의 소스(source)가 되어주자. 매번 친구들에게 신세만 지면 친구들이 하나 둘 없어질 것이 아닌가. 조금 고상하게 표현하자면, 이것이 회사의 사회적 역할인 것 같다.

마치며

이렇게 장황하게 open에 대해서 썼지만, open을 해야만 성공하는 것인 지에 대해서는 확신이 없다. 적어도 open을 하더라도 꼭 실패하는 것은 아니고,  성공을 할 수는 있다는 점은 이제 배운 것 같다.

아직 open에 대해 확신이 서지 않는 이유는, 여전히 오픈 소스 개발 문화와 정반대에 있으면서도 새롭게 성공하는 회사들이 많기 때문이다. 대표적으로 애플과 아마존이 있는데, 애플은 자사의 주요 프로젝트에 대해서는 사내 직원들도 모르게 진행하고 있고, 아마존도 자사의 소스를 오픈하는 경우는 드물다.

하지만, 적어도 내가 보기에 open을 하는 것이 성공 확률을 높일 수는 있는 것처럼 보인다. 무엇보다, 나는 오픈 소스와 오픈 소스 개발 문화가 더 멋지게 보인다. 그리고, 기업이 커지면 관료화 되고 회사가 재미없어지는, 조직 경영의 문제를 푸는 데에도 오픈 소스 개발 문화가 열쇠가 될 수 있지 않을까 생각하고 있다.

3 thoughts on “오픈(open)에 대하여

  1. 오픈 소스의 성공은 집단지성이 발휘되는 것도 있지만 뭣보다 대중화에서 오는 것이 아닌가 합니다. 예를 들면, a) 아무래도 오픈소스가 접근성이 높으니까 품질은 좀 떨어져도 학생 때부터 오픈 소스를 쓰게 되고, b) 오픈소스로 빌딩을 해놓은 시스템이 커지기 시작하면 인프라를 바꾸기 귀찮으니까 차라리 익숙한 오픈소스를 개선하고 c) 썼으니까 보답 차원에서 커밋하고.. 혹은 전략적으로 자체 솔루션을 일반화한 담에 사용자를 넓힌 다음 컨설팅을 진행하기도 하고.. 정확히는 모르겠지만 야후가 하둡으로 이렇게 했던 것으로 압니다.
    소속 없이 그냥 오픈소스를 빌딩하는 사람한테도 이 시스템은 유리한데, 커밋할려고 오픈소스를 찬찬히 들여다보면 전문가가 되고, 대중적인 오픈소스의 유명한 커미터가 되면 컨설팅만 해도 먹고살 걱정은 없으니까요…ㅎㅎ 컨설팅 회사 창업해도 되고 유명 회사에서 모셔가기도 하고..
    그리고 무엇보다 간지나잖아요~~😉 일화로 리누스 토발즈가 구글인가 리눅스 컨퍼런스 가서 자기소개할 때 한 말이 떠오릅니다..”I’m your God ” ㅋㅋ

    • 네 그런 것 같아요.
      일단 무료이다 보니까 쓰게 되고, 익숙하다 보니까 계속 쓰고 그렇게 되네요.
      예전에 MS에서 대학교에 Visual Studio를 공짜로 뿌려서 저도 한참 Visual Studio를 썼던 기억이 나네요. ^^;

  2. Pingback: [정보] 소프트웨어, 잉여와 공포 – 박상민 | aro dream

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s