1. 배경: 소프트웨어 (Software), 프로그램 (Program), 소스 코드 (Source Code)

 

컴퓨터의 사용이 일상이 되어 버린 요즘에 와서는, 굳이 전산 전공자가 아니라고 하더라도 소프트웨어, 프로그램,  소스 코드와 같은 용어들을 한번쯤 들어 보셨을 수 있을것입니다. 오픈 소스 프로그램 Open Source Program, 다른 말로는 자유 소프트웨어 (Free Software)의 이야기를 하기 위해서는 먼저 이런 용어들과 배경에 관한 약간의 설명을 하겠습니다.

 

PC건 스마트폰이건 계산기건 모든 정보처리 시스템(=컴퓨터)은 하드웨어와 소프트웨어로 구성됩니다. 하드웨어는 물리적인 구성체, 즉 컴퓨터 본체, 마우스, 모니터 뭐 이런것들입니다. 그 하드웨어를 제어해서 일정한 동작을 해주도록 만드는 것을 '프로그램' (Program)들을 소프트웨어라고 합니다. 이런 의미로 보았을때 "프로그램"이라는 말과 "소프트웨어"라는 말은 실질적으로 거의 동일한 뜻을 가지고, 서로 바꾸어 사용할 수 있습니다.

 

프로그램 혹은 소프트웨어의 예로는 앵그리버드, 파이어폭스, 토렌트, 파워포인트 같은 사용자 응용 프로그램(user application), 안드로이드, 윈도우, 리눅스 같은 운영체제 (Operating System), C 컴파일러 및 라이브러리 같은 개발 도구 소프트웨어 (Development Software) 같은 것들이 있습니다.

 


Tux

오픈 소스 운영체제인 리눅스 linux의 마스코트 펭귄




그런데 이렇게 실제로 컴퓨터에서 돌아가는 프로그램은 보통은 "실행 프로그램 Binary Executable" 이라고 부릅니다 이런 "프로그램"은 직접적으로 컴퓨터를 제어하는 역할을 하며, 그러므로 흔히들 '기계어'라고 부르는 컴퓨터를 제어하는 명령어의 집합으로 구성되어 있습니다.  이런 실행 프로그램들은 순전히 기계가 이해(decode)하기 수행(execute) 하기에 용이하도록 만들어져 있기 때문에, (전문가라고 하더라도) 사람이 그 내용을 추적하고 이해하는게 실질적으로 불가능 합니다.

 

그럼 이런 실행 프로그램(소프트웨어)은 누가, 어떻게 만들어낼까요? 기계어로 직접 프로그램을 만들어 내는 것은 실질적으로 불가능하기 때문에, 프로그래머들은 사람이 이해할 수 있는 "프로그래밍 언어"를 사용하여 이러한 프로그램(소프트웨어)을 만들어 냅니다. (주1) 컴퓨터 사용자들이 한번쯤 들어 봤음직한 "C"라던지 "자바 Java" 라던지 하는 것들이 바로 그런 프로그래밍 언어의 예 입니다.

 

소스 코드(source code, 옛날 번역은 원시 프로그램)란 이렇게 사람이 알아볼수 있는 언어로 기술되어 있는 프로그램을 말합니다. 이렇게 사람이 작성한 소스 코드(source code)는 컴파일러(Compiler)라고 하는 특별한 프로그램을 통해 기계가 수행하는 실행 프로그램(Binary Executable)로 바뀌게 됩니다.

 

즉, 좀 더 쉽게 이야기하면, "소스 코드"는 소프트웨어의 원본을 의미합니다. 

 

비유로 이야기하자면, 일반 사용자가 쓰는 프로그램(소프트웨어)이 "지폐"라면, 소스 코드는 지폐의 "인쇄 원판"이라고 할 수 있습니다. 지폐는 그냥 사용만 할 수 있지만, 인쇄판은 누구나 적당한 도구 (인쇄기 = 컴파일러)만 있다면, 지폐를 계속 만들어낼 수 있는 것 유사하게, 소프트웨어의 원판(소스 코드)을 조작함으로서 자기 입맛에 맞는 다른 버전의 실행 프로그램을 만들어 내는 것이 가능합니다. (다른 와닿는 예로는 3분짜리 압축된 축약본 동영상 vs. 노모 풀버전 원본 소스)

 

