GPL 라이센스로 "Hello World"코드를 훔치지 않으려면 어떻게해야합니까?


42

프로젝트에서 math.c큰 GPL 헤더가 있는 파일을 찾았습니다 ...

//------------------------------------------------------------------------------
/// Returns the minimum value between two integers.
/// \param a  First integer to compare.
/// \param b  Second integer to compare.
//------------------------------------------------------------------------------
unsigned int min(unsigned int a, unsigned int b)
{
    if (a < b) {
        return a;
    }
    else {
        return b;
    }
}

좋아, 멋지다 그래서 최소한의 가치를 얻을 필요가 ... 이 파일 !? 그래서 전체 프로젝트를 열어야합니까? 아니면 수학을 다시 만들어야합니까?

나는 그것이 미친 것이라고 생각하지 않으므로 질문은 : 우리가 GPL 헤더를 제거 할 수있을 때?

내가 이상해야 하고 그것을해야 합니까? :

unsigned int min(             unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG            ) {  if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG            ) {  return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE;  }
else {return hyrthrtRERG            ;    } }

진심으로, 그들은 위와 같은 코드를 작성하기를 원합니까?


22
글쎄, 구글 대 오라클의 최근 사례 the jury did find that one nine-line function that Google acknowledged copying was infringing( ArsTechnica ).
제논

5
아아, 진심으로, 분?
Mircea Chirea

33
나는이 질문이 존재한다는 것이 나쁜 일임을 증명한다고 말하고 싶다. 프로그래머의 직업은 프로그래밍이 줄어들고, 합법적 인 혼란과 관료주의가되었다
K.Steff

4
복사하십시오 . 사소한 기능 min은 저작권이 적용되지 않습니다. 자세한 내용은 내 답변을 참조하십시오.
토니 조랑말

6
@Loki, 당신은 1 마일 빠졌습니다. 알고리즘은 저작권이 아닌 특허로 보호됩니다. 저자의 사망 후 70 년이 지나면 저작권이 만료되므로 60 년대 저작권은 여전히 ​​신선합니다. 마지막으로 문제는 알고리즘이 아니라 THIS 코드를 복사하는 것입니다.
Alexis

답변:


53

여기의 많은 사용자들과 달리, 나는 단순히 다음과 같이 제안합니다.

코드 형식이 코딩 표준에 맞는지 확인하고 주석을 제거하거나 다시 작성해야합니다. 아무도 당신이 그것을 복사 한 것을 알지 못할 것입니다-코드 조각이 간단 할 때, 처음부터 작성했을 수도 있습니다. 코딩 표준에 따라 스 니펫에서와 똑같이 함수를 표시해야하는 경우에는 처음부터 작성했을 때의 모양과 동일합니다.

생각해보십시오.이 정확한 부분이 처음으로 쓰여질 때 거의 (!) 아닙니다. 무언가가 사소한 일이라면 직접 쓰지 않으려는 경우 복사하지 말아야 할 이유가 거의 없습니다.

이 토론을하는 것조차 나에게는 약간 불필요한 것 같습니다. 실제 작업을 수행하려면 실용적이어야합니다!


5
실제 질문은 사소한 것과 사소한 것 사이의 장벽이며 어디에 사람들이 "내가 GPL MIN REALISATION을 보라!" _ <
CND

20
글쎄, 저작권 의 독창성 임계 값의 개념이 있습니다. 그리고 그러한 간단한 방법은 저작권이 없어야합니다. 그러나 IANAL과 관할권은 다양합니다. 그럼에도 불구하고, 모든 CS 학부생들이 정확히 같은 방식으로 적어도 5 번 이상 쓴 것은 이것에 매우 잘 해당 될 수 있습니다.
Joey

