GPL은 다른 언어로 컴파일되는 Dart와 같은 언어와 관련하여 어떻게 작동합니까?


11

Google의 Dart 언어는 Dartium으로 알려진 특수한 Chromium 빌드 이외의 웹 브라우저에서 지원되지 않습니다. 프로덕션 코드에 Dart를 사용하려면 Dart-> JavaScript 컴파일러 / 번역기를 통해 Dart를 실행 한 다음 웹 응용 프로그램에서 출력 된 JavaScript를 사용해야합니다.

JavaScript는 해석 된 언어이므로 "이진"(일명 .js 파일)을받는 모든 사람도 소스 코드를 받았습니다.

이제 GNU General Public License v3.0은 다음과 같이 말합니다.

"저작물에 대한"소스 코드 "는 해당 저작물을 수정하기 위해 선호하는 저작물 형식을 의미합니다."

이는 JavaScript 코드 외에 원래 Dart 코드도 최종 사용자에게 제공되어야 함을 의미합니다. 이것은 소스 코드의 사본이 이미 사람이 읽을 수있는 / 쓰기 가능 / 수정 가능한 형식으로 제공 되었음에도 불구하고 Dart로 작성된 모든 웹 응용 프로그램이 웹 사이트의 모든 방문자에게 원본 Dart 코드를 제공해야한다는 의미입니까?


3
난독 한 js가 "소스 코드"보다 .js 파일을 "소스 코드"라고 부르지 않습니다. 물론, 그것은 여전히 ​​해석되지만 소스 코드는 아닙니다. PHP 스크립트의 HTML 출력과 비슷합니다. 그러나 라이센스 방식이 어떻게 작동하는지 잘 모르겠습니다.
벤 Brocka

"제작 코드"라고 말하면 "제조 됨"을 의미합니까? 내부 사용에는 소스 코드 릴리스가 필요하지 않습니다. 사용중인 Dart 코드가 다른 사람의 GPL (또는 다른) 라이센스 코드를 기반으로합니까? 아니면이 코드가 모두 귀하가 개발 했습니까? 대답은 실제로 그 세부 사항에 달려 있습니다
Paul

1
GPL 응용 프로그램을 실행하는 경우 방문자에게 소스 코드를 제공 할 필요가 없습니다. 응용 프로그램 을 배포 할 경우 소스 코드 만 제공 하면됩니다. (AGPL 인 경우 gnu.org/licenses/why-affero-gpl.html 소스를 제공해야 )
JCasso

1
응용 프로그램이 공개 웹 서버에서 실행되고 있다고 가정하면 코드가 모든 방문자에게 "배포되지"않습니까? 브라우저에서 실행하기 전에 임시 위치로만 다운로드 한 경우에도 마찬가지입니다.
Peter-W

@ 피터-W 나는 논쟁이 기술적이고 명확하지 않다고 말하고 싶습니다. 브라우저가 자바 스크립트를 다운로드한다는 것은 일종의 구현 세부 사항입니다. 대부분의 사용자는 자신이 무엇을 "배포"했는지 알지 못하는 반면, 대부분의 사용자는 CD를 받거나 자료를 다운로드하는 것이 "배포"로 간주됩니다. 이 경우 구현 메커니즘은 (브라우저 및 임시) 배포이므로 전체 문제가 명확하지 않습니다. 편집 : 또한 js 코드가 다트 코더의 관점에서 "바이트 코드"인 방식으로 그렇지 않습니까?
Andres F.

답변:


9

예, 코드가 GPL하에 있고 출력 된 JavaScript를 제공하는 경우 원래 Dart 코드도 제공해야합니다. 일반적으로 사이트에서 소스 코드를 다운로드 할 수있는 링크를 사용하여 수행 할 수 있지만 주석이나 이와 유사한 내용으로 소스 코드를 포함 할 수도 있습니다.

이 경우 GPL을 준수하는 가장 쉬운 방법은 소스 배포에 옵션 d를 사용하는 것입니다.

