오픈 소스의 경계 설정 문제
우연히 오픈 소스를 자처하는 한 프로젝트의 라이센스 설정 이슈를 보고, 오래 전부터 해온 생각이 다시 떠올라 이참에 글로 쓴다.
오픈 소스는 무엇이고, 또 무엇이 아닌가? 경계 설정 문제는 언제나 ‘무엇인지’와 무엇이 아닌지
양쪽이 동시에 중요하지만, 대개 후자는 덜 다뤄지기 때문에 여러 개념들은 그 경계가 오해되곤 한다. 과학도 그렇고, 오픈 소스도 그렇다.
내가 보기에는 (최소한 우리나라의 경우) 많은 개발자들이 오픈 소스에 대해 몇가지 명백한 오해를 하고 있으며, 이는 개발자의 기량과 무관하게 나타나는 데다, 심지어 스스로 오픈 소스 전문가라고 자처하는 사람들 중에서도 오해가 흔하다. 어떤 오해가 있을까?
제로보드 4는 소스 코드 형태로 배포되는 무료 소프트웨어였다. 하지만 제로보드 4는 오픈 소스가 아니었다. 반면 비슷한 다른 소프트웨어인 Drupal이나 WordPress는 오픈 소스다. 대체 둘 사이에는 어떤 차이가 있는가?
GNU의 자유 소프트웨어란 무엇인가?
라는 글은 다음과 같은 내용을 담고 있다 (강조는 내가 했음):
자유 소프트웨어는 사용자가 소프트웨어를 실행시키거나 이를 복제 및 배포할 수 있는 자유와 함께 소스 코드에 대한 접근을 통해서 이를 학습하고 수정, 개선시킬 수 있는 원천적인 자유까지를 모두 포괄하는 것입니다.따라서, 간략히 말하면 다음과 같은 4가지 종류의 자유를 내포한다고 할 수 있습니다.
- 프로그램을 어떠한 목적을 위해서도 실행할 수 있는 자유 (자유 0).
- 프로그램의 작동 원리를 연구하고 이를 자신의 필요에 맞게 변경시킬 수 있는 자유 (자유 1). 이러한 자유를 위해서는 소스 코드에 대한 접근이 선행되어야 합니다.
- 이웃을 돕기 위해서 프로그램을 복제하고 배포할 수 있는 자유 (자유 2).
- 프로그램을 향상시키고 이를 공동체 전체의 이익을 위해서 다시 환원시킬 수 있는 자유 (자유 3). 이러한 자유를 위해서는 소스 코드에 대한 접근이 선행되어야 합니다.
사실 내가 강조한 부분들은 한국에서 오픈 소스에 대해 이야기할 때 자주 무시되는 것들이다. 나는 몇년 전부터, 개발자들조차 오픈 소스가 무엇인지 말해보라고 하면 다음과 같은 오해가 포함된 정의를 내놓는 것을 경험해왔다:
소스 코드를 공개한 무료 소프트웨어
확실히, 위와 같은 널리 오해되는 정의에 따르면 제로보드 4는 오픈 소스 소프트웨어다. 하지만 오픈 소스는 실제로 그러한 것이 아니며, 위 정의에는 크게 두 가지 부분이 잘못되었다.
- 소스 코드 공개
- 무료
오픈 소스는 소프트웨어 개발에 있어서 어떤 의미를 지닐까? 바로 남이 만든 것도 내가 고칠 수 있고, 내가 만든 것도 남이 고칠 수 있다는 데에 있다. 즉, 오픈 소스 소프트웨어는 전적으로 누구나 고칠 수 있느냐가 중요하다.
여기서 ‘고칠 수 있다’는 말에는 기술적인 부분과 법/권리적인 뜻이 함께 들어있다.
소스 코드에 대한 접근은 소프트웨어를 고치려면 현실적으로 필요하기 때문에 생겨난 것이다. 소스 코드 없이도 소프트웨어를 쉽게 고칠 수 있다면 오픈 소스는 소스 코드에 대해서는 어떠한 말도 하지 않았을 것이다. (연습 문제: 소스 코드긴 소스 코드인데 난독화된 소스 코드는 오픈 소스에 부합할까?) 이것이 ‘고칠 수 있다’의 기술적인 부분이다. 이것이 인용한 글에서 말하는 자유 1이다.
그렇다면 법/권리적인 부분은 무엇일까? 기술적으로 소프트웨어를 쉽게 고칠 수 있다고 해도, 저작권자가 저작물을 고치는 것을 허락해야 한다. 이것이 바로 오픈 소스 라이센스들(GPL, MIT 라이센스, BSD 라이센스, 아파치 라이센스…)이 생겨난 동기다.
고칠 수 있기만 하면 될까? 그렇지 않다. 오픈 소스에서 말하는 ‘고칠 수 있다’는 말은 ‘고쳐서 다시 퍼뜨릴 수 있다’는 얘기이다. 남이 만든 소프트웨어를 내가 고쳐서, 원한다면 다시 배포할 수 있어야 한다. 내가 만든 소프트웨어도 마찬가지로, 남이 고쳐서, 원한다면 남의 손으로도 배포할 수 있어야 한다. 이 부분이 인용한 글에서 말하는 자유 3이다.
제로보드 4는 소스 코드에 기술적으로는 접근할 수 있었지만, 라이센스는 명백하게 수정 후 재배포를 금지하고 있었다. 이래서는 오픈 소스 소프트웨어라고 볼 수 없다.
흔히 오해되는 다른 한 가지는, 오픈 소스는 무료여야 한다는 것이다. 하지만 오픈 소스는 위에서 인용한 바와 같이 어떠한 목적을 위해서도
사용할 수 있어야 하며, 이는 상업적으로도 사용 가능해야 한다는 점을 뜻한다. 이 부분이 앞서 인용한 내용에서 말하는 자유 0에 해당한다. 같은 글에서는 이런 내용도 나온다.
GNU 소프트웨어는 유료로 구입할 수도 있고 무료로 얻을 수도 있습니다. 그러나 어떠한 방법으로 소프트웨어를 구했던 간에 여러분은 해당 프로그램에 대한 복제와 개작의 자유를 항상 갖게 됩니다.
예를 들어, 내가 어떤 소프트웨어를 만들어서 GPLv3 라이센스를 적용한 뒤 한 카피에 만원씩 해서 팔더라도, 실제로 돈을 지불한 고객에게 소스 코드와 그것을 수정해서 재배포할 권리만 허락한다면 오픈 소스 소프트웨어라고 할 수 있다.
오픈 소스가 무엇인지에 대한 명확한 정의는 OSI 웹사이트에서 볼 수 있다. 그러나 그 정의를 읽고서 소프트웨어가 그에 해당하는지 엄밀히 따지는 것은 쉽지 않다. 법적 효과에 대한 부분을 따져봐야 하기 때문에 법 언어를 이해하지 못하는 나를 포함한 대부분 사람들에게는 엄밀한 판단은 힘들기 때문이다. 하지만 어떤 소프트웨어가 오픈 소스가 맞는지 확인하는 쉽고 명확한 방법도 존재한다. 바로, 오픈 소스 라이센스를 따르는 소프트웨어인지를 보는 것이다.
물론, 어떤 라이센스가 오픈 소스 라이센스인지 아닌지를 따져보는 것은 앞서 든 것과 똑같은 이유로 여전히 대부분 사람들에게 어려운 일이다. 이를 위해 OSI에서는 어떤 라이센스가 실제로 오픈 소스 라이센스라고 볼 수 있는지를 검증해준다.
현실적으로는, 그러한 검증 절차는 시간과 비용이 드는 일이다. 그러한 이유로 실제로 오픈 소스 세상에서 대부분의 프로그래머들에게 널리 사용되는, 소프트웨어의 오픈 소스 여부를 알아내는 질문은 다음과 같다:
OSI에서 인증한 오픈 소스 라이센스들 가운데 하나로 배포되고 있는가?
반대로도 활용할 수 있다. 내가 만든 소프트웨어를 오픈 소스로 공개하고 싶으면 어떻게 해야할까? OSI에서 인증한 오픈 소스 라이센스 중에서 하나를 택해서 배포하면 된다. 현실적으로는 GPL, MIT 라이센스, BSD 라이센스, 아파치 라이센스 등에서 하나를 고르면 된다.