images?q=tbn:ANd9GcQrZAi8EhC5cNghV6MzTkDGlgojYyLtSO4703d9XIF2XlyT4UnxaA 

원본 (소스코드)와 생성본 (실행프로그램)의 관계. 생성본을 고치기 위해서는 원본이 필요하다.




2. 오픈 소스 (Open Source) 프로그램 혹은 자유 소프트웨어 (Free Software)란?

 

오픈 소스 (Open Source) 프로그램이란 소프트웨어의 소스 코드, 즉 원본이 공개되어 있는 소프트웨어를 의미합니다. (개인적으론 원본 공개 소프트웨어라고 번역해도 좋지 않을까 합니다.)

 

오픈 소스 프로그램을 흔히 자유 소프트웨어 Free Software라고도 합니다. 자유 소프트웨어는 반드시 "공짜 free of charge" 프로그램을 의미하지 않습니만 실질적으로 오픈 소스 프로그램들은 대개 공짜로 얻을 수 있습니다. 오픈 소스 프로그램들은 기본적으로 자유로운 '재배포'를 함께 포함하기 때문입니다. 말인즉슨 원작자가 돈을 주고 팔더라도 다른 사람이 소스를 받아가서, 공짜로 재배포 해버려도 막지 못한다는 뜻입니다. 재배포를 허용하않는 프로그램들은 아무리 소스코드를 함께 제공하더라도 오픈소스 프로그램/자유 프로그램이라고 하지 않습니다. (반대로 공짜로 배포는 하지만 소스를 공개하지 않는 프로그램은 따로 프리웨어 Freeware 라고 해서 구분합니다. 예: 구글 크롬)

 

소스가 공개되어 있다고 해서, 그 소스에 대한 저작권 (copyright)이 없거나 무시된다는 뜻이 결코 아닙니다. 정 반대로, 오픈 소스 프로그램에서 가장 중요하게 다루어 지는 이슈가 바로 저작권입니다. 저작권법이 존중되는 국가에서, 오픈 소스 프로그램들도 상용 프로그램들과 마찬가지로 그 저작권을 사용할 수 있는 권리 즉 라이센스 (license, 사용허가서)의 지배를 받습니다. 상용 프로그램을 돈내고 구매할때 라이센스 조항에 동의하는 것 처럼 (예 불법 복사하지 않겠음. 개인용 소프트웨어를 업무용으로 사용하지 않겠음. 등등), 오픈 소스 프로그램을 (공짜로) 다운받아 사용할때 사용자는 그 프로그램이 내건 라이센스에 동의하도록 명시되어 있습니다.

 

정리하자면 오픈 소스 프로그램들은 누구나 (실질적으로) 공짜로 사용할 수 있습니다. 그 프로그램을 제작한 사람(들)이 내건 라이센스 조건에만 동의한다면 말입니다. 

 

오픈 소스 프로그램들의 라이센스에는 여러 종류가 있고, 때문에 종종 헛갈리기 마련입니다. 그렇지만 실질적으로 오픈 소스 라이센스는 크게 두 가지 종류로 분류됩니다.

 

(A) 너그러운 라이센스 (Permissive License)

 

먼저, (정확한 번역을 어떻게 하고 있는지 모르겠는데) Permissive 너그러운 혹은 허용적인 라이센스들이 있습니다. 대표적으로 BSD 혹은 버클리 라이센스 (BSD, Berkeley Software Distribution), MIT 라이센스, 아파치 (Apache) 라이센스와 같은 것들이 그런 것입니다. 이 라이센스들은 (세부적으로 아주 조금씩 다르지만) 기본적으로 사용자가 마음대로 하도록 허용합니다. 

 

