아래 글을 보고 오픈소스에 대하여 생각했던 내용과 겹쳐서 올려 봅니다.
원문링크
----------------------------------- 원문 ----------------------------------------
내가 오픈소스라는 문화를 처음 접했던 것은 90년대 말이었던것 같다.
(사실 리차드스톨만이 GNU선언이란 것을 한 것은 85년 3월이라고 한다.
GNU는 "GNU is Not Unix"라는 말의 약어란다. 나름 재귀형 문장이다.)
당시 뉴스를 통해 외국에서 벌어지는 기술자들의 캠페인으로 이해하게 되었다.
당시 내 머릿속에 떠오르는 느낌은 이랬다. "저게 무슨 개소리야!"
"새우깡을 공짜로 팔라고 그래봐라! 어디 그게 가능한 논리냐?"
"기계 돌리면 기계값 들었으니까 돈 받아쳐묵어야 하고,
단지 고가의 기계없이 사람만 썼대도 그럼 인건비는 하늘에서 떨어지냐?"라고 말이다.
그러나 이제는 이해를 한다. 그래서 다른 분들께 내가 깨달은 논리를 설명코자 이 글을 쓴다.
일단, 오픈소스를 제대로 이해하려면 그 철학을 이해해야 한다.
물론 그 철학은 GNU선언시 계획되었을 수도 있고, 오픈소스를 운용하면서 자연스럽게 도달한 논리일 수도 있다. 어쩌면 지금부터 쓰는 글은 나만의 논리일 수도 있다. 내가 맞춘 단추다.
우선, 살아있는 코드와 죽은 코드의 차이점을 이해해야 한다.
코드, 프로그래밍, 알고리즘... 알고리즘은 무엇인가? 간단명료하다.
바로 일을 해결하는 과정, 그 절차이다. 그것은 인간적 경험의 산물이며 작업의 지침서이다.
그렇다면 소프트웨어란 무엇인가? 바로 특정 하드웨어를 가지고 목적이 있는 일을 처리하기 위한 동작의 지침서이다. 즉, 코드란 스스로 살아움직이는 부분 같은 것은 애초부터 제로인
하나의 완벽한 무생물이다. 소프트웨어가 하는 모든 일은 철저히 계획된 인간의 지시절차 이 외에 그 어떤것도 아닌 것이다. 어떠한 소프트웨어는 살아있는 것처럼 착각을 일으키지만
실상 원래 죽은 것이다.
그런데 그런 코드가 곁에 개발자란 인간이 붙어있으면 생명을 가질 수 있게 된다.
수많은 오픈소스 엔진들을 보면 대부분 그들의 히스토리와 수많은 업데이트/패치들에
감탄을 금할 수 없게 된다. 패치로그를 보면 "무슨 버그가 있었는데 고쳤다."부터,
"사용자 편의성을 개선했다.", "새로운 자료형을 지원한다.", "불합리한 기능을 중단한다.",
"구성을 효율적으로 개편한다.", "타엔진과의 연동을 지원한다.", "알고리즘을 개선하였다.",
"새로운 플랫폼을 지원한다"등 수많은 상황이 존재함을 알 수 있다.
내가 구구절절 이렇게 나열한 것은 이유가 있다.
소프트웨어를 잘 모르는 사람들이 코드를 이렇게 생각하기 때문이다.
"그거 처음에만 잘 짜놓으면 계속 잘 쓸 수 있는거 아냐?"
위의 내용들을 다시 한번 보라. 패치는 단순히 버그만 잡는 것이 아니라,
인간과 세상의 변화에 일일이 "반응"하고 있다. 이것이 바로 살아있다는 것이다.
더 이상 자신을 변화시켜 줄 개발자가 사라진 그것.
즉, 죽은 코드들은 결국 나의 작업에 해를 입힌다. 세상이 발전한 만큼 나도 발전해야
먹고 사는 것인데, 고리타분해진 알고리즘을 내포한 그것은 결국 내 발목을 잡는다.
하드웨어는 항상 발전하고 그 발전의 원동력은 창의적인 개편이 항상 따르는 법인데,
(예를 들면 CPU/GPU간 병렬처리라든지, 네트워크자원을 통한 분산처리, 새로운 명령어셋트의 도입)
그것은 가끔 개발의 규칙이 송두리채 바뀜을 의미하게 된다.
마치 메모리를 아끼던 패러다임에서 모든 일을 메모리 중심적으로 하는 변화라든지,
CPU의 병렬처리의 가속을 위한 작업순서 재구성의 필요성, 네트워킹이 너무 느려서 최대한 데이터량을 아끼던 패러다임에서 차라리 CPU의 분산컴퓨팅을 위해 데이터량을 훨씬 더 쓰는
방법으로 발상을 바꾼다던지, 랜덤엑서스가 IO보다 중요했던 상황에서의 개별파일 중심적인 리소스에서 IO의 부하가 더 큰 이슈가 된 통합파일 중심적 리소스시스템의 도입이라던지,
CPU의 발전으로 대량의 통연산을 제공하는 새로운 명령어의 등장이나 또는 새로운 CPU에서 더이상 제공하지 않는 명령어가 생김으로 인한 어셈블리 코드의 변화라던지 등등해서
그것이 어떤 코드이건간에 시대의 변화와 발맞추지 못하면 그 코드는 언제든지 비효율적이고 고리타분한 작업지침으로 전락할 수 있는 것이다.
그렇기에 코드는 원개발자 1인만 항상 바라보고 있다가 그 개발자가 다른 업무를 맡게되어 찬밥신세가 되면 금방 죽어버리는 원통한 팔자에서 전 세계의 개발자들에게 오픈되어 마치 스스로
배포와 재생산, 개선과 개편을 거듭하는 스스로 살아있는 무언가가 되어야 하는 것이다.
또한 전 세계의 모든 개발자가 동일한 문제의 해결을 놓고 씨름하는 어처구니 없는 저효율성을 극복하고 누군가가 풀어낸 문제는 후발주자는 간단히 건너뛰고 그 열정을 다음 문제의 해결을 위해 써서 다른 후발주자를 위해 길을 여는 상부상조의 아름다운 시스템이 되어야 한다는 것이다.
또한 그렇기에 국내의 일부 업체들이 오픈소스를 도입해놓고 그 결과물을 다시 오픈하진 않는 행위는 재배포의 강제공개같은 몇가지 라이센스 법적 문제를 논외로 하고서라도 오픈소스의 장점을 10%정도만 가지는 것이라 할 수 있는 것이다.
오픈소스의 장점은 누군가 만들어 놓은 결과물을 가져다 쓰는 것이 아니라 내 품에만 안고 있으면 결국 찬밥먹고 죽어버릴 소중한 코드들에게 강력한 생명을 부여하는 것이다.
그때의 그 리눅스가 오늘의 그 리눅스는 아닌 것이다. 아마 초대 오픈소스인 리눅스는 수많은 탈피와 변태를 거쳐 어제도 오늘도 새롭게 태어나고 있는 영원불멸의 생명체인 것이다.
물론 그 영광은 초기 설계자와 공식배포처인 회사에게 돌아갈 것이며, 또한 그 코드를 이해하고 수정하며 기여했던 개발자들에게 열정을 쏟은 만큼 지분이 돌아갈 것이니 초안자와 공식배포처는 놀고 먹지 않은 다음에야 가장 큰 지분자임은 두말 할 필요도 없다.
물론 지분이란 단어는 주식같은 물질적 지분이 아니라 각자 돌아갈 자기몫의 잠정적인 기대치를 말한다.
(바로 이어서 쓸 오픈소스의 수익구조를 보면 이해할 수 있다.)
그렇다면 오픈소스는 어떻게 돈을 버는가?
가장 중요한 대목이고 오랫동안 이해가 안갔던 핵심적인 부분이었다.
사람이 돈을 쓰는 데는 2가지 목적으로 나뉜다.
바로 "재화의 구매"가 그 첫번째요, 두번째는 "권리의 구매"이다.
첫번째는 단순히 새우깡을 사는 것이다. 시간이란 요소가 들어가지 않는다.
두번째는 보험같은 것이다. 실제로 받을지는 몰라도 상황에 따라 보장받을 수 있는 권리를 산 것이다.
식별적인 특징은 첫번째와 달리 시간이란 요소가 들어간다는 점이다. 오픈소스의 수익구조는 권리의 판매이다.
애컨데 유지보수보장이다. 또한 문제가 발생했을 때, 능동적 대처에 대한 보장이다.
초기 넘어간 엔진은 무료지만, 그것을 도입, 운용하는 데 필요한 권리는 유료인 것이다.
물론 자사의 사원이 해당 오픈소스를 많이 연구한 탓에 유지보수를 신청하지 않아도 된다고 한다면, 그 사원은 원개발자 대신에 일거리를 받은 셈인데, 그렇게 된 이유는 과거 자신이 해당 오픈소스를 이해하고 연구하는데 열정을 쏟았기 때문인 것이다. 열정은 수익으로 돌아왔다.
그것은 오픈소스에 기여한 만큼 그에겐 지분이 있었던 것이다.
또한 오픈소스는 쉽게 유명해지고, 오픈소스들의 노하우풀을 통해 쉽게 발전을 하고,
쉽게 표준화된다. 오픈소스 도입역량이 높은 개발자는 사실 세계 최고의 코드를 언제든지
소환할 수 있는 소환사 또는 연금술사가 되는 것이고, 오픈소스를 도입한 회사는 해당 기술에 대하여 명맥이 끊김을 걱정하지 않고 자사만의 기술에 머물러 사원을 뽑을 때마다 원점에서 교육을 시켜야 하는 번거로움과 아까운 비용대신, 언제든지 구할 수 있는 예비 인력풀을 보유하게 되는 것이다.
그렇다면 오픈소스를 도입한 회사는 자신만의 기술이 하나도 없어 경쟁력이 도태되지 않냐고? 오픈소스를 도입한 것이지. 하나부터 열까지 모든 기술을 까라고 한 적은 없다.
그것이 클라이언트적 기술역량이든, 기획적 역량이든, 비지니스모델적 역량이든지
회사는 언제든지 오리지널리티를 보유할 수 있다. 다만, 살아있어야 하는 코어한 기술부분만을 추려내어 오픈소스에 참여, 해당 기술은 발전적 무한한 에너지를 얻는 것이다.
바로 그런 의미에서 가장 도입여건이 좋은 회사가 바로 게임회사가 아닐까 싶다.
성공하는 게임회사가 꼭 자체 물리엔진을 보유해야 하는 것은 아니다. 오픈소스인 BOX2D로 엔진을 개발해도 재미있는 게임을 만드는 데는 아무런 상관이 없다. 또한 자체 개발한 기술도 오픈소스화 하여 새로운 오픈소스 브랜드를 형성하고 축적한다면 결국 팔만한 자체기술을 개발하여
언리얼엔진 같이 컨텐츠 이외에 엔진수익원을 확보하려던 소기의 목적도 달성할 수 있을 것이다.
엔진은 무료지만, 엔진과 연동되는 툴도 필요할테니 말이다. 또한 유지보수의 해결도 필요할 것이다.
현재 서비스되고 있는 오픈소스가 아닌 수많은 엔진을 생각해 보라.
그들도 결국 유지보수비용으로 상용엔진을 팔고 있음을 알 수 있다. 왜 판매금액 차이에 차등을 주면서 어떤 등급은 신속한 메일답변이 가능하다고 하고, 어떤 등급은 프로젝트내내 기술지원을 약속받고, 어떤 등급은 확장기능 제공을 포함하겠는가? 결국 매월 또는 매년 내는 돈은 유지보수 잘 해 달라고 주는 돈이다.소프트웨어는 한번 빌드되면 복사하는 데 비용이 들지 않는다. 실물재화와 다른 점이다.
결국 돈을 정당하게 받을 수 있는 "명분"은 한 카피 복사해 줬다고 생색내는 비용이 아니라 실제로 일을 해주던 안해주던 막연한 불안감에서 해방시켜주는 생명보험같은 권리의 판매비용이다.
그게 바로 현 시점에서 먹히는 비즈니스모델인 것이다.
결국 오픈소스 엔진도 같다.
오히려 초반 도입가격이 0원이라는 훌륭한 마케팅도구 덕분에 실제로 유지보수 신청건수는 비약적으로 늘어날 수 있다. 오픈소스를 무료로 도입했다고 해도 그것은 운용하고 커스터마이징하고 내부기술화하고 적절한 패치를 해주는 것은 보통 일이 아니며 그것을 위해 고급인재 단 한사람을 뽑아도 쉽게 엔진비용을 넘어서기 때문이다. 오픈소스 엔진의 원개발자는 항상 많은 유지보수를 하고 있기 때문에 대부분 비슷한 일이라 새로운 유지보수계약을 하여도 큰 부담도 없고 해소가 되지만, 유지보수비용 지급하기 싫어서 뽑은 자기 회사 고급인재는 매일이 삽집의 연속일 수 있다.
그러다가 관련된 일을 알만하면 퇴사나 이직을 선택할 지 모르는 것이다.
그러니 회사는 차라리 원개발자랑 일종의 보험계약을 하는 것이다.
만약 내가 만든 기막힌 엔진을 저렴한 5백만원에 팔면 초기비용의 부담으로 아무도 도입하려 하지 않겠지만, 1년 개발서포트/유지비용의 명목으로 1천만원을 선택 제시한후, 무료로 오픈소스 형태로 배포된 엔진은 누구나 쉽게 도입하여 개발사들이 잘 쓰다가 결국 커스터마이징에 1명을 붙여도 4천만원이 훌쩍 넘긴다는 사실을 깨닫고 연간 1천만원짜리 유지보수 비용을 지불할 것이다.
결국 5백만원인 일회성 초기수익을 포기했더니, 죽을 때까지 연간 1천만원씩 벌 수 있게 된 셈이다.
결국 오픈소스의 놀라운 힘이다.