(NAMGUNGEUN)

오픈소스 소프트웨어의 철학과 정의

한신학 han theology 2018. 1. 19. 14:11

오픈소스 소프트웨어 라이선스

오픈소스 소프트웨어의 철학과 정의

소프트웨어 작동 원리를 설명하고, 자유 소프트웨어를 탄생시킨 산업적 배경을 살펴본다. 이어 리처드 스톨먼이 새로운 소프트웨어 운동과 철학을 주창하며 GPL을 창안한 과정을 알아본다. 자유 소프트웨어와 오픈소스 소프트웨어는 개념과 철학이 서로 다르지만 두 가지를 아우르는 FOSS 같은 용어가 점차 보편화되고 있다. 스톨먼이 시작한 GNU 프로젝트와 리누스 토르발스의 리눅스 커널이 결합함으로써 GPL과 리눅스가 함께 확산되었다.

소프트웨어 작동 원리

오픈소스 라이선스와 컴플라이언스를 이해하기 위해서는 먼저 소프트웨어의 기본 원리를 알아 둘 필요가 있다. 컴퓨터에서 정보는 이진 형태로 저장된다. 이진 형태의 코드를 목적 코드라 하고, 이진 형태의 실행 파일을 바이너리(binary) 파일이라고 한다. 이때 바이너리는 0과 1의 두 숫자로만 이루어진 이진법을 의미한다.

컴파일(compile)은 소스 코드를 목적 코드로 옮기는 작업을 의미한다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태인 데 비해 소스 코드는 사람이 읽을 수 있는 언어로 이루어진다. 컴파일을 하는 이유는 고수준 언어로 된 소스 코드로부터 컴퓨터가 실행할 수 있는 저수준 기계어(어셈블리어)로 된 프로그램을 만들기 위해서다. 컴파일러는 다음 순서로 소스 코드를 기계어 목적 코드로 번역한다.

① 구문 분석: 소스 코드 파일을 읽어 연산자, 괄호, 식별자 등 개별 문법 요소로 나누어 프로그래밍 언어로 된 소스 코드의 구문 트리 생성

② 최적화: 추상 구문 트리를 분석, 최적화 작업 수행

③ 코드 생성: 최적화된 구문 트리에서 목적 코드 생성

오픈소스 소프트웨어는 모든 사람에게 소스가 공개된 소프트웨어를 말한다. 소프트웨어 프로그램은 이진법으로 구성된 목적 코드 형태에서는 수정, 변경할 수 없고 오로지 소스 코드 형태에서만 가능하다. 따라서 오픈소스 공급망의 하위 단계 사용자들에게 소프트웨어의 수정, 변경 자유를 보장하기 위해서는 반드시 소스 코드를 공개해야 한다. 물론 상업용 전유적 소프트웨어는 그 소스 코드를 공개하지 않는 것이 원칙이다. 프로그램의 알고리즘이 노출되고, 프로그래밍 노하우나 영업 비밀 등 기업의 경쟁력을 결정하는 사항들이 공개되기 때문이다.

서로 다른 컴포넌트들이 결합하는 방식에는 정적 링킹과 동적 링킹이 있다. 전자는 프로그램을 설치할 때에 하나의 실행 파일 안에 서로 결합되는 모든 컴포넌트를 포함시키는 방식이다. 후자는 결합 대상 라이브러리 등 컴포넌트를 컴퓨터의 저장 공간인 하드디스크에 따로 저장해 두었다가 프로그램 실행 시에 그를 메모리로 불러내어 같이 작동시키는 방식이다.

자유 소프트웨어, 오픈소스 소프트웨어의 정의

처음으로 자유 소프트웨어의 개념을 정립한 사람은 리처드 스톨먼(Richard Stallman)이다. 1984년 그는 자유소프트웨어재단(FSFFree Software Foundation)을 설립하고 재단을 통해 자유소프트웨어의 4대 자유를 발표했다.

첫째, 실행의 자유는 어떤 사람 또는 조직이 원하는 어떠한 목적을 위해서든 자유 소프트웨어를 실행할 수 있음을 의미한다. 사용자나 목적에 차별이 있어서는 안 된다.

둘째, 연구와 수정의 자유는 누구든지 해당 소프트웨어의 작동 원리를 파악하고 연구할 수 있어야 하고, 이를 위해 인간이 해독할 수 있는 소스 코드의 공개와 그에 대한 접근이 보장되어야 한다. 하드웨어에 탑재된 소프트웨어 프로그램이 수정되면 그 수정된 프로그램은 그 하드웨어에서 작동이 되지 않도록 조치하는 것, 즉 티보이제이션(tivoization)은 이 자유를 침해하는 것이다.