사용자는 얼마든지 그 소프트웨어의 원본을 가져다가 쓸 수 있습니다. 다른 사람에게 주거나 (재배포), 아니면 조금 고쳐서 자기가 쓰거나 남에게 팔아도 됩니다 (상업적 이용). 그러지만 이 라이센스가 요구하는 최소한의 사항은 다음과 같습니다.

 

    * 이 오픈 소스 소프트웨어를 사용하다가 (에러가 있거나 해서) 잘못되더라도, 원작자들에게 책임을 묻지 않는다.  

    * 재배포시 이 오픈 소스 소프트웨어의 원저자를 밝힌다. 

    * 이 오픈 소스 소프트웨어와 그 원저자를 사용자들의 광고에 활용하지 않는다. 

 

마지막 조건에 대해서 조금 부연설명을 해보겠습니다. 예를 들어서 MIT에서 만들어서 공개한 프로그램을 자기 기계에 붙여서 팔면서 "MIT에서 만든 놀라운 프로그램 내장!" 이런 식으로 광고 할 수 없다는 말입니다.

 

 

(B) GPL 라이센스

 

이와는 반대로 오픈 소스 프로그램의 상업적 이용에 있어서 (결과적으로) 다소의 제약이 가해지는 계열의 라이센스가 있습니다. 자유 소프트웨어 재단 (Free Software Foundation) 과 GNU 계열의 프로그램들에서 기인한 GPL (General Public License) 라이센스가 그것입니다. (GPL라이센스라고 하면 라이센스라는 말이 두번들어가는 역전앞과 같은 표현이지만 이 문서에서는 편의상 라임을 살리기 위해 종종 그렇게 쓰겠습니다.)

 

GPL 라이센스는 위의 BSD 라이센스가 요구하는 것 전부에다가 다음과 같은 내용을 특히 추가적으로 요구합니다.


   * 이 오픈 소스 소프트웨어를 "변경"하거나 "포함"하여 만드는 소프트웨어를 배포(판매)할 때, 해당 소프트웨어 역시 전체 소스 코드(원본)를 함께 공개해야 한다. 

   * 이 오픈 소스 소프트웨어를 "변경"하거나 "포함"하여 만드는 소프트웨어를 배포(판매)할  때, 해당 소프트웨어 역시, 이 라이센스와 동일한 라이센스를 (즉 GPL을) 사용하여야 한다.

 

GPL 라이센스 역시 (허용적인 BSD 라이센스와 마찬가지로) 프로그램을 가져다가 그냥 사용하기만 하는 데에는 아무런 제약이 없습니다, 개인이건 기업이건 간에 마찬가지입니다. 이를테면 대기업에서 업무용 서버를 쓴다거나, 혹은 심지어 상품 판매를 위한 서버를 운영할때 GPL 라이센스 프로그램인 리눅스를 사용하더라도, 어떠한 라이센스 비용을 지불할 필요가 없습니다.  (윈도우 서버처럼 서버 한대 당 OS에 돈을 지불하고 살 필요가 없습니다.)

 

문제는 GPL 라이센스인 "A"라는 프로그램을 가져다가, (1) "A"를 응용한 다른 프로그램을 만들어 낼 경우, (2) "A"를 포함하는 다른 프로그램 "B"를 만들 경우입니다. 이렇게 새로 만든 프로그램을 상용화 할 때는, 새로 만든 프로그램의 소스를 마찬가지로 GPL로 전체 공개해야 하기 때문입니다. (위에서 이야기하듯 그럼 GPL로 공개된 "B"는 누구나 다운받아서 공짜로 재배포 할 수 있기 때문에, 상업적인 이용이 힘들어 집니다.)

 

극단적으로 새로 만든 프로그램의 99%를 본인이 작성한 것이라고 하더라도, 어떤 특정 기능을 쓰기 위해서 1%의 GPL 프로그램과 합치게 되면, 전체 프로그램을 GPL로 공개 해야만 합니다. (주2)

 

그렇기 때문에 GPL 계열 라이센스를 싫어하는 쪽에서는 -- 이를테면 마이크로소프트 -- "이게 말이 되냐? 이건 마치 좀비 바이러스와 같다."라고 비난하기도 합니다. 덕분에 GPL 라이센스를 주창한 자유 소프트웨어 연맹과 그 추종자들을 흡사 좌파, 빨갱이, 무정부주의자 같은 놈들이라고 생각하는 사람들도 있을 지도 모르겠습니다.

 

