GPL 질문

gozldguard의 이미지

안녕하세요.

프로그래밍에 입문한지 얼마 안되는 초보입니다.
GPL을 따르는 자바 라이브러리를 이용해서 함수를 짜려고 하는데
만약 FunA라는 함수가 GPL을 따르는 오픈소스인경우

public int FunB(int a, int b){
	int bb = 2*b;
	return FunA(int a,int bb);
}

이렇게 FunA를 약간 수정해서 FunB라는 함수를 제가 계속 사용하는 경우
이 소스는 공개되어야하나요? 아니면 FunA를 call하기만 한거니까 상관없나요?

jb0730의 이미지

소프트웨어에 관련된 다섯 가지 의무
GNU 일반 공중 사용 허가서는 누구에게나 다음의 다섯 가지의 의무를 저작권의 한 부분으로서 강제한다.

1. 컴퓨터 프로그램을 어떠한 목적으로든지 사용할 수 있다. 다만 법으로 제한하는 행위는 할 수 없다.
2. 컴퓨터 프로그램의 실행 복사본은 언제나 프로그램의 소스 코드와 함께 판매하거나 소스코드를 무료로 배포해야 한다.
3. 컴퓨터 프로그램의 소스 코드를 용도에 따라 변경할 수 있다.
4. 변경된 컴퓨터 프로그램 역시 프로그램의 소스 코드를 반드시 공개 배포해야 한다.
5. 변경된 컴퓨터 프로그램 역시 반드시 똑같은 라이선스를 취해야 한다. 즉 GPL 라이선스를 적용해야 한다.

출처 : http://goo.gl/UdwU8R (wiki 입니다)

라이브러리를 그냥 가져다가 쓰는경우에는 오픈하지 않아도 된다고 합니다.(맞겠죠?)
하지만 라이브러리를 어떻게 쓰느냐에 따라서 달라진다고 합니다. 정적, 동적에 따라서 달라진다고도 합니다...

아무런 도움이 되지않는 답변이였습니다..ㅎㅎ

gozldguard의 이미지

라이브러리를 그냥 가져다가 쓰는 경우에 오픈하지 않아도 된다고 한 말이 저도 궁금했습니다. 애매한 말인 거 같아서요 ^^

익명 사용자의 이미지

gpl은 해당 함수 소스만 공개를 강제하는게 아니라 분리할 수 없는 모든 소스를 강제합니다.
저 함수가 없이는 프로그램이 동작하지 않는다면 프로그램 전체 소스를 공개해야 합니다.
lgpl의 경우에도 원칙은 마찬가지 인데, 단 동적링크인 경우에는 공개하지 않아도 됩니다. 동적링크는 똑같은 기능을 하는 다른 라이브러리로 대체할 수 있기 때문입니다.
하지만 gpl은 동적링크라도 공개해야 합니다.

gozldguard의 이미지

솔직히 제 지식으로는 답변이 조금 어렵습니다. ^^; 감사합니다.

익명 사용자의 이미지

또 gpl이든 lgpl이든 소스 자체를 수정 하는 것 뿐만 아니라, gpl 코드를 보고 일부분만 비슷하게만 짜도 프로그램 전체가 라이센스에 걸립니다.
변수명 함수면 고쳐도 루틴 구조가 비슷하면 피해갈 수 없습니다.
라이센스를 피하고 싶다면 비슷한 기능의 gpl코드를 전혀 본적이 없는 사람이 스스로 짜야합니다.

gozldguard의 이미지

소스코드를 보고 수정하거나 비슷하게 짜는 경우가 아니라 제가 위에 든 예시처럼 겉으로 볼 때 GPL이 걸려있는 함수를 그냥 가져다가 새로운 함수를

짜는 경우에 공개해야하는 지에 대한 질문이었는데요. 그런 경우에도 마찬가지인가요?

익명 사용자의 이미지

함수를 봐야 가져올테죠?
가져온 함수도 원래 함수처럼 동일한 동작을 하죠?
그러면 그 함수가 들어간 모든 프로그램 소스를 공개해야합니다.
결론적으로 소스 공개하기 싫으면 gpl근처도 가지 말아야 합니다.
lgpl은 설치된 것만 쓰면 되고 그 이상을 하려하지 말아야 하구요.

Prentice의 이미지

이런 건 좀 FUD 같네요.

Free software is software that gives you the user the freedom to share, study and modify it. We call this free software because the user is free.