4
@nilu : Let us then say that the programmer wrote his own version of MIN and it ended up looking exactly like the one from math.c - would it then be okay?네, 사고 였다면 요. "그가 방금 복사했다면 어떤 차이가 있을까요?" 비트 색상이 있습니다. ansuz.sooke.bc.ca/entry/23 이것은 대부분의 컴퓨터 과학자들이 이해할 수있는 것이 아니라 실제로 복잡한 주제이지만 법률에 의해 인정되는 것입니다. 합법적인지 여부에 대해 의문이 있으면 변호사와 상담하는 것이 가장 좋습니다 .
Mark Byers 16:13에

4
@alexis : 당신의 요점을 이해하지만 실제로 동의하지는 않습니다. 결과 코드가 동일하면 프로그래머 이외의 사람은 코드가 처음부터 복사되거나 쓰여 졌는지 알 수 없습니다. 분명히 min을 구현하는 데 거의 어려움이 없으며 다른 구현을 찾는 것보다 시간이 덜 걸릴 것입니다. 그러나 프로그래머가 실제로 그것을 복사하고 자신이 함수를 직접 작성하지 않았다는 것을 모를 경우, 어떤 피해가 발생 했습니까? 프로그래머가 어떤 종류의 '죄책감'을 느끼지 않는다면 대답은 없습니다. 나머지는 단순히 의미론입니다.
nilu

5
@MarkByers : '증명할 수 없음'이라고 말하면 범죄 저지른 사실을 보여주는 물리적 증거가 없음을 의미합니다. 저지른 범죄는 프로그래머의 마음에 완전히 국한됩니다. 분명히, 일부 과자를 도난당한 경우에는 사실이 아닙니다. 이것은 세계에 물리적 영향을 미칩니다 (롤리팝-= 1). '범죄'가 자신의 마음에 국한되어 있다면 누가 도덕적이거나 부도덕 한 것인지 판단해야합니까?
nilu

18

귀하의 질문에 직접 대답하지는 않지만 다음을 시도하십시오.

#define min(a,b) ((a) < (b) ? (a) : (b))

이로써이 영광스럽고 복잡한 매크로를 공개합니다. 이 기술에 대한 논문을 출판해야 할 수도 있습니다.

거시적 공포증 인 경우이 인라인 버전을 사용해보십시오 (실제로 SPARC에서 코딩하지 않는 한 함수를 min입력 / 종료 코드 와 같이 보편적으로 감싸지 않음으로써 많은 CPU 사이클을 절약 할 수 있습니다).

inline int min(int a, int b)
{
    return a < b ? a : b;
}

사소한 스 니펫에 대한 코드 라이센싱 문제는 실제로 약간의 성가신 문제입니다. 변호사에게 문의하십시오. 그러나 실제로 라이센스를 부여 할 수 없거나 라이센스를 실제로 시행 할 수 없다고 가정하고 싶습니다. '단어'라는 단어를 저작권으로 표시하거나 상표를 부여 할 수없는 경우와 마찬가지로이를 사용하는 사람들에게 의지하십시오. (oops)


1
오, 그들은 분명히 그 코드를 저작권으로 인정할 수 있지만, 알고리즘의 단순성을 감안할 때, 왼쪽 주석과 같은 어리석은 짓을하지 않은 한 법정에서 그것을 복사했다는 것을 증명하기가 어려울 것입니다. 동일한 코드를 사용하지 마십시오. 규칙은 자신의 두뇌를 사용하여 코드를 작성하고 원본을 어떤 방식으로도 복사하지 않은 경우에만 그렇게 할 수 있다는 것입니다.
로봇 고트

2
@StevenBurnap 물론 원래 코드에도 같은 문제가있을 수 있습니다. 저작권이 있음을 증명할 수 있습니까 (즉, 이전 구현에서 복사하지 않았다는 것)?
Richard

19
매크로 버전의 min에 문제가 min(a++,b++)있습니다.

4
"공개 도메인에 공개"는 미국 중심입니다. 그것은 많은 나라에서 같은 것을 의미하지 않으며 실제로는 법적으로 가능하지 않습니다.

