V4L2 API 라이센스에 대해서 궁금합니다.

pedor의 이미지

V4L2 API를 써서 라이브러리를 만들어 배포를 하면 라이브러리 코드를 공개해야 하나요?
리눅스 웹캠라이브러리를 만들고 있는데요 RGB 영상을 불러올때 V4L2 API를 사용하고 있습니다.
V4L2 예제는 검색만해도 쉽게 찾을수 있는데요

https://gist.github.com/maxlapshin/1253534
에 있는 코드를 바탕으로 리눅스 웹캠 라이브러리는 만들었습니다.
V4L2 API 를 상용했습니다.

V4L2 라이센스를 검색해보면 GPL 라이센스라고 나오며 GPL에 관련된 코드는 모두 공개를 원칙으로 하고 있는것으로 알고 있는데요.

제가 만든 웹캠 라이브러리를 배포함에 있어서 코드를 공개해야 하는것인가요?
https://kldp.org/node/155708 에서 글을 보면

커널API는 공개를 안해도 된다? 라는 의견이 있는것 같은데요
V4L2 API를 사용하는것과 libv4l2를 사용하는것과 다른 관점으로 봐야 하는건지 모르겠습니다.

제가 만든 라이브러리의 의존성검하에도는 libv4l2 관련내용은 나타나지 않는 상태이고
라이브러리에서 RGB영상 관련부분은 V4L2를 이용하여 작업하였습니다.

이렇게 될경우 GPL 라이센스를 따라야 하는것인지 아니면 코드공개를 하지 않아도 되는것인지 궁금하네요

김정균의 이미지

정확하게 해당 코드가 어떤 library를 link하는지는 모르겠지만 대충 찾아보니 L4V2 를 사용할 때 vl4-utils-tizen repository에 있는 library를 사용하는 듯 싶네요. 해당 저장소의

https://git.linuxtv.org/mchehab/v4l-utils-tizen.git/tree/COPYING.libv4l

라이브러리 COPYTING 문서를 보면 LGPL 을 사용하고 있으므로, static link를 하지 않는 한은 소스 공개의 의무는 없을 것 같습니다. 다만 배포시에 V4L2 library를 같이 배포할 경우에는 문제의 소지가 있을 수 있으니, 설치시에 별도로 다운로드나 빌드를 하게 만드시는 것이 좋을 것 같습니다.

이 라이브러리가 아니라면, 해당 라이브러리 소스에서 라이센스를 확인 하시기 바랍니다. LGPL이 아니라 GPL이라면 소스 코드 공개의 의무가 발생할 수 밖에 없습니다. 아마 커널 드라이버는 GPL이지만, kenre symbol에 직접 접근하는 코드가 아니고 userland API를 통해서 접근으르 하는 형태일테니, 이 userland library의 license가 무엇인지에 따라 결론이 달라질 수 있습니다.

요점은 GPL이라면 모든걸 포기하셔야 할 수도 있습니다. :-) LGPL이라도 배포를 어떻게 하느냐에 따라 문제가 발생할 수 있으므로, 최대한 패키징과 배포를 V4L2 library와 별개로 하셔야 합니다.

마지막으로, 상용 패키지로서 법적 검토가 필요하다면 변호사 자문을 하시는 것을 권고 드립니다. 여기서 누가 얼마나 정확하거나 부정확하게 알려 드린다고 해도 법적으로는 아무런 보장을 받지 못합니다.

pedor의 이미지

답변감사합니다. 해당사이트내용을 참고해보도록하겠습니다.

drinkme의 이미지

V4L2 header file을 include하셨다는거 같은데, 이런경우 open 안해도 됩니다.
문제는 바탕으로 하셨다는 code입니다.
그 code가 GPL이라면, 님의 code도 open해야 합니다.

pedor의 이미지

videodev2.h 파일을 사용하고
ioctl(fd, VIDIOC_S_INPUT, &input)
ioctl(fd, VIDIOC_DQBUF, v4lbuf)

이런 ioctl 함수를 사용하고 있는데요 videodev2.h 파일에 디파인함수로 선언되어 있네요
이걸보니 GPL 영향을 받을것 같네요

videodev2.h 파일을 열어보니 GPL이라고 명시를 하고 있네요

Necromancer의 이미지

videodev2.h가 어느 패키지에 있는지 찾아보니 커널 헤더파일이네요. 리눅스 커널이라 GPL로 쓰여져 있을 겁니다.

정 찝찝하다면 videodev2.h에서 사용할 매크로, 구조체 등등을 골라 이름 바꿔 베껴 쓰거나 V4L2 API를 매크로 도움 없이 직접 호출하는 wrapping code를 짜는 방법(어셈블리 필수)으로 GPL 피해갈 수 있습니다.

unix의 전통이 입출력을 다 read/write로 추상화해서 처리하는 것인데 파일이 아닌 장치 입출력 하다보면 설정변경같이 read/write로 하기가 거시기한 경우가 많아서 리눅스에서는 이것들을 ioctl()에 마구 우겨넣었습니다. 그래서 ioctl()은 인수로 들어가는 데이터가 중구난방입니다. 거기다 커널 버전업되면서 요구하는 데이터구조가 바뀌어서 이전 프로그램이 안돌아가는 경우 가끔 있고요.

Written By the Black Knight of Destruction

pedor의 이미지

좋은정보 감사합니다. v4l2가 리눅스에서는 쓰기가 정말좋은데...아마 opencv로 방향을 바꿔야 할것 같은 생각이 드네요 ㅠ

댓글 달기

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