개요

이 글은 한글로 번역된 책[1]의 내용을 읽고 난 글이다. 이 책은 여러 글을 모은 것이고, 여기서는 2장인 "성장과 시장"의 내용을 주로 하여 정리한다. 이 책은 이 2장 이외에도 해커 문화라고 하는 Open Source의 역사에 대해서도 설명하고 있다. 이러한 Open Source의 역사는 [2]에서도 만화로 잘 설명되어 있어서 틈이 나면 읽어 보는 것도 좋겠다.


성당 모델 vs 시장 모델

책에서는 2가지 소프트웨어를 개발 방식을 소개 한다.

  • 상용 소프트웨어의 '성당" 모델
  • 리눅스 세계의 '시장' 모델


사실 성당 모델은 상용 뿐만 아니라, Open Source 혹은 자유 소프트웨어 (Free Software)를 만드는 초기에도 적용되었다. 초기 Unix 기반의 Open Source들도성당을 건축하듯이 만들어 져야 한다고 믿었다. 특히, Emacs등은 그렇게 만들어 졌다. 


성당 모델에는 다음과 같은 특징으로 만들어 졌다.

  • 몇몇의 도사 프로그래머 혹은 작은 모임의 뛰어난 프로그래머에 의해서 조심스럽게 만들어 진다.
  •  때가 되기 전에 발표되는 베타판도 없이 만들어 진다. 

이와는 다르게 시장 모델은 Linux가 만들어지면서 다음과 같은 방법으로 만들어 졌다.

  • 일찍, 그리고 자주 발표 한다.
  • 다른 사람에게 위임할 수 있는 것은 모두 위임한다.
  • 뒤 범벅이 된 부분까지 공개한다.


파트타임으로 해킹하면서 인터넷이라는 가느다란 선만으로 연결된 전 세계 수천명의 개발자에 의해서 만들어 진다. 리눅스는 '충분히 많은 사람이 있다면, 찾을 수 없는 버그란 없다'라는 생각으로 만들어 졌다. 그러면서, 리눅스 아카이브 사이트가 이것을 시장 같은 개발 모습을 보여준다 


Open Source 프로젝트도 처음 부터 시장 방식으로 개발할 수 없다는 것은 자명하다. 테스트, 디버깅, 그리고 개선은 시장 방식으로 할 수 있다. 개발자 공동체는 초기에 실행하고 테스트할 수 있는 장난감이 필요하다. 초기에 해야 할 것은 잠재적인 공동 개발자들에게 이것이 머지 않은 미래에 정말 괜찮은 무언가로 진화할 수 있다는 것을 이해 시키는 일이다



격언들

저자도 fetchmail이라는 Open소스를 만들면서, 시장 모델을 도입하였고, 거기서 발견한 격언들을 아래와 같이 정리하였다.

  1. 모든 좋은 소프트웨어는 개발자 개인의 가려운 곳을 긁는 것으로 부터 시작된다.
  2. 좋은 프로그래머는 어떤 프로그램을 만들어야 할지 안다. 위대한 프로그래머는 어떤 프로그램을 다시 만들어야 할지 그리고 재사용해야 할지 안다.
  3. '갖고 있는 것을 버릴 계획을 세우라. 언젠가는 버리게 될 것이다." (프레더릭 브룩스, "맨먼스 미신" 11장 중에서)
  4. 절절한 태도를 갖고 있으면, 흥미로운 문제가 당신을 찾아갈 것이다.
  5. 프로그램에 흥미를 잃었다면, 프로그램에 댛나 당신의 마지막 의무는 능력있는 후임자에게 프로그램을 넘겨주는 것이다.
  6. 사용자를 공동개발자로 생각하면 코드가 다른 어떤 방법보다 빠른 속도로 개선되며 효율적으로 디버깅할 수 있다.
  7. 일찍 발표하고 자주 발표하라. 그리고 사용자의 소리에 귀를 기울여라.
  8. 충분하게 많은 베타 테스터와 공동 개발자가 있으면, 거의 모든 문제는 빠르게 파악될 것이고 쉽게 고치는 사람이 있게 마련이다. ('보는 눈이 충분하게 많으면, 찾지 못할 버그는 없다.' - "Linus's Law")
  9. 자료구조를 훌륭하게 만들고 코드를 멍청하게 만드는 것이 그 반대 경우보다 훨씬 잘 작동한다.
  10. 베타 테스터를 가장 종요한 자원으로 여긴다면 그들은 정말 가장 중요한 자원이 되어 준다.
  11. 좋은 아이디어를 생각해 내는 것 다음으로 중요한 일은 사용자가 알려준 좋은 아이디어를 깨닫는 것이다. 때로는 이편이 나을 수도 있다.
  12. 종종 가장 충격적이고 혁신적인 해결 책은, 당신 자신이 문제에 대해서 가지고 있는 개념이 잘못돼 있다는 것을 깨닫는 것에서 나온다.
  13. "설계에서 완벽함이란 더 이상 추가할 것이 없을 때 이루어지는 것이 아니라 더 이상 버릴 것이 없을 때 이루어진다."
  14. 어떤 도구든지 기대하는 방법으로 쓸모가 있어야 하지만 정말 위대한 도구는 사용자가 전혀 기대하지 않았떤 용도에 알맞게 된다.
  15. 어떤 종류든 게이트웨어 소프트웨어를 만들려고 한다면 데이터 스트림에 가능한 한 최소의  조작만 가하라. 그리고 수신자가 강제로 하게  하지 않는다면 정보를 '절대로' 잘라 버리지 마라.
  16. 언어가 '튜링-완전(Turing-complete)'하지 않다면 구문상의 유연성이 필요하다.
  17. 보안 시스템은 그것이 보호하려는 비밀만큼만 안전하다 가짜 비밀에 주의 하라
  18. 재미있는 문제를 풀어보고 싶다면, 자신에게 재미있는 문제를 찾아 나서는 것부터 시작하라.
  19. 개발 조정자가 최소한 인터넷만큼 좋은 매체를 갖고 있으면 강제력을 사용하지 않고 어떻게 이끌어야 할 지 알고 있따면, 한 명보다는 여러 명의 지도자가 필연적으로 더 낫다.


마치며...

이미 많은 상용 Software도 Open Source를 기반으로 만들어 지고 있고, 위와 같은 시장 모델도 채용하고 있다. 어떤 개발 모델이던지, 그대로 받어 들이는 것 보다는 왜 그런지 어떻게 다르게 할 수 있는지를 고민하면서 채용해야 한다. 결국, 개발 조직이나 개발 프로세스도 이전과는 다르다. Agile이 그 하나이고, 상용 Software에 대한 Beta Testing도 이와 일맥 상통하고 있다.


References

[1] 에릭 레이먼드 지음, 정직한 외 옮김, "성당과 시장", 한빛 미디어

[2] 만화로 나누는 자유/오픈소스 소프트웨어 이야기, http://joone.net/

+ Recent posts