셋째, 재배포의 자유는 자신의 이웃을 도울 수 있도록 소프트웨어를 재배포할 자유를 말한다. 수령한 소프트웨어의 수정 버전 또는 수정하지 않은 버전의 소스 코드나 바이너리 코드는 실행 파일 모두를 재배포할 수 있어야 하는 것이다.

넷째, 수정 프로그램 배포의 자유는 수정, 변경 사항을 자유롭게 배포해 커뮤니티 전체가 그로 인한 이익을 공유할 기회를 제공할 수 있다는 것을 의미한다. 오픈소스 생태계에 중요한 의미를 가진다.

오픈소스 소프트웨어(OSSOpen Source Software)는 1998년 에릭 레이먼드(Eric Raymond)와 브루스 페런스(BrucePerens)가 추축이 되어 설립한 오픈소스이니셔티브(OSIOpen Source Initiative)에 의해 시작된 오픈소스 운동에 따라 등장한 개념이다. 자유소프트웨어재단은 직접 소프트웨어 라이선스를 작성하는 반면 OSI는 자체적으로 라이선스를 작성하지 않고, 이미 시장에서 사용되는 라이선스가 일정한 요건을 충족할 경우 오픈소스 라이선스로 인증하는 방식을 취한다. 단순한 소스 코드의 공개 외에 OSI가 정의한 오픈소스 라이선스의 열 가지 요건은 다음과 같다.

① 자유 재배포: 특정 프로그램을 여러 다른 프로그램을 포함하는 집합 소프트웨어 내의 한 컴포넌트로 팔거나 제공하지 못하도록 제한해서는 안 되고 그에 사용료를 부과해서 안 된다. 그러나 GPL(General Public License)과 아파치(Apache)같이 서로 충돌하는 오픈소스 라이선스의 프로그램들이 하나의 저작물에 포함될 수 없는 만큼 실제 재배포가 제한될 수 있다.

② 소스 코드의 배포: 컴파일된 목적 코드뿐만 아니라 소스 코드의 배포를 허용해야 한다. 만약 소스 코드를 제외한 상태로 배포하려면 합리적 복제 비용으로 소스 코드를 취득할 수 있는 널리 알려진 수단, 즉 인터넷을 통해 무료로 다운로드받을 수 있게 해야 한다.

③ 2차적 저작물의 허용: 원저작물의 수정이나 2차적 프로그램의 창작을 허용해야 하며 이러한 프로그램들을 원프로그램에 적용되던 라이선스와 동일한 조건으로 배포하는 것을 허용해야 한다.

④ 저작자의 소스 코드 통합: 개발 시에 프로그램을 수정할 목적으로 원소스 코드와 함께 패치파일의 배포를 허락하는 경우에 한해서만, 수정된 형태의 소스 코드 배포를 제한할 수 있다. 변경된 소스 코드로 설치된 소프트웨어의 배포를 명시적으로 허용해야 한다. 이때 라이선스는 원프로그램과 다른 이름이나 버전 번호를 부여하도록 요구해야 한다. 여러 개발자가 동시에 작업을 하기 때문에 각자가 기여한 소스 코드의 경중과 중요성을 분별해 일정한 품질 관리와 버전 제어가 필요하다.

⑤ 개인이나 단체에 대한 차별 금지: 라이선스는 모든 개인과 단체를 차별해서는 안 되고, 특정 그룹 사람들이나 인종에게만 사용 허용 또는 금지해서는 안 된다. GPL상 배포의 지역적 제한을 둘 수 있는데, 이것이 본 요건에 위배되는지는 논란이 있다. 특정국의 법상 특정 소프트웨어의 수출입에 제한이 있을 수 있지만 이를 라이선스에 포함시킬 수 없다.

⑥ 사용 분야 제한 금지: 특정 분야, 예를 들면 영리사업이나 유전 연구에 사용됨을 제한할 수 없다.

⑦ 라이선스의 배포: 프로그램에 부착된 권리는 프로그램을 재배포 받은 모든 자들이 비밀 유지 약정 같은 추가 라이선스를 체결하지 않아도 그들에게 적용된다.

⑧ 특정 소프트웨어에 한정한 라이선스 금지: 프로그램에 부착된 권리가 당해 프로그램이 특정 소프트웨어 배포 버전의 부분이 될 경우에만 인정되는 라이선스여서는 안 된다. 특정 소프트웨어에서 추출된 부분 프로그램 수령자에게 동일 권리가 부여되어야 한다.

⑨ 다른 소프트웨어에 대한 제한 금지: 오픈소스 소프트웨어와 함께 배포되는 다른 소프트웨어에 대한 제한을 설정해서는 안 된다. 다양한 라이선스, 다른 오픈 라이선스 또는 전유적 소프트웨어와의 결합을 가능하게 한다. GPL과 결합되는 프로그램에 GPL의 적용이 확대되는 것은 결합으로 하나의 소프트웨어를 생성할 때에 한한다.