9
고맙지 만 2000 년대 컴파일러의 컴파일러는와 같은 사소한 인라인을 수행 할 수 있습니다 min.
DeadMG

18

면책 조항 : 저는 변호사가 아닙니다. 내 조언은 당신의 책임하에 사용하십시오.

이 구현 방법은 저작권min없습니다. 저작 방법은 매우 적기 때문입니다.

법적 세계에서는 합병 교리 (아이디어 표현 구분이라고도 함)라고합니다. 이 기능에 대한 (저작권이없는) 아이디어 는 (잠재적으로 저작권이있는) 표현 과 "병합"되었다고합니다 . 따라서이 코드는 저작권의 보호를받지 않으며 자유롭게 사용할 수 있습니다.

안전을 위해 그대로 복사하지 마십시오 . 변수에 다른 이름을 사용하고, 고유 한 서식을 적용하고, 단어에 대한 주석 단어를 복사하지 마십시오. 이 코드의 정확한 문자 표현은 저작권으로 보호 될 수 있습니다.

이것은 누군가가 당신을 고소하지는 않는다는 것을 보장하지는 않지만 적어도 당신은 강력한 방어를 할 것입니다.

또한 코드 조각이 저작권에 의해 보호되지 않더라도 소프트웨어 특허에 의해 보호 될 수 있습니다 (여러분의 min기능 에는 해당되지 않음 ).


2
당신은 그것을 오라클에게 말해보십시오!
GordonM

1
어쩌면 9 줄 함수가 사소한 것이 아닐 수도 있습니다 ... 코드를보고 싶습니다.
Tony The Pony

1
programmers.stackexchange.com/a/148362/28718 이 올바른 코드라고 가정하면 나에게 사소한 것처럼 보입니다.
GordonM

12

BSD 라이센스에 따라 다음 코드를 공개합니다 . 그 라이센스는 훨씬 더 관대하므로 구현을 사용하는 경우 저작권 문제가 발생하지 않아야합니다.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}

GPL 코드를 봉인하지 않고 다시 작성했는지 어떻게 확인할 수 있습니까? : P (그냥 농담)
cnd

1
넌 아니야. 그러나 내 코드를 사용하면 선의로 사용했다고 주장 할 수 있습니다.
GordonM

3
새로운 시대가 도래함에 따라 형제 여러분, 기뻐하십시오. 이제 min폐쇄 소스 소프트웨어에서 찾을 수 있습니다 . 또한 @Sholy, 이제 복사했는지 여부에 관계없이 GordonM의 문제입니다.
K.Steff

5
또한 "크리에이티브 커먼즈"에서 공개합니다. 여기에 붙여 넣은 코드에 대해서는이 페이지의 하단을 참조하십시오.
Martin York


11

터무니없는 상황입니다, 나는 동의하지만, 당신은 자신을 비난 할 수 있습니다. 독점 코드를 작성하는 경우 GPL 라이센스 소스 파일을 읽을 수 없습니다. 파일 시스템에서 math.c를 제거하고 설명서를 보관 한 다음 필요한 API 부분을 자유롭게 다시 구현하십시오. 코드를 읽지 않으면 자신의 코드가 비슷한 지 걱정할 필요가 없습니다.

쓸데없는 말입니까? GPL은 의도적으로 생태계에 환원하지 않고 무료 코드의 혜택을받지 못하게합니다. 조건을 충족 할 수 없거나 충족하지 못하고 또 다른 수학 라이브러리를 구현하지 않으려는 경우 항상 하나를 구입하거나 수락 할 수있는 라이센스가 포함 된 무료 라이브러리를 찾을 수 있습니다.

Microsoft 프로그래머는 회사를 법적 문제로부터 보호하기 위해 오픈 소스 코드를 읽을 수 없습니다. 순전히 윤리적 인 이유 때문에 라이센스를 준수하지 않으려는 모든 프로그램에서 동일한 작업을 수행해야합니다.

