2008년 4월 26일 토요일

KMPlayer - 정말 GPL 위반 맞을까?

먼저 하고 싶은 말은, IANAL (I Am Not A Lawyer). 지금 하는 말은 내 지식, 경험, 공개된 문서에 기반한 판단일 뿐 것일 뿐 법률적인 전문적 판단은 아니다. 하지만 사실에 기반해서 말하는 건 자신할 수 있다.

GPL 위반 논란이 있을 때마다 사람들은 쉽게 초점을 벗어나곤 한다. GPL을 위반했느냐 아니냐는 사실 여부를 판단하는 문제이다. 이 문제는 GPL이 허용하는 것과 허용하지 않는 것이 무엇인데, 당사자와 해당 소프트웨어가 어떻게 했는지 사실 관계를 확인하면 되는 것이다. 이 소프트웨어를 좋아하든 싫어하든, 실수로 그랬든 악의적으로 그랬든, GPL을 좋아하든 싫어하든, 개발자들이 어떤 노력을 했든, 결과적으로 공익에 좋은 영향을 미쳤든 악영향을 미쳤든 간에 라이센스 위반 여부와는 상관이 없다. 라이센스라고 해도 애매한 부분은 항상 있지만, 애매한 부분 역시 라이센스의 내용과 사실 관계에 의해서 판단할 문제이지 좋아하느냐 싫어하느냐 등 외적인 문제로 판단할 문제가 아니다.

1. MPC 코드 사용: 모르겠다

KMPlayer의 GPL 위반에 대해 가장 많이 논란이 된 부분은 MPC의 코드를 베껴오지 않았냐는 논란이었다.

이 논란에서는 좀 재미있는 점이, KMPlayer 개발자가 몹시 위험한 사실을 시인했다. "코드를 참고해서 델파이 코드를 작성했다"라고 말한 것이다. C++ 코드를 보고 델파이 코드를 작성했다면 그게 개작일까, 아닐까? 답은 그럴 수도 있고 아닐 수도 있다. 그때그때 다르고 뭐라고 말할 수 없다. 사용하는 프로그래밍 언어가 무엇인지는 중요하지 않다. 프로그래밍 언어가 다르다는 주장은, 소스 코드를 그대로 복사/붙여넣기하지는 않았다는 정도 이상의 근거가 되지 못한다.

논란의 구실을 제공하기 때문에 보통 소프트웨어를 개발할 때는 애초에 이런 애매한 상황을 만들지 않으려고 노력한다. 라이센스 논란이 있는 소프트웨어를 다시 작성할 경우에는, 라이센스 문제가 있는 어떤 코드를 한번 읽었다면 그 사람은 같은 기능을 하는 코드를 작성하지 못하게 한다. 리버스 엔지니어링이 필요한 소프트웨어의 경우 리버스 엔지니어링을 하면 그 결과를 말로 설명하는 문서로 만들고 그 문서만 보고 다른 사람이 구현한다.


2. GPL/LGPL 바이너리의 포함: 위반

이건 너무 명백하다. 위반이다.

kmp.zip에 GPL 및 LGPL 소프트웨어를 함께 배포하고 있으며 이들 소프트웨어에 대한 저작권 고지가 빠져 있다. (앞의 MPC 코드 논란 이후 GPL 전문은 포함하고 있다.) 그리고 소스코드 배포방법중 하나도 지키지 않고 있다.

맨 위 디렉토리에 눈에 보이는 것만 열거해도 GNU iconv - LGPL, xvid - GPL, liba52 - GPL, libdts - GPL, libfaac - GPL, libfaad - GPL, libmad - GPL, libmpeg2 - GPL이다. BSD-like 라이센스로 배포되는 theora/vorbis 라이브러리 역시 copyright notice는 유지해야 하는데 빠져 있다.

KMPlayer가 GPL 위반이 아니라고 말했던 어떤 글에서는, "KMP에 사용되는 외부 라이브러리는 소스 코드에 수정을 가하거나 변경하지 않았고, CVS 버전의 소스를 컴파일하거나 바이너리 버전을 가져다 사용했다"라고 했지만, GPL 소프트웨어를 수정했든 그대로 가져다가 사용했든 GPL version 2의 section 3에 제시된 방법으로 소스코드를 제공해야 한다는 사실은 변함이 없다.


3. 링크 호환성 문제: 아마도 위반

위의 라이브러리들이 GPL이라면 이것들과 링크한 건 괜찮을까? GPL 버전 2 section 2에 보면,

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  ...

KMPlayer는 이들 DLL이 없이도 독립적으로 동작하므로 "separate and independent"라고 주장할 수도 있지 않을까? 역시 앞의 글을 보면 "KMP는 외부 라이브러리에 종속성을 가지지 않는다"라면서,  DLL 없이 실행 파일인 KMPlayer.exe 파일만을 떼어놓고 실행해도 동작한다고 말한다. DLL은 부가 기능일 뿐이다.

하지만 이 DLL이 어느정도 종속되느냐, 부가기능이냐 핵심기능이냐의 문제도 링크가 호환되느냐의 여부와는 별로 관계가 없다. 이 KMPlayer.exe 파일은 이들 GPL 라이브러리의 DLL과 링크가 되어 있고 DLL의 함수들을 레퍼런스하고 있다. KMPlayer가 이 라이브러리들을 사용하는 정확한 메커니즘은 알 수 없지만 FSF의 GPL FAQ에 따르면, 단순히 플러그인이라도 링크한 그 라이센스가 GPL이면 문제가 된다. 논란의 여지는 있지만. 적어도 지금까지의 사례를 보면 (NextStep의 Objective C 사건 등) 링크한 소프트웨어는 개작으로 생각하고 GPL을 따르는 쪽으로 진행되어 왔다. 그래서 위반이라고 보인다.