⑩ 라이선스의 기술적 중립성: 라이선스 규정은 특정 기술 또는 인터페이스 형태만에 기초해 규정하지 않고, 다양한 기술을 도입할 수 있도록 해야 한다. 예로써 클릭랩(click-wrap)을 의무화해서는 안 된다.

오픈소스 소프트웨어 관련 용어

1998년 오픈소스 소프트웨어라는 용어가 나오자마자 프리라는 용어가 합해져서 ‘프리 오픈소스 소프트웨어(FOSSFreeOpen Source Software)’라는 표현이 등장했다. 프리(free)나 오픈(open)의 성립 배경이나 철학이 달라 어느 한쪽으로 치우치는 것을 탈피한다는 취지에서 이 통칭 용어가 널리 사용되고 있다.

자유 소프트웨어는 사용자의 자유 보장을 절대적으로 강조한다. 반면 오픈소스 소프트웨어는 그러한 자유를 포함해 사용자 그룹에 대한 차별 금지, 사용 분야의 차별 금지, 기술적 중립성 등을 정하고 있어 산업적이고 실질적으로 활용하는 데 필요한 요건들을 추가하고 있다.

한국에서도 여러 용어들이 혼용되고 있다. 오픈소스 소프트웨어(또는 OSS), 공개 소프트웨어, 오픈소스라는 용어들이 대체로 많이 쓰이며, 자유 소프트웨어, 프리 오픈소스 소프트웨어 또는 그 약자인 FOSS라는 용어는 국제 관행과 달리 거의 쓰이지 않는다. 프리라는 용어는 철학적, 이념적, 사회운동적 면모가 강하다는 인식도 일부 작용한 것으로 보인다. 공개 소프트웨어라는 용어는 누구에게나 공개해야 한다는 의미를 전달하는 데는 효과적이나 정작 공개하고 배포해야 할 대상인 소스 코드(source code)를 누락하고 있어 전체적인 의미를 전달하는 데는 미약한 점이 있다.

FOSS는 국제적으로 널리 받아들여지고 있으며, 중립적이고 포괄적인 관점을 반영한다는 장점이 있다. 물론 용어에 따라 그 법적 효력이 달라지는 것은 아니다. 국내에서는 오픈소스 소프트웨어 또는 OSS라는 용어를 쓰는 것이 적절하다고 생각한다.

GPL 탄생과 리눅스

퍼스널 컴퓨터가 나오기 전인 1950년대부터 1970년대까지, 특히 소프트웨어 개발의 중심이었던 미국에서 컴퓨터 사용자들 사이에 소프트웨어의 소스 코드가 공유되고 무료로 제공되는 것이 보통이었다. 컴퓨터 제작자들은 소프트웨어 개발을 촉진하기 위해 자신이 개발한 소스 코드를 다른 소프트웨어 개발자들에게 널리 전파하려고 노력했기 때문이다.

그러던 중 1969년 미국 법무부는 대표적인 컴퓨터 제작사인 IBM을 상대로 하드웨어와 소프트웨어 서비스를 번들로 같이 판매하는 방식이 독점적 지위를 확보한다는 이유로 반독점 소송을 제기했고 그 소송을 계기로 소프트웨어의 상용 판매가 급증하게 되었다. 그 후 소프트웨어가 분리 판매됨으로써 소프트웨어 산업은 컴퓨터 하드웨어 제작 못지않게 주요한 산업으로 발전했고, 소프트웨어의 소스 코드는 기업의 중요한 영업 비밀이 되어 비공개가 원칙이 되었다.

1980년 미국에서는 저작권법 개정을 통해 소프트웨어에도 저작권법이 적용되기 시작했고 소프트웨어 개발자들은 소프트웨어의 소스 코드는 제외하고 바이너리 코드만 제공해 상업용으로 판매된 소프트웨어의 수정과 재배포를 방지하는 기술적 방법을 완성해 갔다.

하드웨어와 소프트웨어의 분리 판매를 계기로 소프트웨어의 상용 판매 급증, 소스 코드 비공개 원칙과 소프트웨어에 대한 저작권법의 보호에 대한 반발로 자유 소프트웨어 운동이 일어나게 되었다. 스톨먼은 소프트웨어 사용자들이 친구를 위해 소스 코드를 복사하거나 소스 코드를 수정하는 행위가 왜 금지되어야 하는가라는 근본적 질문에서 출발해 1983년 당시의 대표적 전유적 소프트웨어인 유닉스(UNIX) 운영체제의 무료 공개 버전을 만들기 위한 GNU(GNU is Not UNIX) 프로젝트를 선언했다.

