ndiswrapper가 최신 커널에서 동작하지 않는 이유...

권순선의 이미지

최근 커널 라이센스 이슈 관련해서 재미있는 사례가 있어 몇 자 적습니다.

ndiswrapper 모듈은 윈도우의 네트워크 디바이스 드라이버를 리눅스에 올려서 사용할 수 있게 하는 일종의 glue 모듈이며 GPL입니다. 그런데 최근 2.6.16 커널부터 만약 모듈이 ndiswrapper 모듈이라면 tainted 메시지를 뿌려대기 시작했고, 2.6.19 커널부터는 아예 ndiswrapper가 돌아가지 않기 시작했습니다.

ndiswrapper 모듈 자체는 GPL인데 2.6.16부터 로딩되는 모듈이 ndiswrapper이면 TAINT_PROPRIETARY_MODULE이라는 flag가 세팅되는 루틴이 추가되어 모듈이 동작은 하지만 tainted 메시지가 출력되기 시작했습니다. 그런데 2.6.19부터는 EXPORT_SYMBOL_GPL(); 의 검사 루틴에 기존 MODULE(); 매크로에 더해서 TAINT_PROPRIETARY_MODULE flag가 세팅되었는지를 체크하는 루틴이 추가되어, USB 랜카드 등을 지원하기 위해 EXPORT_SYMBOL_GPL();로 export된 함수를 피해갈 수 없었던 ndiswrapper가 그 희생양(?)이 된 것이지요.

ndiswrapper 개발자가 ‘ndiswrapper 자체는 GPL이고, FSF의 GPL 소프트웨어 리스트에도 들어가 있는데 너무한 것 아니냐…’는 식의 불평을 했지만 주요 커널 개발자들의 답변은 ‘GPL 모듈이라고 선언해 놓고 GPL이 아닌 코드(윈도우 드라이버)를 로딩하면서 사람들이 가만 있을 거라고 생각하는 것이 더 이상한 것 아니냐”는 식으로 일축하고 있습니다.

이는 커널 개발자들의 ‘Linux 커널 안에는 어떠한 proprietary code도 용납하지 않겠다’는 의지를 보여주는 또하나의 사례라고 할 수 있습니다.

커널 개발자들이 이렇게 한다고 해서 당장 proprietary module들을 사용할 수 없어지는 것은 아니고, 이렇게 하는 것이 GPL을 enforce하는데 법적으로 유효한 것인가에 대한 논란도 있기 때문에 리눅스 커널 개발자들의 의지가 전혀 변하지 않았다는 것에 대한 참고로만 알고 계시면 될 것 같습니다.

댓글

Necromancer의 이미지

nvidia 드라이버는 어떻게 되죠?
nvidia 애덜이 커널모듈 부분을 공개할 리 만무하니

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

권순선의 이미지

nvidia 드라이버는 EXPORT_SYMBOL_GPL();로 export된 함수를 사용하지 않고 만들어져서 영향을 받지 않는 것으로 알고 있습니다. 많은 부분은 커널과 관련없이 user level의 X Window 관련 layer에서 돌아가고 있고요.

feanor의 이미지

커널 모듈에 대해서는 어떤지 모르지만, 커널 개발자들이 펌웨어 라이센싱을 심각하게 생각하는 것 같지는 않습니다.

GPL은 소스를 제공해야 하므로, 소스가 없는 펌웨어 blob을 GPL 드라이버 안에 포함시키는 것은 문제가 있습니다.

데비안에서 현재까지 파악한 상황은 http://wiki.debian.org/KernelFirmwareLicensing 에 요약되어 있습니다.

다음 드라이버들은 kernel.org 커널에는 포함되어 있지만, 펌웨어 라이센스에 문제가 있어 데비안 커널에서 삭제되었습니다: dabusb, acenic, dgrs, smctr, emi62, keyspan.

feanor의 이미지

이론적으로, ndiswrapper는 NDIS 인터페이스를 사용하는 드라이버라면 어떤 것이든 사용할 수 있으므로, 오픈 소스로 개발된 윈도우즈 네트워크 드라이버를 불러들이는 데도 사용할 수 있으며, 이 경우 커널을 taint할 만한 독점 코드는 사용되지 않았다고 주장할 수도 있습니다.

데비안 버그 353277에 이에 관한 긴 토론이 있습니다. http://bugs.debian.org/353277

오픈 소스로 개발된 윈도우즈 네트워크 드라이버의 예로는 CIPE-Win32 같은 것이 있습니다. http://cipe-win32.sourceforge.net/

feanor의 이미지

리눅스 커널과는 다르게, FreeBSD에는 NDIS 지원 코드가 공식 커널에 포함되어 있습니다.

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/compat/ndis/

sangwoo의 이미지

리눅스 커널과는 다르게, FreeBSD 커널의 라이센스는 GPL이 아니죠. ;-)
----
Let's shut up and code.

----
Let's shut up and code.

마잇의 이미지

당장에 불편이 증가하더라도 이렇게 하드웨어 개발사들이 드라이버 코드를 커널로 집어넣도록 정책을 유지하는게 좋다는 생각인데 이건 뭐 깊이 생각해봤다기 보다는 http://www.kroah.com/log/linux/ols_2006_keynote.html 이 글을 읽고 영향을 받았습니다.

위 링크는 커널 개발자 한 분이 OLS 2006 행사에서 발표하신 프리젠테이션을 기록한 자료인데 읽기 쉽고 내용이 재밌습니다. 리눅스 사용자시라면 한 번 읽어보시는 걸 추천합니다.

독점 라이센스의 벤더 드라이버들이 널리 사용될수록 오히려 안정성에 악영향을 줄 수 있다는 가능성, 특히나 젠투나 데비안같은 공동체 주도의 배포본들 같은 경우 더욱 더 타격을 입을거라는 내용에 수긍이 갔습니다.

직접 드라이버를 개발하고 계시는 분들도 계실텐데 의견들이 궁금하네요.

VIA 같은 경우는 드라이버를 받으러 방문해보면 전부는 아니지만 커널에 포함되어 있다고 하는 안내문을 본적이 있는데 다수의 제작사들이 그런식으로 변하는 것은 힘들려나요?

--
마잇


--
마잇

익명사용자의 이미지

이건 좀 아니다 싶군요. 네트웍카드는 돈을 주고 정당하게 구매한 것이고, 그것을 구동시키기 위해 드라이버를 제공한 것이니 드라이버는 일종의 하드웨어 부속같은 것이죠.

그런데 ndiswrapper마져 없다면 자신이 구매한 하드웨어를 쓸 수 없게 되는데,
1) 리눅스진영 왈: ndiswrapper를 쓰는 것은 라이센스 위반이다
2) 구매자 왈: 내 네트웍 카드의 부속을 내가 맘대로 쓰는데 무슨 위반이냐 ?
3) 하드웨어 벤더: 내 알바 아니니 메롱.

그럼 결국 하드웨어를 판매한 곳을 자꾸 졸라서 리눅스 드라이버를 만들어 달라고 하는지 ?
1) 하드웨어 회사: 우린 그럴 능력 없으니 도망

결국 최신 하드웨어 구매한 구매자만 바보

그런데, ndis 드라이버만이라도 공개해달라고 해서 그걸 공개해줬다면 어떻게 되는건지?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.