결론: 위반 맞다

부디 GPL 소프트웨어를 개발에 사용하는 사람들은 라이센스 전문과 GPL FAQ를 읽어 보고 사용했으면 좋겠다.

애매한 부분을 빼면 위반이 악의적이거나 고의적이라고 보이지는 않는다. 하지만 앞의 2번째 사안인 GPL/LGPL 바이너리의 포함처럼 명백한 위반이 몇년간 방치된 일은 이해하기 힘들다. KMPlayer가 판도라에 매각된 후에 개발자의 글에는, "...우리나라에서는 아직 오픈 소스에 대해서 사람들의 의식이 장착되지 않았습니다"라는 말이 있다. 의식이 장착되지 않다니, 대체 누구부터 의식이 장착되지 않은 것인가?

이제 KMPlayer도 기업이 만들게 되었으니 문제점을 명백하게 짚고 넘어가길 바란다.

2008년 4월 18일 금요일

GPL 버전2 3항(소스코드 공개 방법)의 불편함

GPL 버전2는 1991년에 개정됐습니다. 잠깐 기억을 되돌려봐도 당시에 인터넷이라는 건 미국 정부기관, 연구소, 대학들에서만 이용할 수 있는 장치였지 보편적인 장치가 아니었습니다. (국내에는 연결된 기관이 KAIST정도밖에 없었겠죠.) 가장 보편적으로 소스코드를 전달할 수 있는 매체는 물리적인 저장장치를 우편으로 전달하는 것이었습니다.

GPL 버전2의 3항은 그래서 이런 모습이 되어 버렸습니다. 3항은 a), b), c) 중 한 가지 방법으로 오브젝트에 대한 소스코드를 전달하도록 되어 있는데 a)는 함께 전달하는 것이고, b)는 3년간 소스코드를 물리적으로 전달한다고 보장하는 문서를 제공하는 것, c)는 비상업적인 용도에 한해 앞의 b)의 내용을 그대로 forward할 수 있다는 것입니다. 오브젝트 코드를 배포하지 않으면 아주 간단해 지지만, 배포한다면 소스코드를 같이 전달하거나 3년간 물리적인 소스코드 전달을 보장해야 합니다.

이 점은 오브젝트 코드를 배포해야 하는 업체들에게는 곤혹스러운데요. 제품과 함께 CD같은 미디어를 배포한다면 끼워넣으면 되지만, 제품에 따로 소스코드를 넣을 만한 여지가 없으면 물리적인 소스코드 전달을 보장해야 하는 번거로움이 있습니다. (물론 일반 리눅스 바이너리 CD를 판매하는 업체들도, 공식적으로 연락을 하고 우편요금을 지불하면 실제로 소스코드가 담긴 CD를 보내준다고 합니다. 물론 인터넷으로 받으면 되기 때문에 이게 되는지 일부러 실험하고 싶은 사람이 아니라면 일부러 요청할 필요가 없지만요.)

GPL 버전3은 이 부분이 보강되어 있습니다. 오브젝트와 같은 자격으로 접근할 수 있는 위치에 소스코드를 제공하는 것으로 (즉 URL을 쓰는 것으로) 조건을 만족할 수 있습니다. GPL 버전 2에선 이게 안 되고, 버전3에서만 됩니다. 시대의 변화를 반영한 이 부분은 매우 긍정적입니다. 오히려 버전3이 비지니스 프렌드리하지 않을까요.

문제는 리눅스 커널도 그렇고, BusyBox도 그렇고 "or (at your option) later version" 문구가 붙어 있지 않은 "GPL v2 only" 소프트웨어가 꽤 있어서 GPL v2는 쉽게 사라지지 않을 거고, 여전히 3년간 물리적인 매체를 통해 전달하는 보장을 해야 됩니다.

(업데이트)

참고 글: The GPL Has No (Networked) Future

2008년 4월 10일 목요일

ipTIME의 GPL 위반

주식회사 이에프엠 네트웍스의 인터넷 공유기 ipTIME이 작년 7월 제시한 timeline과는 달리 계속해서 GPL을 위반하고 있습니다. 현재 라이센스 문제를 논의하는 구글그룹을 만들었고 ipTIME 문제를 정리하고 있습니다. 그룹에 가입해서 논의에 도움을 주세요.

http://groups.google.com/group/foss-legal-kr/web/efm-networks-iptime

저도 수년간 장비 업계에 있었고 앞으로도 그럴 가능성이 있기에, 이런 흐름이 만연되어 있는 부끄러운 모습을 계속 보고 넘길 수만은 없습니다.

더구나 ipTIME은 라이센스를 잘 몰랐다거나 실수였다거나 그런 것도 아니고, "대기업의 GPL 관련 위반은 영업비밀 유지며 당사와 같이 미약한 중소기업에만 이와 같은 규칙이 엄격하게 적용되어서는 불합리하다"라고, 알면서도 고의적으로 라이센스를 위반하고 있는 모습을 보이고 있습니다.

좀 더 진행되면 나중에 다른 위반 사례에 대해서도 해결을 시도해 보고자 합니다. 너무 많아서 한숨이 나옵니다만 분위기가 조성되면 알아서 지켜지겠지요.