1985년 자유 소프트웨어의 철학을 담은 ‘GNU선언문(GNU Manifesto)’을 간행하고, 자유소프트웨어재단을 설립했다. 스톨먼이 최초로 개발한 이맥스(Emacs)에 기반을 두어 제임스 고슬링(James Gosling)이 고슬링이맥스를 개발하고, 그에 기초해 다시 스톨먼이 GNU이맥스를 개발했다. 이후 스톨먼은 고슬링이맥스의 인수 기업으로부터 GNU이맥스의 사용 중지를 요청받았고, 이 과정에서 스톨먼은 사용자의 자유를 보장하는 자유 소프트웨어의 정신을 담아 카피레프트 라이선스인 GNU GPL을 작성하게 된 것이다.

GNU선언문은 27년 전에 발표된 것이지만 오늘날의 소프트웨어 엔지니어들이 가지는 고민을 잘 반영한다. 즉, 소프트웨어가 무료로 공개된다면 개발자들은 직장을 잃는 것이 아닌가, 기업은 경쟁력이 없어지는 것이 아닌가, 무료 소프트웨어를 신뢰할 수 있는가 등의 질문이다. 이러한 질문은 지금도 제기되지만, GNU선언문을 발표할 당시 스톨먼이 예언한 것처럼 오픈소스 소프트웨어는 날이 갈수록 융성해 더 많은 개발자가 참여하고 있고, 많은 대기업들도 적극적으로 오픈소스 운동에 참여하고 있다. GPL 1.0은 1989년에 공표되고 1991년에 부분적인 개정을 거친 GPL 2.0이 공표되었으며 2006년에 GPL 3.0이 공표되었다.

1990년까지 GNU 프로젝트에 따라 시작된 GNU 운영체제에는 유닉스 배포판을 대체할 핵심 라이브러리와 유틸리티가 있었으나 운영체제를 구동하는 데 가장 중요한 구성 요소인 커널이 빠져 있었다. 1991년, 리누스 토르발스(LinusTorvalds)는 리눅스 커널 버전 0.11의 소스 코드를 공개했고 리눅스 커널이 GNU 프로젝트와 통합되어 완전한 공개 운영체제인 GNU/리눅스가 탄생하게 되었다. 이로부터 리눅스 커널은 전 세계의 많은 개발자들과 함께 GNU 프로젝트에서 개발되었던 많은 프로그램 및 유틸리티와 결합하게 되었고, GPL이 적용되는 매우 안정적인 운영체제로 빠른 발전을 하게 되었다.

1997년 레이먼드는 “성당과 시장(the Cathedral and the Bazaar)”이라는 글을 발표해, 오픈소스식 개발 방식이 왜 효율적이고 효과적인지 그리고 토르발스가 고안해 낸 개발 방식이 어떻게 성공을 거둘 수 있었는지 설명했다. 두 가지 방식 중 성당 모델은 출시 때에만 소스 코드를 공개하고 그 후에는 제한된 개발자들만 소스 코드에 접근할 수 있는 방식인 데 비해, 시장 모델은 소스 코드가 인터넷으로 일반에 공개된 상태로 개발되는 방식으로 비교 설명되었다.

리누스법칙(Linus Law)이라고 이름 붙인 “보는 눈만 많다면 어떤 버그라도 쉽게 잡을 수 있다(Given enough eyeballs,all bugs are shallow)”는 것이 시장 모델의 장점을 집약한 표현이다. 이는 많은 사람이 테스트하고 훑어보고 실험해 볼 수 있도록 코드가 공개되어 있으면 버그는 빨리 잡힐 것이란 뜻이다. 이에 대해 성당 모델에서는 소스 코드를 제한된 범위의 개발자들만 볼 수 있으므로 버그를 잡는 데에 엄청난 시간과 노력이 든다고 주장했다.

이 글로 인해 GNU이맥스를 포함한 많은 오픈소스와 자유 소프트웨어 프로젝트들이 시장 방식을 사용하게 되었다. ‘시장과 성당’이라는 구문은 종종 상용 소프트웨어와 오픈소스 소프트웨어를 비유하는 데에도 쓰인다. 위키백과는 시장형 프로젝트이고, 브리태니커백과사전은 성당형 프로젝트에 비유할 수 있다. 그리고 그 글은 넷스케이프(Netscape)에 영감을 주어 파이어폭스(Firefox)라는 오픈소스 웹 브라우저가 탄생하고 OSI가 설립되는 계기로도 작용했다.

출처

제공처 정보

오픈소스 소프트웨어 라이선스 이미지

『오픈소스 소프트웨어 라이선스』는 오픈소스 소프트웨어를 탄생시킨 철학과 정의를 시작으로 오픈소스 라이선스의 개념을 소개하고 이해를 돕는다. 대표 오픈소스 라이선스의 요약 해설, 오픈소스를... 자세히보기