d) 지정된 장소 (무료 또는 유료)에서 액세스를 제공하여 객체 코드를 전달하고 추가 비용없이 동일한 장소를 통해 동일한 방식으로 해당 소스에 동등한 액세스를 제공합니다. 수신자가 객체 코드와 함께 해당 소스를 복사하도록 요구하지 않아도됩니다. 객체 코드를 복사 할 장소가 네트워크 서버 인 경우 해당 복사 소스는 동등한 복사 기능을 지원하는 다른 서버 (사용자 또는 제 3자가 운영)에있을 수 있습니다. 해당 소스를 찾으십시오. 해당 소스를 호스팅하는 서버에 관계없이 이러한 요구 사항을 충족하는 데 필요한 기간 동안 서버를 사용할 수 있는지 확인해야합니다.

본질적으로 페이지에 JS 파일을 포함시킬 때이 작업을 수행합니다

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->

2
내 대답을 읽으십시오. 원본 소스를 공개 할 필요가없고이 경우에만 생성 된 GPL에 대한 설명에 유의하십시오. 이 경우 GPL은 배포를 요구하지 않으므로 배포 메커니즘은 중요하지 않습니다. 내가 말했듯이 다른 라이센스에는 다른 규칙이 있습니다.
Paul

1
GCC가 예라고 생각합니다. GCC는 GPL이므로 "닫힌 소스"프로그램을 컴파일하는 데 사용하므로 원래 소스를 해제해야합니까? 모든 GPL "컴파일러"에서도 마찬가지 일 것입니다.
Paul

3
이 답변은 잘못되었습니다. Dart 코드가 GPL에 따라 라이센스가 부여 된 경우에도 애플리케이션 을 배포 하지 않으면 Dart 소스 코드를 제공 할 필요가 없습니다 . 서버에서 GPL 응용 프로그램을 실행할 때는 해당 응용 프로그램에 대한 소스 코드를 제공 할 필요가 없습니다. AGPL 이라는 다른 라이센스가있는 이유 입니다. 특정 목적을 위해.
JCasso

2
@JCasso는 코드가 서버에서 실행 중이라면 사실이지만 Dart의 경우 결과 객체 코드는 대부분의 경우 클라이언트에 배포되는 JavaScript입니다. 분명히 JavaScript 서버 측을 실행하는 것과 같은 이상한 일을하는 경우 배포로 계산되지 않습니다.
Dirk Holsopple

3
서버 측 코드에만 적용되는 @JCasso. 같은 페이지에서 : Drupal에 포함 된 jQuery 사본을 포함하여 Drupal의 JavaScript는 GPL 자체이므로 브라우저에서 Drupal의 JavaScript와 상호 작용하는 Javascript도 GPL 또는 GPL 호환 라이센스에 따라야합니다.
Dirk Holsopple

2

우선 우리는 AGPL이 아니라 GPL에 대해 이야기하고 있습니다.

당신이 경우 배포하지 않는 응용 프로그램 GPL'd을 당신이 서버에서 실행하는 경우, 당신은 소스 코드를 제공 할 필요가 없습니다 . AGPL이 있습니다. GPL은 배포에 관한 것입니다.

Drupal FAQ에서 :

웹 사이트를 방문하는 사람에게 내 웹 사이트의 코드를 제공해야합니까?

아니요. GPL은 웹 사이트를 "배포"로 간주하는 것을 고려하지 않으므로 서버에서 실행중인 코드를 공유 할 필요가 없습니다.

Drupal은 GPL에 따라 라이센스가 부여되었으며 js 파일이 많이 포함되어 있습니다.

GNU에서 :

GNU Affero GPL의 목적은 서버에서 자주 사용되는 무료 프로그램 개발자에게 영향을 미치는 문제를 방지하는 것입니다.

일반적인 GNU GPL 하에서 무료 프로그램을 개발하고 릴리스한다고 가정하십시오. 개발자 D가 프로그램을 수정하고 릴리스하면 GPL은 자신의 버전도 GPL로 배포해야합니다. 따라서 그의 버전의 사본을 얻는 경우, 그의 변경 사항 중 일부 또는 전부를 자신의 버전으로 자유롭게 통합 할 수 있습니다.

그러나 프로그램이 주로 서버에서 유용하다고 가정하십시오. D가 프로그램을 수정하면 자신의 서버에서 프로그램을 실행하고 사본을 공개하지 않을 가능성이 높습니다. 그런 다음 자신의 버전의 소스 코드 사본을 얻지 못하므로 자신의 변경 사항을 자신의 버전에 포함시킬 기회가 없습니다. 그 결과가 마음에 들지 않을 수 있습니다.