자유롭게 공부하라고 해놓고는, 일부분만 비슷하게만 짜도 딴지를 건다? 그럴 리가요.

익명 사용자의 이미지

보고 자유롭게 공부하고, 남도 공부할 수 있게,
공부하면서 짠 코드 공개하라는 거죠.
전혀 논리적으로 잘못된 점이 없습니다만?
변호사가 아니라고 하시니 참으로 다행입니다.

Prentice의 이미지

논증이 sound하고 valid하려면 논리 단계 하나하나뿐만 아니라 그 근거가 되는 사실도 모두 옳아야 합니다만, 그런 면에서 한참 부족하신 듯하네요.

익명 사용자의 이미지

변호사한테나 가서 따지세요.
질문자에게 도움이 될 내용은 커녕 아니면 말고 따위의 글을 적는 인격수준으로 sound vaild?

익명 사용자의 이미지

이사람 저사람이 참여해서 오랫동안 공동체에 의해 개발된 소프트웨어들이 어느새 누군가에게 저작권이 귀속되어 독점 소프트웨어가 되고 특허로 보호받게 되어 다른 사람들이, 심지어는 작성자마저도 쓰지 못하게 되는 일이 메인 프레임 시절에 많이 벌어졌습니다. GPL은 그 반향으로 나온 거고, 그래서 GPL은 그 부분에 대해 매우 엄격합니다.

소스 코드나 바이너리 코드를 복사했냐 아니냐 하는 형식적인 부분이 중요한게 아니고, 좀 더 원천적으로 그 핵심(?)을 '배꼈냐'가 중요한 겁니다. 단순히 함수 이름이나 소스 코드가 아니라 알고리즘, 패턴, 구조, 혹은 그밖의 그 무언가를 GPL 소스 코드에 기반하여 작성하였다면 이는 라이센스에 위반됩니다. 이게 말이 되느냐고 따져도 소용이 없어요. 원래 GPL은 그런 라이센스니까.

그게 싫으면 아예 GPL코드를 안보면 됩니다. 상용 라이브러리도 많고 BSD나 기타 라이센스를 사용한 공개 프로젝트들도 많은데 굳이 GPL인 소스코드를 봐놓고 '일부분만 비슷하게 짰다'라는 요상한 변명을 해야 하는 이유를 저는 잘 모르겠습니다.

만약 라이센스의 변질을 허용하게 된다면, 누군가가 먼저 만든 창조물에 대해 다른 사람이 '독점적' 권리를 획득하여 다른 사람의 권리를 제한할 수 있습니다. 따라서 GPL의 파생물에 대해 GPL을 다시 강요하는 것은 모두의 공익과 자유를 위해 필수적입니다. GPL의 free는 이런 관점에서 접근하시길 바랍니다. GPL의 free를 '내멋대로 하는 것'이라고 일반적인 의미를 부여해서 생각하시면 아주 곤란합니다.

GPL에 대한 논란... 사실 이건 논란도 아니고 남의 창조물을 멋대로 가져다가 독점적 권리를 행사하고 싶은 일부 사람들이 일으키는 분란에 불과합니다만, 이런 논쟁은 이미 수십년도 더 계속 반복되고 반복되고 또 반복되어 왔던 일입니다만, 언제나 GPL의 승리(?)로 끝났습니다. 라이센스 문제는 굉장히 민감한 문제이므로, 잘 모르겠다 싶으면 쓰지 않는게 상책입니다.

Prentice의 이미지

FUD가 아니라면 엄살이 심했거나 정말로 잘못해놓고 오리발 내놓는 게 아닐까 생각이 드네요. 물론 IANAL.

jick의 이미지

물론 *가장 확실하게 하고 싶다면* 해당 코드를 아예 본 적이 없는 사람이 짜는 게 가장 확실하겠습니다만, GPL 코드를 보고 비슷하게 짜면 걸린다는 건 꽤 과장된 이야기인 것 같습니다. GPL 자체에서 이를 강제하고 있지는 않습니다.

(그런 식이면 BSD 개발자는 리눅스 커널 코드를 들여다보면 안되게요.)

물론 "비슷하게"가 어느 정도 비슷하게냐의 문제이긴 합니다. GPL 코드를 ^C ^V한 다음에 변수명만 바꾸는 수준이면 당연히 GPL에 걸립니다. 이건 보고 짠 게 아니라 코드를 가져가서 편집한 거니까...

익명 사용자의 이미지

익명 사용자의 이미지

GPL이 아니라 일반 저작물이라고 생각을 하시길 바랍니다.