근데도 재미있게도, 흔히 반저작권(copyleft)라고도 많이 부르는 GPL은 전혀 무정부주의적이거나 저작권(copyright)를 무시하는 행위가 아닙니다. 오히려 GPL의 운영은 '저작권법'에 근거를 두고 있습니다. 기본적으로 GPL 프로그램을 사용하는것 자체가 GPL이라는 라이센스에 동의한다는 뜻이기 때문에, 사용하고도 라이센스를 어기는 것은 저작권법에 의한 "계약 위반"이고 그렇게 될 경우 소송을 통해 GPL 을 강제하기 때문입니다.

 

근본적으로 GPL은 '상호주의'에 기반합니다. "우리가 만든 소프트웨어의 기능을 쓰고 싶다고? 그럼 마음대로 쓰게 아예 원본을 내줄테니 니가 가져가서 쓰고싶은 대로 고쳐써. 대신, 너도 니가 만든 소프트웨어를 공개해. 싫으면 관두던지."

 

GPL을 요구하는 대표적인 소프트웨어는 다음과 같습니다: 리눅스(linux) 운영체제, GNU 계열 프로그램, 특히 그중 C 컴파일러 (GCC).  


Heckert GNU white.svg

GPL을 만들어낸 GNU의 마스코트



 

 

3. 오픈 소스 라이센스의 효용과 의의

 

허용적인 BSD 라이센스에 대해서는 사실 큰 논란이 없습니다. (프로그램쟁이들이 스스로 호구짓해주겠다는데 그저 땡큐지.) 논란의 여지가 큰 것은 바이러스성 성격을 가지고 있다고까지 비난 받는 GPL 계열 프로그램 들입니다. 

 

그렇다면 (특히 GPL 계열의) 오픈 소스 라이센스 프로그램들은 과연 누구에게 어떤 효용이 있을 까요? 오픈 소스 프로그램을 개발하는 사람들은 과연 어떤 사람들이고 너드들 호구들  왜 그런 일을 할까요?

 

 

(1) 일반 기업, 단체 사용자의 효용 -- 소프트웨어 개발업체가 아닌, 일반 기업 사용자들에게 오픈 소스 프로그램들은 가뭄의 단비같은 고마운 존재입니다. 라이센스가 BSD건 GPL이건 별로 문제가 되지 않습니다. 상당히 괜찮은 성능의 프로그램을 별도의 라이센스 비용없이 거의 공짜로 사용할 수 있으니까요. 예를들어 아크로를 비롯한 대다수의 웹서버들이 제로보드 (LGPL) + MySQL (GPL) + PHP (GPL) + 리눅스 (GPL) + 아파치 (BSD와 유사한 아파치 라이센스) 라는 표준 조합으로 구성되어 있다는 것을 생각해 보십시오. 만약 이런 기능을 제공하는 뛰어난 성능의 무료 소프트뒈어들이 없었다면, 아크로등 인터넷상의 서비스들이 저렴한 가격으로 얻어질 수 있었습니다. 

 

단순 공짜 소프트웨어(프리웨어) 보다 오픈 소스 프로그램은 훨씬 더 효용이 큽니다. 처음 개발된 버전과 다른 실행 환경에서 작동 되도록 만드는 것 (즉 포팅 porting 작업)을 위해서는 프로그램의 소스 코드가 필수적입니다. 뿐만아니라 실제로 프로그램을 쓰다보면 여러가지 사소한 필요에 의해 조금씩 조금씩 프로그램을 고칠 일이 대단히 많아지는데, 이를 위해서도 역시 소스가 있어야 합니다.

 

 

(2) 일반 개인 사용자의 효용 -- 생각과는 반대로, 오픈 소스 프로그램들은 일반적인 최종 개인 사용자들에게는 그렇게 매력적이지 않습니다. 오픈 소스 프로그램들은 대게 개인 개발자들이 개발하기 때문에, 일반 사용자들이 직접 사용할 때 절대적으로 중요한 사용자 인터페이스, 그래픽 같은 것들에 약한 모습을 보이는 경우가 많기 때문입니다. (차라리 크랙 버전을 구하고 말지 오픈소스 프로그램은 도저히 못 쓰겠다는 유저들)  그러므로 일반 개인 사용자에게 오픈 소스 프로그램의 효용은 (1)에서 얻어지는 저렴한 서비스가 더 틉니다.