귀하는 이것을 사용할 권리가 math.c없지만,의 구현에 대해 시장을 모방하려는 사람은 없습니다 min. GPL의 목표는 프로그래머의 "자유"(및 최종 사용자의 자유)를 제한하지 않고 늘리는 것입니다. GNU 라이센스, FSF 및 자유 소프트웨어 운동은 Richard Stallman으로 시작했으며 Stallman은 새로운 버전의 Symbolics lisp가 출시 될 때마다 처음부터 다시 구현하기 시작했습니다. FSF는 GPL 라이브러리를 다시 구현 한 사람을 따라갈 수 없었습니다.


그러나 그것은 정말 이상한 예입니다. 예를 들어, 나는 그것을 읽고 그것을 따라야한다는 것을 의미하지만 ... 내가 이해하는 한 여기에서 GPL 라이센스를 자유롭게 선택할 수 없습니다. 그래서 나는 Stallman이 누구인지 압니다;)
cnd

2
미안하지만 당신이 무슨 말을하는지 모르겠습니다! 어떤 예입니까? (당신은 또한 Stallman이 누구인지 묻고 있습니까? 아니면 Google Wikipedia를 확인하십시오.)
alexis

3
"마이크로 소프트 프로그래머는 오픈 소스 코드를 읽을 수 없습니다." 구글은 도움이되지 않습니다.
amara

좋은 질문. Iron Python 개발 포럼에서 읽었지만 불행히도 지금 찾을 수 없습니다. 요약 : Jim Hugunin ( hugunin.net/microsoft_farewell.html )은 파이썬 구현을 볼 수 없으며 누군가 자신의 코드를 볼 수 있는지 농담으로 물었습니다 (Microsoft는 Iron Python을 오픈 소스로 만들었습니다) . 이에 대한 대답은 Iron Python에 대해 특별한 예외를 두었습니다.
Alexis

GPL의 자유를 높이려는 사람들은 (특히) 프로그래머가 아닌 모든 프로그램 사용자입니다.
제임스 영먼

7

답 : 저자의 명시적인 허가가 있어야합니다.

저작권이있는 코드입니다. 저자의 허락 없이는 복사 할 수 없습니다.

의 고유 버전을 작성 min하거나 min다른 라이센스를 사용하는 변형을 복사 해야합니다.

저작권 은 알고리즘이 아니라 보호되는 코드라는 것을 기억하십시오 . 저작권법은 텍스트에서 비롯됩니다. "math.c"가 주석 일 뿐이고 실행 코드가 전혀 없더라도 여전히 저작권으로 보호됩니다.


1
자신의 버전이란 무엇입니까? MIN의 나의 자신의 버전, 들리는 소리!
cnd

2
소유 min하고 있지 않으며 구현할 특정 문자 시퀀스를 소유하고 있음을 기억하십시오 min.
로봇 고트

2
개인적인 용도를 제외하고는 저자의 허락 없이는 변경할 수 없습니다. 처음부터 다시 작성해야합니다. 그게 요점입니다. 빈 편집기에 앉아서 거의 동일한 내용을 쓴 경우 복사하지 않았으므로 괜찮습니다. (메모리에서 입력하지 않았다고 가정합니다.)
로봇 Gort

2
아니요, 농담이 아닙니다. 그리고 네, 아마도 이런 경우에는 그것을 피할 수 있습니다. 당신이 그것을했다는 것을 증명하는 것은 저작권 소유자에게 달려 있습니다. 나는 단지 법이 무엇인지 말하고 방어하지는 않습니다.
로봇 고 르트

3
이러한 사소한 일을 기록하지 않으면 다른 사람이 자신에게 권한을 부여하지 않은 방식으로 다른 사람의 작업을 사용하고 있기 때문입니다. 너무 사소한 것이 아니라면 사용하지 마십시오.
Alexis