GNU Affero GPL을 사용하면 그러한 결과를 피할 수 있습니다. D가 모든 사람이 사용할 수있는 서버에서 자신의 버전을 실행하는 경우에도 사용할 수 있습니다. 서버 사용자가 자신의 버전의 소스 코드를 다운로드 할 수 있도록 라이센스 요구 사항을 따른다고 가정하면 그렇게 할 수 있으며 변경 사항을 버전에 통합 할 수 있습니다. (그가 그것을 따르지 않으면 변호사가 그에게 불만을 제기하게합니다.) 출처 : http://www.gnu.org/licenses/why-affero-gpl.html


2
그러나 이것이 다트 (Dart)라는 것을 알면, 자바 스크립트로 컴파일 된 다음 Cilent와 같이 실행 되는가?
Winston Ewert

1
GPL은 분명합니다. 우분투 CD를 주면 소스 코드를 얻는 방법을 제공해야합니다. ubuntu.iso를 파일 서버에 넣으면 다운로드 링크 (또는 이와 유사한 것)를 제공해야합니다. 이것을 배포라고합니다. 배포 할 경우 소스 코드를 제공해야합니다. 그러나 온라인 서버 (서버)는 "배포"로 계산되지 않습니다.
JCasso

3
요점은 코드가 서버가 아닌 브라우저에서 실행된다는 것입니다. 귀하의 답변은 서버에서 실행되는 코드를 볼 때만 의미가 있습니다. 그러나 우리는 그렇지 않습니다. 우리는 클라이언트 컴퓨터에서 실행되는 코드를보고 있습니다. 코드가 서버에서 실행 되었다면 배포가 올바르지 않은 것입니다. 그러나 코드가 브라우저에 의해 다운로드되어 실행되기 때문에 배포가 가능하며 귀하의 답변은 불필요합니다.
Winston Ewert

2
실제로 CPU가 처리하는 것이 중요하다고 생각합니다. CPU에서 코드를 실행하면 필요에 따라 코드를 배포했습니다. 모든 의도와 목적을 위해 프로그램을 다운로드하여 실행하는 것과 동일합니다. 질문은 전에 논의되었습니다 : stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert

2
또한 연결된 AGPL 페이지를 참조하십시오. 클라이언트에서 실행되는 코드가 아니라 서버에서 실행 된 코드에 대해 명시 적으로 설명합니다. 저자가 GPL이 자바 스크립트 실행 코드에 적용되지 않았다고 생각했다면 그의 토론에서 언급했을 것입니다.
Winston Ewert

1

일반적으로 라이센스에 따라 다릅니다. 귀하의 경우, Dart는 BSD이기 때문에 나쁜 예이며 GNU 3.0이 당신이 이야기하고있는 경우를 다루는 것 같습니다. 변호사가 아닌 사람으로서 나는 그 인용문을 "생성 된 코드는 구체적으로 다루지 않았다"고 해석 할 것이다.

다트 홈페이지 참조 : BSD 라이센스

GPL에 대한 질문은

또한 : GNU 3.0 라이센스