9k=

사용하기가 힘들어 인기가 정말 없는 오픈 오피스


 

(3) 소프트웨어 기업 – 오픈 소스 프로그램은 양날의 검 입니다. 쓸만한 소프트웨어를 개발하는 일은 무지하게 힘들고 오래걸리고 노력이 많이 가는 일입니다. 그렇기 때문에 오픈 소스 프로그램을 자신의 프로그램의 일부로 사용하면 개발 기간을 무지하게 단축 시킬 수 있고, 경우에 따라서는 성능향상도 꾀할 수 있습니다. 그렇지만 GPL 라이센스의 프로그램을 사용하면, 자신의 소프트웨어를 공개해야 하기 때문에 실질적으로 상업적인 이용이 불가능합니다.

 

그러므로 대부분의 소프트웨어 기업에서는 오픈 소스 프로그램을 사용하기 전에  (심지어 내려받을 때에도) 항상 법률팀을 통해서 그 라이센스를 확인하게 되어 있습니다. 잘못하다가 회사 소프트웨어 전체를 GPL로 공개해야 하는 큰 문제가 생길 수 있기 때문이지요.

 

약간 예외적인 경우로 이중 라이센스 정책을 사용하는 회사들도 있습니다. (데이터베이스 소프트웨어인 MySQL이 대표적인 예입니다.) 프로그램을 두 가지 버전으로 만들어서, 기본 성능만 제공하는 버전을 GPL오픈 소스로 공개해 버리고, 추가적인 핵심 기능을 가진 버전을 상업용으로 판매하는 것입니다. 이렇게 할 경우, 주된 수입원인 대형 고객들 (기업 상대)에게는 적정한 수입을 올립니다. 반면 작은 규모의 단체나 개인들에게는 무료로 공급함으로서, 잠재적인 고객들을 확보하고, 브랜드의 인지도를 높이는 것과 동시의, 더 많은 사용자들의 피드백(문제점, 개선점 및 버그 발견)을 얻어 낼 수 있습니다. 다른 한편으로 이렇게 공개된 버전은, 새로운 경쟁자들이 시장에 진입하는 것을 막아내는 효과가 있습니다. (시장에 새로 진입하는 데이터베이스 회사는 어찌되었건 공짜로 얻을수 있는 MySQL 이상의 성능을 보여줘야만 시장에서 물건을 팔 수 있습니다.)

 



2Q==

MySQL 의 상업버전은 구매해야 합니다. Oracle이 인수한 현재에도 마찬가지 입니다.





(4) 개발자 커뮤니티

 

기업에 소속되지 않은 개발자들, 혹은 월급 받는 일 말고도 남는 시간에도 프로그램 하기를 좋아하는  사람들에게, 오픈 소스 프로그램은 크게 환영 받습니다. (공개건 상업 소프트웨어건, 전세계 어느 나라 어느 회사에서건, 훌륭한 프로그램을 실질적으로 개발하고 있는 사람들은 바로 이런 사람들이란 걸 염두할 필요가 있습니다. 애당초 이문에 밝은 사람이라면 소프트웨어 개발자 따위는 되지도 않았어!)

 

일단 개발 방법론에 있어서 오픈 소스 정책을 통한 공동 개발이라는 이점이 있습니다.  리눅스 운영체제와 같은 커다란 규모의 소프트웨어를 오픈 소스 정책을 통해서 수 많은 사람들이 공동으로 개발했다는 것은 정말 놀라운 일이 아닐 수 없습니다. 윈도우 운영체제를 위해 마이크로 소프트가 고용한 그 수많은 사람들을 생각해 봤을 때 말입니다. (그리고 나온게 윈도우 8). 오픈 소스 개발 방법론의 장점에 대해서는 다음의 글을 참조하시기 바랍니다: 성당과 시장 (한글 번역본) 

http://wiki.kldp.org/wiki.php/DocbookSgml/Cathedral-Bazaar-TRANS

 