소스 코드 뿐만 아니라 알고리즘, 구조, 동작 방식 등도 저작물의 보호 범위 내에 들어갑니다.

의도적이건 아니건, 저작권에 의해 보호받는 영역의 것을 배꼈다면 이는 라이센스 위반입니다.

반대로, 일반 저작권의 범위 내에서 보호받을 수 없는 수준의 약한 '배낌'이라면 GPL 위반이라고 할 수 없겠지요.

jick의 이미지

자꾸 GPL을 얘기하시면서 그 대상을 터무니없이 넓게 잡고 계신데 알고리즘은 저작권 대상에 포함되지 않습니다. (대신 특허의 대상이 될 수 있습니다. 그리고 알고리즘이 특허에 걸릴 경우에는 어차피 보고 베꼈든 독자적으로 생각했는데 똑같은 알고리즘이 나왔든 특허는 똑같이 걸립니다. 즉 보지 않고 쓴다고 해서 특허를 피해갈 수 없습니다.)

* 그리고 여담인데 구체적인 프로그램이 아닌 그 프로그램을 만들기 위한 "아이디어"(알고리즘, 구조, 동작 방식)에 특허를 걸어 다른 사람이 사용하지 못하게 막는 것은 (물론 특허가 있다면 합법적이지만) GPL의 정신에 어긋나며 스톨만이 이끄는 FSF(Free Software Foundation)은 꾸준히 이에 대항하여 싸워오고 있습니다.

http://programmers.stackexchange.com/questions/87505/is-it-ok-to-learn-an-algorithm-from-an-open-source-project-and-then-implement-i

> An algorithm is not eligible for Copyright, so there is no Copyright issue. It is merely a sequence of steps; a recipe for arriving at a conclusion from a given starting point. Copyrights cover expressions of ideas. An algorithm is neither an idea nor an expression of one; it is merely a sequence of steps to perform some kind of work and produce some kind of result; it's a recipe or a guide.

뭐 stackexchange에 올라온 답변이 잘못되었을 수도 있으니 GPL을 창시한 스톨만의 발언을 직접 옮겨보겠습니다.

https://www.gnu.org/philosophy/software-patents.html

This speech is about a way of misusing laws to make software development a dangerous activity. This is about what happens when patent law gets applied to the field of software.

It is not about patenting software. That is a very bad way, a misleading way to describe it, because it is not a matter of patenting individual programs. If it were, it would make no difference, it would be basically harmless. Instead, it is about patenting ideas. Every patent covers some idea. Software patents are patents that cover software ideas, ideas which you would use in developing software. That is what makes them a dangerous obstacle to all software development.

...

To give you some of the biggest differences between copyrights and patents: Copyrights cover the details of expression of a work. Copyrights don't cover any ideas. Patents only cover ideas and the use of ideas. Copyrights happen automatically. Patents are issued by a patent office in response to an application.

...

A patent is an absolute monopoly on using an idea. Even if you could prove you had the idea on your own, it would be entirely irrelevant if the idea is patented by somebody else.

익명 사용자의 이미지

gpl과 특허를 구분못하시는 분은 아닐텐데 재밌는 말을 하시네요.
gpl은 특허처럼 사용하지 못하도록 제한하지 않습니다.
사용하면 돈을 내라고 하지도 않아요.
단, 보고 썼으면 공개하라는 거죠.
맘대로 해석한다고 gpl을 피해갈 수는 없습니다.

익명 사용자의 이미지

gpl하의 알고리즘이 저작권의 대상이 아니면,
누군가 gpl의 알고리즘 루틴을 배껴서, 상용 라이센스 걸면 아무도 그 알고리즘 못씁니다.
그런 양심없는 짓을 막기위해 gpl이 존재하는겁니다.
퀵소트 알고리즘 수준 같은 것 말하나본데
그런 소스를 gpl에서 찾는 멍청이는 없어요.
gpl에만 있는 그런 코드가 배끼기의 대상이 되는 것이 보통이지, 비슷한 동작을 하는데, 소스공개하기 싫은 사람이 bsd와 gpl중에 일부러 gpl쓰는 사람은 없죠.

jick의 이미지

계속 저작권과 특허와 코드와 알고리즘 등등의 경계를 구분하지 않고 말씀을 하시는데, 말씀하신 것과 같은 일은 일어날 수 없습니다.