사람들이 내 프로그램을 사용하여 얻은 결과를 GPL 할 수있는 방법이 있습니까? 예를 들어, 내 프로그램을 사용하여 하드웨어 설계를 개발하는 경우 이러한 설계가 무료 여야합니까? (#GPL 출력)

일반적으로 이것은 법적으로 불가능합니다. 저작권법은 사람들이 귀하의 프로그램을 사용하여 자신의 데이터를 사용하여 얻은 결과를 사용한다고 말하지 않습니다. 사용자가 프로그램을 사용하여 자신의 데이터를 입력하거나 변환하는 경우 출력물에 대한 저작권은 귀하가 아닌 그에게 귀속됩니다. 보다 일반적으로, 프로그램이 입력을 다른 형식으로 변환 할 때 출력의 저작권 상태는 생성 된 입력의 저작권 상태를 상속합니다.

따라서 출력을 사용할 때 말할 수있는 유일한 방법은 출력의 상당 부분이 프로그램의 텍스트에서 (약간) 복사되는 것입니다. 예를 들어, Bison의 출력 중 일부 (위 참조)는이 특정 경우에 예외를 만들지 않은 경우 GNU GPL이 적용됩니다.

기술적 인 이유가 없더라도 프로그램이 특정 텍스트를 출력물에 인위적으로 복사 할 수 있습니다. 그러나 복사 된 텍스트가 실용적이지 않으면 사용자는 출력에서 ​​해당 텍스트를 삭제하고 나머지 만 사용할 수 있습니다. 그런 다음 그는 복사 된 텍스트의 재배포 조건을 준수 할 필요가 없었습니다.


3
문제는 GPL 인 Dart 컴파일러 (프로그램 (컴파일러) 출력과 관련이없는 BTW)가 아니라 GPL 인 Dart 프로그램에 관한 것입니다.

2
@delnan 나는 당신과 같은 질문을 읽지 않았습니다. 1) 내 첫 번째 링크를 참조하십시오. Dart는 BSD입니다. 2) Dara 프로그램이 GPL이라면 질문을하지 않을 것입니다. 그가 자신의 다트 소스 코드를 공개해야하는지 알고 싶어서 질문을 읽었습니다. 실제로 내 대답을 읽었습니까?
Paul

2
글쎄, 당신은 그런 식으로 읽는 유일한 사람인 것 같습니다. OP는 문제의 Dart 프로그램이 GPL이라고 명시 적으로 언급하지는 않았지만 Dart 컴파일러가 GPL이라고 가정하면 그에 대한 힌트는 없습니다. 그래서 그가 거의 연구를하지 않았다고 생각하지는 않습니다.

죄송합니다.이 문제를 해결하십시오. 따라서 Dart 프로그램이 GPL이거나 Dart가 BSD (실제로 또는 적어도 사이트에서 말한 것)가 아니라면 무엇이 문제입니까? "GPL이 아닌 B를 릴리스하려고 할 때 A (GPL'd)를 배포해야합니까?"라는 질문에 대해서는 중복 된 질문입니다.
Paul

2
@Paul 나의 가정과 다른 사람들의 가정은 다트 프로그램이 실제로 GPL입니다.

0

기본적인 질문은 다음과 같습니다.

웹 페이지에 자바 스크립트를 포함시키는 것 (예 : 스크립트 태그를 통한 참조)이 GPL 작업의 "전달"로 간주됩니까?

그렇다면 코드를 수정하지 않는 경우 기본 형식으로 소스를 제공해야합니다. 이 경우 선호되는 형식은 자바 스크립트를 생성하는 데 사용 된 원본 Dart 소스 코드입니다.

FSF 사이트에서이 질문에 대한 명확한 답변을 찾을 수 없지만 Stallman의 에세이 "자바 스크립트 트랩" 은 그가이를 전달하는 것으로 간주하고 따라서 원래의 Dart 소스 코드를 사용할 수있게해야한다는 것을 나타냅니다. 라이센스 텍스트를 포함하지 않지만 여전히 라이센스가 적용되는 축소 버전을 허용하는 방법에 대한 참고 사항을 참조하십시오.

템플릿이 GPL없이 GPL 자바 스크립트를 사용할 수있는 예외에 대해서는 자바 스크립트 및 템플릿에 대한 FAQ를 참조하십시오 .

수행하려는 작업이 라이센스를 준수하는지 알 수있는 가장 좋은 방법은 라이센스 소유자에게 라이센스를 부여 할 권한이 있기 때문에 코드의 저작권자에게 문의하는 것입니다. 라이센스를 다르게 해석했을 수 있으며, 해석을 명확하게하기 위해 예외를 기꺼이 추가 할 수 있습니다.


사실, 그것은 질문이 아닙니다. 질문을주의 깊게 읽으면 OP는 자바 스크립트를 배포해야한다고 가정합니다. 이 질문에 대한 다른 사람들 만이 그 해석에 의문을 제기했습니다. 문제는 그가 Dart 코드를 배포해야하는지 여부입니다.
Winston Ewert

@WinstonEwert "소스 코드"라고 말하면 자바 스크립트를 생성하는 데 사용 된 원본 Dart 소스 파일을 의미합니다. 이를 명확하게하기 위해 답변을 업데이트하겠습니다.
Craig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.