그 밖에, 뭔가 싹수가 보이는 소프트웨어인데, 원제작자들이 게으르거나 실력이 부족하거나 더이상 그 프로그램에 흥미를 잃었거나 해서 꼭 필요한 기능이 부족한 경우에는 소스가 공개되어 있으면, 똘망똘망한 다른 개발자들이 그 부분을 보완할 수 있습니다. 사용자들의 입맛에 맞는 새로운 소프트웨어로 진화되는 것도 가능합니다.

 

그런데 가장 중요한 것은 사실 GPL 라이센스는 오픈 소스 프로그램이 개발자 커뮤니티에 의해서 끊임없이 유지, 보수되고 발전 되는 것을 담보해 주는 역할을 한다는데 큰 의의가 있습니다.

 

너드 프로그래머들이 아무리 호구 처럼 보인다고 하더라도, 자기들이 기껏 열심히 만들어서 공개한 프로그램을 나중에 누군가가 (조금 고쳐서) 자기 것인양 상업적으로 이용해서 돈을 벌게 되는 것을 좋아할 사람은 아무도 없습니다. GPL 프로그램에 공헌할 경우에는, 그런 염려가 아예 없기 때문에 개발자들이 오픈 소스 프로젝트에 진지하게 참여하게 됩니다.

 

그런 이유에서 많은 경우 GPL 프로그램들이 BSD 라이센스 프로그램보다 성능이 좋거나, 유지 보수가 조금 잘 되는 편입니다. (꼭 그런건 아닙니다.) BSD 라이센스로 푸는 경우에는 – 이를테면 대학원생이 졸업할 때 까지만 개발하던 소프트웨어 -- 언제든지 “나 손 털고 나간다.” 이런 뉘앙스가 있는 경우가 왕왕 있기 때문입니다. (물론 GPL로 풀 수도 있기도 한 거지만.. )

 

참고로 GPL 라이센스 운동의 창시자인 “리처드 스톨만”과 그의 “자유 프로그래밍 연맹”의 위상은 엄청납니다. 여기서 개발되어 공개된 GNU 계열의 운영체제와 개발 도구들(GCC등), 사용환경들은 지금의 모든 유닉스 류의 운영체제에서 실질적 표준과도 같이 사용되고 있습니다. 그리고 “리누스 토발즈”가 개발을 시작하여 공개한 리눅스 역시 GNU 운영체제의 변종으로 시작되었으며 GNU의 일부처럼 여겨지고 있습니다.


images?q=tbn:ANd9GcQUzl75Iid__Bh5aHY5MW3rRe7U2WtWzqyqv56RgHGkjGmm7No9oQ

오픈 소스 프로그램들의 새로운 요람이자 성지인 깃허브(github.com)의 로고 

고양이도 아닌것이 문어도 아닌것이 뭐야 이거 무서워.


 

(5) 사회 전체

 

오픈 소스 프로그램은 일반적인 사람들의 생각이상으로 사회 전체에 큰 영향을 미치고 있습니다.

 

제 생각에 가장 큰 실질적인 공헌은 (1)에서 이야기 한 것과 같이 전반적인 IT 서비스의 비용을 감소시키는 역할입니다. 가장 널리 이용되는 오픈소스 프로그램들이 (크롬에게 밀리는 firefox 정도를 제외하면) GCC나 리눅스와 같은 시스템 소프트웨어라는 걸 생각해보면 잘 알 수 있습니다.

 

오픈 소스 프로그램들은 소프트웨어의 발전이 특정 회사에 너무 종속적으로 되지 않도록 만들어 주는 효과도 있습니다. 물론 현재의 소프트웨어들은, 마이크로 소프트나, 애플, 구글 같은 회사들이 짜놓은 프레임워크 안에서 대부분의 어플리케이션이 개발되고 있는 것은 사실입니다. 그렇다곤 하지만 공개되어 있는 환경인 리눅스와 GNU 툴들이 있는 이상, 언제나 ‘다른 대안’은 존재하고 있기 때문에, 저런 회사들이 잘못된 결정을 내릴 경우에도 모든 사람이 그 결정에 따르지 않아도 됩니다.