> gpl하의 알고리즘이 저작권의 대상이 아니면,
> 누군가 gpl의 알고리즘 루틴을 배껴서, 상용 라이센스 걸면 아무도 그 알고리즘 못씁니다.

거듭 말씀드리지만 알고리즘은 저작권의 대상이 아니므로 알고리즘에 저작권을 걸 수 없습니다. 물론 알고리즘에 특허를 낸 다음 "이 알고리즘은 특허가 걸려 있으니 가져다 쓰려면 돈을 내고 라이선스를 받고 가져다 쓰시오" 할 수는 있습니다.

하지만 특허를 걸려면 그 특허가 본인의 창작물이어야 합니다. 이미 남이 만들어서 GPL로 공개한 알고리즘이라면 당연히 그걸 보고 특허를 낼 수 없으며, 남이 GPL로 공개한 알고리즘이 있는 것을 모르고 똑같은 알고리즘을 100% 독자적으로 만들었다 하더라도 GPL 코드가 공개된 이후 시점이라면 특허를 낼 수 없습니다. 혹시 특허청이 GPL 코드가 있는 걸 몰라서 특허를 내주더라도 나중에 다른 사람이 GPL 코드를 보여주면 prior art가 성립되어 특허는 무효가 됩니다.

* 사족: 뭐 당연한 얘기지만 저는 변호사가 아니므로, 실제 돈이 걸린 문제라면 제 말을 100% 믿지 마시고 변호사와 상담하시기 바랍니다.

jick의 이미지

public int FunB(int a, int b){
	int bb = 2*b;
	return FunA(int a,int bb);
}

라이선스의 측면에서 보자면 이건 FunA를 "약간 수정해서" 쓰는 것도 아니고 그냥 프로그램에서 FunA를 가져다 쓰고 있는 거죠. GPL이 걸린 코드가 한 줄이라도 프로그램을 링크할 때 포함되면 그 프로그램 전체가 GPL의 대상이 됩니다.
즉 이 경우에 GPL을 피하고 싶으면 FunA가 뭐하는지를 봐서 "아 이 코드는 xxx란 입력을 받을 때 yyy를 돌려주는 코드구나" 하고 그걸 다 *처음부터* 다시 짜야 합니다.

다만 GPL은 배포시에 적용되기 때문에, FunA를 포함한 프로그램을 개인적인 용도로 쓰거나 그 코드가 절대 회사 밖으로 나갈 일이 없다면 아예 배포를 안 하는 것이므로 문제가 되지 않습니다.

익명 사용자의 이미지

GPL은 부분만 가져다 써도 전체를 GPL 라이센스 하에 다 공개해야 합니다.
LGPL의 경우에는 *.dll 이나 *.so같이 다이나믹 링크일 경우에만
해당 라이브러리를 다른 라이센스의 소스코드와 같이 사용할 수 있습니다.

GPL은 내가 내놓을테니 그에 기반한 것들은 너도 내놔 라는 개념이라서
상용 프로그램에서 함부로 가져다 쓰다간 큰일납니다.
이해가 잘 안되시거든 쓰지 않으시는게 좋습니다.
예전 링크시스 공유기나, 일본의 ToHeart 2 게임 엔진 등도
GPL 코드를 함부로 가져다 썼다가 소스 코드 전체를 공개해야 했습니다.

GPL 말고도 BSD나 MIT 등 그밖에 편하게 가져다 쓸 수 있는
공개 라이센스의 소스들이 많습니다.
그런데도 굳이 GPL인 소스코드에 손을 대시려는지 이해가 되지 않습니다.

unipro의 이미지

저작권은 표현-즉, 생각을 실체화한 무엇-입니다.
생각-예를 들어, 알고리즘-을 가지고 저작권 운운하지 않습니다.

참고 링크: https://kldp.org/node/134382#comment-589354
인용:

GPL은 저작권의 한 종류입니다.
저작권은 아이디어가 아니라 표현입니다. (*)
다른 사람의 코드에서 아이디어를 얻었다고 하더라도 완전히 새로 작성했으면 저작권 위반이 아닙니다.
저작권은 심지어 똑같은 소스라 나왔다해도 의도성이 없으면, 즉 우연히 같은 소스가 나왔다면 문제가 없습니다. (**)
(* 독창적인 또는 진보한 아이디어를 문제삼으려면 특허를 사용해야합니다.)
(** 이 부분이 특허와 다릅니다. 특허는 의도성이 없어도 아이디어를 사용했으면 걸립니다.)

내 블로그: http://unipro.tistory.com

댓글 달기

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