6

이것은 구글이 찢어 버린 것입니다. 이것은 배열의 상식처럼 보입니다.

 908     /**
 909      * Checks that fromIndex and toIndex are in range, and throws an
 910      * appropriate exception if they aren't.
 911      *
 912      * @param arrayLen the length of the array
 913      * @param fromIndex the index of the first element of the range
 914      * @param toIndex the index after the last element of the range
 915      * @throws IllegalArgumentException if fromIndex > toIndex
 916      * @throws ArrayIndexOutOfBoundsException if fromIndex < 0
 917      *         or toIndex > arrayLen
 918      */
 919     private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
 920         if (fromIndex > toIndex)
 921             throw new IllegalArgumentException("fromIndex(" + fromIndex +
 922                        ") > toIndex(" + toIndex+")");
 923         if (fromIndex < 0)
 924             throw new ArrayIndexOutOfBoundsException(fromIndex);
 925         if (toIndex > arrayLen)
 926             throw new ArrayIndexOutOfBoundsException(toIndex);
 927     }

이것이 전부라면, 항소에 대한 판결이 내려 질 것입니다. 그러나 Wired에 따르면 판사는 Google이 8 개의 다른 파일을 복사 한 것으로 나타났습니다. wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony the Pony

5
예, 그러나 "상식"은 저작권의 기준이 아닙니다. 그들이 처음부터 자신을 복사, 편집 또는 썼는지 여부입니다. "상식"이 있는지 여부는 저작권이 아닌 특허에 대한 테스트입니다. 다시 말해, 오라클은 해당 텍스트에 저작권을 부여 할 수 있지만 해당 알고리즘을 특허 할 수는 없습니다.
로봇 고트

이 9 줄은 합병 교리의 전형적인 예입니다. 배열에서 범위 검사를 수행하는 다른 방법은 몇 가지입니까?
토니 조랑말

1
함수가 텍스트 메시지를 포함하는 예외를 발생시키는 경우 @TonythePony 로트.
avakar

4
Google에서이 텍스트를 복사 한 사람이 Sun 에서이 텍스트 를 쓴 사람이라고 언급 한 사람은 거의 없습니다 . 프로그래머들은 Stallman (미친 수염 극단 주의자)이 옳았다 는 것을 깨달아야합니다 . 모든 악의 근원 인 돈은 사람들이 기술에 처음 참여하는 이유를 잊게합니다. :-/
HostileFork

5

주석이 코드의 기능과 일치하지 않기 때문에이 코드를 사용하지 않습니다. 주석은에 대해 이야기 integer하지만 코드는 사용합니다 unsigned int. 이 기능의 깊이에 어떤 오류가 묻혀 있는지 누가 알 수 있습니까?

진지하게, 이것은 "바퀴를 재발 명하지 마십시오"가 터무니 없어지고 소금 알갱이로 가져가는 것을 잊었습니다. 자신 만의 버전을 처음부터 작성하고 코드의 이름 지정 규칙 및 스타일 가이드 (예 :)와 일치하고 math_min_uint(x, y)작동하는지 (단위 테스트 또는 기타) 확인하고 삶과 저작권 문제없이 진행하십시오.

경험이 커짐에 따라 반복해서 필요한이 간단한 스 니펫은 툴박스에 있으며 너무 많이 생각하지 않고 다시 작성하거나 자신의 라이브러리에서 가져옵니다.


2

사람들은 저작권법이 정신과 서신 모두에서 실제로 복제하는 행위는 금지된다는 것을 의미한다고 생각하는 것 같습니다. 결과가 의심 할 여지없이 비슷하더라도 자신을 동일한 생각으로 표현하는 행위는 아닙니다.