경제적인 의미에 있어서도 사실은 많은 IT 기업들이 이런 오픈 소스 프로그램으로부터 큰 성공을 거둘 수 있었습니다. 구글의 안드로이드는 리눅스를 가져다가 만들었습니다. (그래서 안드로이드 역시 운영체제 커널은 GPL로 공개되어 있습니다. 그 위에서 돌아가는 어플리케이션들은 그렇지 않습니다.) 잡스의 귀환과 애플의 성공을 가져온OSX 역시 그 기반은 FreeBSD 라는 유닉스 계열 운영체제 (BSD 라이센스의 이름의 유래) 였습니다.

 

 

좀 더 철학적인 공헌을 생각해 본다면, 오픈 소스 프로그램은 인류의 지식을 보전하는 역할을 한다고도 생각해 볼 수 있겠습니다. 사람에게 수명이 있듯, 어떤 소프트웨어와 그 소프트웨어 회사에도 수명이 있습니다. 어느 순간 괜찮았던 아이디어와 소프트웨어들이 그 회사가 망해서 함께 사라지는 일도 그러므로 허다합니다. 비단 수명을 다한 회사 뿐 아니라, 학교에서 시작된 프로젝트, 혹은 똑똑한 개인의 쓸만한 아이디어가 구현된 소프트웨어가 공개됨으로서, 그 아이디어는 연속성을 가지고 길게 유지될 수 있으며, 보편적인 자산으로 남게 됩니다.

 

 

4. 정리 – 오픈 소스 프로그램과 상업용 프로그램

 

상업용 프로그램들과 오픈 소스 프로그램은 어떤 관계에 있을까요? 낭만적인 사람들은 상업용 프로그램들이 궁극적으로 모두 오픈 소스 프로그램으로 대체되기를 바랄지 모르겠지만, 그렇게 되지는 않을 것 같습니다.

 

일단 기본적으로 소프트웨어 개발자들에게 제일 많은 월급을 주는 곳은 소프트웨어 회사들입니다. 저 개인적으로는 소프트웨어의 가치 역시 존중받아야 하며, 제 값을 내고 구매해야 하는 것이라고 생각합니다. 구글 처럼 소프트웨어 판매 말고, 광고를 통해서 수익을 얻겠다는 접근방법도 있을 수 있겠습니다만, 프로그램을 실행할 때 마다 일정한 광고를 계속 봐야 한다고 생각해 보면 그것도 엄청난  고역입니다. (그런 ‘광고’의 대부분은 헐벗은 처자들이 등장하는 싸구려 광고니까요.)

 

특히나 일반 사용자를 대상으로 하는 프로그램들의 경우에는, 기업에서 개발하고 유지 보수하는 상용 소프트웨어만이 담당할 수 있는 영역이 있습니다. 자잘한 버그 수정, 미려한 디자인, 그래픽, 유저 인터페이스 이런 부분에 있어서는 자발적인 개발자들이 흥미를 끄는 부분이 아니기 때문에, 상용 소프트웨어의 강세가 분명합니다.

 

기업 사용자를 대상으로한 프로그램에 있어서도, 상용 프로그램들이 강한 부분이 있습니다. 특히 기업의 요구에 맞는 특수한 변경 (customize)이라던가 일정 기한내에 구현을 완료하는 부분, 지속적이고 예측 가능한 유지 보수와 같은 부분, 프로그램 에러나서 망했을 경우에 고소할 수 있는 책임 소재 대상 등등에 있어서도, 상용 소프트웨어와 기업의 기술지원이 반드시 필요합니다.

 

제가 보기에 오픈소스 프로그램의 강점과 의의는 건설에서의 사회간접자본 (항만, 도로, 에너지, 통신)과 같은 “공유 자원”의 개념이 아닐까 합니다. 리눅스와 GCC와 기타 라이브러리와 같은 오픈소스 프로그램들을 통해서, 어떤 개인이건 어떤 회사건 어느정도 최소한 기본적으로 동등한 규모의 정보처리능력을 가질수 있게 됩니다. 특정 국가나 회사에 지배되거나 예속됨 없이, 공정한 경쟁을 할 수 있는 최소한의 요건이 주어질 수 있으니까요.

 

