GPL 피해가기

feanor의 이미지

http://kldp.org/node/42009 와 연관된 글입니다.

GPL인 라이브러리를 GPL이 아닌 프로그램에 링크하는 것은 (LGPL과는 달리) 허용되지 않지만, 예를 들어 파이프나 소켓을 통해 통신이 이루어진다면 이것이 "derived work"인가 하는 문제는 훨씬 애매해집니다. 일반적으로 파이프를 통해 오고가는 텍스트의 포맷이나 소켓의 프로토콜이 "단지 GPL을 피해가기 위해" 고안된 것이라면 무효이고, 일반적이고 다른 프로그램도 사용할 수 있는 것이라면 두 프로그램을 분리된 것으로 볼 수 있다고 해석되는 것 같습니다.

이 사실을 SGI 사가 교묘하게 이용한 것이 Open64 컴파일러입니다. Open64 컴파일러는 GCC 프론트엔드를 사용합니다. 왜냐하면 C++ 파서를 짜는 것은 결코 쉬운 일이 아니고, 리눅스 커널을 비롯한 여러 오픈 소스 프로젝트가 GCC 확장을 사용하기 때문입니다. (이러한 이유 때문에 인텔의 ICC 컴파일러도 GCC 확장을 지원합니다.)

그렇지만 Open64 컴파일러 전체는 GPL이 아닙니다. SGI는 이를 위해 WHIRL이라는 일종의 "중간 언어"를 고안해서 스펙을 공개적으로 출판합니다. 일종의 어셈블리 언어인 이 언어는 또다른 컴파일러를 통해 해당 아키텍처에 적합한 기계어로 최적화 될 수 있습니다. WHIRL은 상당히 잘 디자인된 언어였기 때문에 몇몇 연구에서 이 언어가 실제로 사용됩니다.

그리고 SGI는 GCC 프론트엔드에 WHIRL을 생성하는 백엔드를 붙이고는, WHIRL을 64비트 기계어로 번역하는 최적화 컴파일러를 만들고, WHIRL 백엔드만 GPL로 공개하고 최적화 컴파일러는 공개하지 않았습니다. GCC 개발자들은 이를 싫어했지만 이를 GPL 위반이라고 볼 수는 없다고 결론을 내린 것 같습니다.

어떤 이야기에 따르면, GCC의 프론트엔드와 백엔드가 뚜렷하게 구분되지 않은 이유가 기술적인 이유라기보다는 이러한 "GPL 피해가기"를 막기 위한 고의적인 철학적 이유 때문이라고 합니다. GCC 코드를 쓰지 않고는 GCC의 중간 언어인 RTL에 접근하기 어려운 것도 마찬가지 이유라는 소문이 있습니다.

미겔은 닷넷을 위한 MC++ (Managed C++) 컴파일러 이야기를 하면서, C++ 파서가 짜기 어려우니 GCC에 편승하는 것이 좋은데 GCC는 GPL이라 곤란하다는 이야기를 하면서 WHIRL을 닷넷의 IL로 바꿀 수 있지 않겠느냐는 이야기를 얼마 전에 블로그에 쓰기도 했습니다. 미겔은 이런 방식의 "GPL 피해가기"가 바람직하다고 생각하는 걸까요?

--feanor

댓글

권순선의 이미지

좋은 분석입니다. GPL 라이브러리를 링크하게 되면 링크한 프로그램도 GPL이 되어야 한다는 것은 대부분 알려진 사실이지만 '링크'의 범위가 애매한 것도 사실입니다. 이런 부분을 포함해서 많은 부분에 대해 오해와 선입견들이 많이 존재하고 있다는 사실이 너무도 안타깝군요.

익명 사용자의 이미지

기억이 맞다면 그 방법 잡스가 넥스트스텝 Object-C 개발시 사용하려던 방법 같습니다. 잡스가 그 아이디어를 rms에 문의했고, rms는 fsf 변호사 측과 상의한 후 부정적인 답 - 문제가 _될 수도_ 있다 - 을 해서 결국 애플에서 직접 다 개발하게 되었다고 알고있습니다.

GPL 피해가려고 아무리 애써도 fsf에서 소송으로 가겠다고 하면 법정에서 시비를 가릴 수 밖에 없습니다. 제가 rms라면 GPL이 '문제가 되는 방향'으로 결정되기를 원했을 겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.