GPL의 코드를 가져 와서 수정하고받은 라이센스에 위배되는 방식으로 사용하고 파생 된 저작물이 아니라고 주장하면 법을 위반하는 것입니다. 두 번째 버전을 사용하더라도 모든 변수의 이름을 변경하고 형식을 변경했지만 여전히 원본에서 파생 된 것입니다.

그러나 자신만의 버전을 작성 min하고 사소한 작업으로 인해 그러한 일을 현명하게 쓸 수있는 방법이 너무 많기 때문에 약간의 우연의 일치로 인해 버전이 정확히 동일하게됩니다 GPL의 코드에 복사하면 아무것도 복사하지 않습니다.

두 이야기 중 어느 쪽이 법정에서 통과 할 것인지의 여부는 다른 문제입니다. 더 크거나 더 복잡한 코드 샘플이 어딘가에 나타나고 주석, 형식 및 철자 오류로 완성 된 경우 독자가 작성한 사람을 설득하는 데 어려움을 겪을 수 있습니다. 출처 (여기에서 게시 한 사실을 감안할 때 상당히 간단합니다).


1

코드가 실제로 "min"예제와 같이 사소한 경우 다른 누군가가 다른 오픈 소스 라이센스 하에서 동일한 기능을 이미 구현했을 가능성이 매우 높습니다.

라이센스에 따라 폐쇄 소스 애플리케이션에 코드를 포함시킬 수 있습니다.


1

30 초 안에 직접 작성하십시오. 정확히 같은 알고리즘을 사용할 수 있습니다. 복사 / 붙여 넣기하지 마십시오.

저작권은 아이디어 자체가 아니라 아이디어의 표현만을 보호합니다. 아이디어를 직접 복사하지 않으면 사용할 수 있습니다.

FWIW, 그런 사소한 코드를 복사하면 어쨌든 어려움을 겪을 것입니다. 손해는 제로가 될 것이며 아마도 대부분의 관할 구역에서 공정하게 사용될 것입니다. 그러나 법적인 경우는 내가 고통 받고 싶지 않은 고통입니다.


1

GPL 코드의 가장 큰 문제는 코드를 배포하거나 소프트웨어를 판매 할 계획입니다.

내부적으로 사용하는 경우 GPL은 원하는대로 자유롭게 작업 할 수 있습니다.

패키지를 배포하려는 경우 가장 쉬운 방법은 사용한 GPL 소스와 동일한 용어로 패키지를 GPL하는 것입니다. 다른 방법이 있지만 복잡해집니다.

소프트웨어를 판매 할 계획이라면 소프트웨어를 구입 한 동일한 GPL 라이센스에 따라 사용 및 / 또는 수정 한 GPL 코드의 소스 코드를 배포해야합니다.


0

C가 아닌 C ++를 사용하는 경우 표준 라이브러리 std::min또는 다음 std::max을 사용하여이 문제를 회피하십시오 <algorithm>.

http://www.cplusplus.com/reference/algorithm/min/

그것은 당신에게 일반성을 사고, 그것은 비슷한 유형에 대해 작동합니다. 또한 d-bag이 발명하려고 주장하고 소프트웨어 특허로 보호를 받으면 ISO위원회와 함께 울릴 것입니다.

일반적인 경우 코드를 게시 한 사람을 기록해 두십시오. 법인입니까, 제정신입니까? 제각각의 개인이라면 (많은 오픈 소스와 마찬가지로) 그들에게 좋은 메모를 작성하고 허가를 받으십시오. 괜찮다고 응답을 저장하십시오. 문제 해결됨.


-2

일반적인 경우 : min 및 max (저작 가능하거나 가능하지 않을 수 있음)와 달리 저작권이있는 복잡한 코드입니다.

그런 다음 라이브러리, 즉 GPL에 따라 코드를 라이센스하십시오! 그러나 원하는 라이센스를 코드에 제공하면서 구현을 사용할 수있는 LGPL 라이브러리 (및 예외가있는 GPL)가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.