또한 개발자들의 자유로운 사고를 독려하고, 새로운 아이디어를 실제로 구현하여, 커뮤니티의 힘으로 발전시켜 나가는 지식과 전문성의 보고(pool)의 역할도 마찬가지로 중요한 의의를 지닙니다. 벤처 회사만으로도 커버하기 힘들정도로, 많은 새로운 아이디어들이 먼저 오픈 소스 프로젝트를 통해 구현되고 발전되게 됩니다. 이 프로젝트들은 실제로 직접 상업화가 되거나, 아니면 다른 상용 소프트웨어의 발전에 간접적인 영향을 줄 수도 있습니다.

 

그렇기 때문에, 이런 오픈 소스 소프트웨어를 통해 이득을 본 회사들이나 (구글, 애플, …) 아니면 IT 산업 전반의 발전을 유도하고 싶어하는 국가의 정부는 이러한 오픈 소스 소프트웨어를 개발하는 프로젝트를 적극 후원하고 지원할 필요와 의무가 있다고 생각합니다. 또한 사회 전반적으로 오픈 소스 개발 경력에 대한 인정이라던가 GPL 라이센스의 존중 또한 필요합니다. 그리고 이런 투자는, 위에서 말한 오픈 소스 소프트웨어의 효용을 통해 그 성과가 충분히 사회에 되돌아 오지 않을까 합니다.


끝.



images?q=tbn:ANd9GcRHw6Ukipy36W9dmAtdaH5Lxe2wOF2vBlzgu7B0b0Y1tZQjjBqsvg

자발적으로 돈한푼 안받고 경부고속도로를 뚫어내는 너드들의 위엄


 

----------------------------------

(주1) 흔히들 기계어는 0,1,0,1의 이진수로 되어있고, 프로그래밍 언어는 사람이 쓰는 언어 (if, for)로 이루어져 있다고 생각하는데 그건 사실이 아닙니다. 실행 프로그래밍이건 소스 코드는 전자 정보로 저장되어 있을 때는 0,1의 이진수로 표현 (encode)되어 있는 것은 다 마찬가지입니다. 실행 프로그램을 사람이 이해하기 힘든 것은, 기계어는 말 그대로 기계를 제어하기 위한 것이기 때문에, 너무 낮은 레벨로 프로그램이 쓰여져 있기 때문입니다.

 

비유를 들어보면, 프로그래밍 언어로는


   “식탁에 가서 물을 가져와라.”


라고 말을 할 수 있다면, 기계어 에서는,


“오른쪽 다리를 30각도로 들어올린다. 오른쪽 다리를 30센치미터 앞으로 뻗어낸다. 오른쪽 다리를 땅에 닿는다. 왼쪽 다리를 30도 각도로 들어올린다. 왼쪽 다리를 30 센치미터 앞으로 뻗어낸다. 왼쪽 다리를 땅에 닿는다. 위의 작업을 25번 반복한다. 멈춘다. 오른쪽 팔을 15센치 앞으로 뻗는다 ….”

 

이런식으로 기계의 움직임을 일일히 제어해 줘야 한다는 말입니다. 그렇기 때문에 기계어로 쓰여진 프로그램이 원래 무슨 일을 하도록 만들어진 프로그램인지, 기능을 조금 바꾸려면 어떻게 해야하는지 알아내기란 극히 어렵습니다.  (참고로 생물학자들이 인간이나, 동물의 DNA를 분석해서 그 기능을 찾아내는 일이 바로 이런 일이라고 할 수 있습니다.)


 

(주2) GPL 보다 조금 너그러운 라이센스인 LGPL (Lesser GPL)이라는 라이센스도 있습니다. 이 라이센스는 A라는 공개 프로그램과 B라는 본인의 프로그램을 단순히 합치기만 할 경우 (전문 용어로 링크linking 라고 합니다)에는 B에 대한 소스를 공개할 필요가 없다는 라이센스 입니다. 다만 A를 조금 바꿔서 A’를 만들 경우 에는 법적인 문제가 있을 수 있습니다. (보통은 A’ 부분만 LGPL로 공개를 하면 됩니다만, 그 정도 및 B와의 연관 정도에 따라라 법적인 문제가 있을 수 있는 것도 같습니다.)