GPL hoạt động như thế nào đối với các ngôn ngữ như Dart biên dịch sang các ngôn ngữ khác?


11

Ngôn ngữ phi tiêu của Google không được hỗ trợ bởi bất kỳ Trình duyệt web nào ngoài bản dựng Chromium đặc biệt được gọi là Dartium. Để sử dụng Dart cho mã sản xuất, bạn cần chạy nó thông qua trình biên dịch / trình biên dịch JavaScript-> JavaScript và sau đó sử dụng JavaScript xuất ra trong ứng dụng web của bạn.

Bởi vì JavaScript là ngôn ngữ được dịch, mọi người nhận được "nhị phân" (Aka, tệp .js) cũng đã nhận được mã nguồn.

Bây giờ, Giấy phép Công cộng GNU v3.0 nói rằng:

"Mã nguồn của Cameron, một công việc có nghĩa là hình thức ưa thích của công việc để thực hiện các sửa đổi cho nó."

Điều này có nghĩa là mã Dart gốc ngoài mã JavaScript cũng phải được cung cấp cho người dùng cuối. Điều này có nghĩa là bất kỳ ứng dụng web nào được viết bằng Dart cũng phải cung cấp mã Dart gốc cho tất cả khách truy cập trang web của họ mặc dù bản sao của mã nguồn đã được cung cấp ở dạng có thể đọc / ghi / sửa đổi được?


3
Tôi thực sự sẽ không gọi tệp .js là "mã nguồn" nhiều hơn js bị xáo trộn là "mã nguồn". Chắc chắn, nó vẫn được giải thích, nhưng không có cách nào là mã nguồn. Nó giống như đầu ra HTML của một tập lệnh PHP. Không chắc chắn làm thế nào nó hoạt động cấp phép-khôn ngoan tuy nhiên.
Ben Brocka

Khi bạn nói "Mã sản xuất", bạn có nghĩa là "Sản xuất"? Sử dụng nội bộ không yêu cầu phát hành mã nguồn. Có phải mã Dart mà bạn đang sử dụng dựa trên mã được cấp phép GPL (hoặc khác) của người khác không?, Hay đây có phải là tất cả mã gốc do bạn phát triển không? Câu trả lời thực sự phụ thuộc vào những chi tiết đó
Paul

1
Bạn không phải cung cấp mã nguồn cho khách truy cập nếu bạn chạy ứng dụng GPL. Bạn chỉ phải cung cấp mã nguồn nếu bạn phân phối ứng dụng. (Nếu đó là AGPL'd thì bạn phải cung cấp nguồn: gnu.org/licenses/why-affero-gpl.html )
JCasso

1
Giả sử ứng dụng đang chạy trên một máy chủ web đối mặt công khai thì mã không được "phân phối" cho mọi khách truy cập? Ngay cả khi nó chỉ được trình duyệt tải xuống một vị trí tạm thời trước khi được thực thi.
Peter-W

@ Peter-W Tôi muốn nói rằng đối số là kỹ thuật và không rõ ràng. Trình duyệt tải javascript là một chi tiết triển khai; hầu hết người dùng không biết rằng họ đã bị "phân phối" bất cứ điều gì, trong khi hầu hết người dùng sẽ hiểu việc nhận CD hoặc tải xuống các nội dung được tính là "phân phối". Trong trường hợp này, cơ chế thực hiện là một bản phân phối (cho trình duyệt và tạm thời), điều này làm cho toàn bộ vấn đề không rõ ràng với tôi. EDIT : ngoài ra, theo một cách nào đó, mã js là "mã byte" theo quan điểm của một bộ mã hóa phi tiêu, phải không?
Andres F.

Câu trả lời:


9

Có, nếu mã nằm dưới GPL và bạn cung cấp JavaScript được xuất ra, bạn cũng phải cung cấp mã Dart gốc. Điều này thường được thực hiện với một liên kết để tải xuống mã nguồn từ trang web của bạn nhưng bạn cũng có thể nhúng nó vào một bình luận hoặc một cái gì đó tương tự.

Tôi nghĩ cách dễ nhất để tuân thủ GPL trong trường hợp này là sử dụng tùy chọn d để phân phối nguồn

d) Truyền mã đối tượng bằng cách cung cấp quyền truy cập từ một địa điểm được chỉ định (miễn phí hoặc tính phí) và cung cấp quyền truy cập tương đương vào Nguồn tương ứng theo cùng một cách thông qua cùng một địa điểm mà không phải trả thêm phí. Bạn không cần yêu cầu người nhận sao chép Nguồn tương ứng cùng với mã đối tượng. Nếu nơi sao chép mã đối tượng là máy chủ mạng, Nguồn tương ứng có thể nằm trên một máy chủ khác (do bạn hoặc bên thứ ba vận hành) hỗ trợ các phương tiện sao chép tương đương, miễn là bạn duy trì các hướng rõ ràng bên cạnh mã đối tượng nói ở đâu tìm Nguồn tương ứng. Bất kể máy chủ nào lưu trữ Nguồn tương ứng, bạn vẫn có nghĩa vụ phải đảm bảo rằng nó có sẵn miễn là cần thiết để đáp ứng các yêu cầu này.

Về cơ bản, bạn làm điều này khi bạn bao gồm tệp JS trong trang của bạn

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

2
Xin vui lòng đọc câu trả lời của tôi. Lưu ý các nhận xét về GPL không yêu cầu nguồn gốc được phát hành, chỉ được tạo trong trường hợp này. Trong trường hợp này, GPL sẽ không yêu cầu anh ta phân phối, vì vậy cơ chế phân phối không thành vấn đề. Như tôi đã nói, các giấy phép khác có các quy tắc khác nhau.
Paul

1
Tôi nghĩ GCC là một ví dụ. Vì GCC là GPL và tôi sử dụng nó để biên dịch chương trình "nguồn đóng", điều đó có yêu cầu tôi giải phóng nguồn gốc không? Tôi tin điều tương tự cũng sẽ đúng với bất kỳ "trình biên dịch" GPL nào
Paul

3
Câu trả lời này là sai. Ngay cả khi mã Dart được cấp phép theo GPL, bạn không phải cung cấp mã nguồn Dart trừ khi bạn phân phối ứng dụng. Chạy ứng dụng GPL trên máy chủ không yêu cầu cung cấp mã nguồn cho ứng dụng đó. Đó là lý do tại sao có một giấy phép khác tên là AGPL . Đối với mục đích cụ thể đó.
JCasso

2
@JCasso điều đó sẽ đúng nếu mã đang chạy trên máy chủ, nhưng trong trường hợp của Dart, mã đối tượng kết quả là JavaScript được phân phối cho máy khách trong phần lớn các trường hợp. Rõ ràng, nếu bạn đang làm một cái gì đó thực sự kỳ lạ như chạy phía máy chủ JavaScript, thì nó không được tính là phân phối.
Dirk Holsopple

3
@JCasso chỉ áp dụng cho mã phía máy chủ. Từ cùng một trang: JavaScript của Drupal, bao gồm cả bản sao của jQuery có trong Drupal, cũng thuộc GPL, do đó, bất kỳ Javascript nào tương tác với JavaScript của Drupal trong trình duyệt cũng phải theo giấy phép tương thích GPL hoặc GPL.
Dirk Holsopple

2

Trước hết chúng ta đang nói về GPL, không phải AGPL.

Nếu bạn không phân phối ứng dụng GPL, nếu bạn chạy nó trên máy chủ, bạn không phải cung cấp mã nguồn . Có AGPL cho điều đó. GPL là tất cả về phân phối.

Từ câu hỏi thường gặp về Drupal:

Tôi có phải cung cấp mã cho trang web của mình cho bất kỳ ai ghé thăm không?

Không. GPL không xem việc xem một trang web là "phân phối", do đó bạn không bắt buộc phải chia sẻ mã đang chạy trên máy chủ của mình.http: //drupal.org/licensing/faq/#q6

Xin lưu ý rằng Drupal được cấp phép theo GPL và chứa các tệp js (rất nhiều).

Từ GNU:

Mục đích của GNU Affero GPL là để ngăn chặn sự cố ảnh hưởng đến các nhà phát triển chương trình miễn phí thường được sử dụng trên các máy chủ.

Giả sử bạn phát triển và phát hành một chương trình miễn phí theo GPL GNU thông thường. Nếu nhà phát triển D sửa đổi chương trình và phát hành chương trình, GPL cũng yêu cầu anh ta phân phối phiên bản của mình theo GPL. Do đó, nếu bạn nhận được một bản sao của phiên bản của anh ấy, bạn có thể tự do kết hợp một số hoặc tất cả các thay đổi của anh ấy vào phiên bản của riêng bạn.

Nhưng giả sử chương trình chủ yếu hữu ích trên các máy chủ. Khi D sửa đổi chương trình, rất có thể anh ta sẽ chạy nó trên máy chủ của mình và không bao giờ phát hành bản sao. Sau đó, bạn sẽ không bao giờ có được một bản sao mã nguồn của phiên bản của anh ấy, vì vậy bạn sẽ không bao giờ có cơ hội đưa các thay đổi của anh ấy vào phiên bản của bạn. Bạn có thể không thích kết quả đó.

Sử dụng GNU Affero GPL sẽ tránh được kết quả đó. Nếu D chạy phiên bản của mình trên máy chủ mà mọi người đều có thể sử dụng, bạn cũng có thể sử dụng nó. Giả sử anh ta đã tuân theo yêu cầu cấp phép để cho phép người dùng của máy chủ tải xuống mã nguồn của phiên bản của anh ta, bạn có thể làm như vậy và sau đó bạn có thể kết hợp các thay đổi của anh ta vào phiên bản của mình. (Nếu anh ta không theo dõi nó, bạn sẽ nhờ luật sư của mình khiếu nại.) Nguồn: http://www.gnu.org/licenses/why-affero-gpl.html


2
Nhưng xem như đây là Dart, được biên dịch thành Javascript, và sau đó được thực thi như trên cilent, điều này có áp dụng không?
Winston Ewert

1
GPL rõ ràng về điều đó. Nếu tôi cung cấp cho bạn một đĩa CD ubfox, tôi phải cung cấp cho bạn một cách để lấy mã nguồn. Nếu tôi đặt ubfox.iso cho một máy chủ tập tin thì tôi cũng phải cung cấp một liên kết tải xuống (hoặc một cái gì đó tương tự). Điều này được gọi là phân phối. Nếu bạn phân phối nó, bạn phải cung cấp mã nguồn. Nhưng có một ứng dụng trực tuyến (trên máy chủ) không bao giờ được tính là "phân phối".
JCasso

3
điểm quan trọng là mã chạy trên trình duyệt chứ không phải máy chủ. Câu trả lời của bạn chỉ có ý nghĩa nếu chúng tôi đang xem mã chạy trên máy chủ. Nhưng chúng tôi không. Chúng tôi đang xem mã chạy trên máy khách. Nếu mã được thực thi trên máy chủ, bạn sẽ đúng, đó không phải là phân phối. Nhưng bởi vì mã được trình duyệt tải xuống và chạy nó là phân phối và câu trả lời của bạn là không phù hợp.
Winston Ewert

2
Trên thực tế, tôi nghĩ việc CPU xử lý nó rất quan trọng. Nếu tôi chạy mã của bạn trên CPU của tôi, thì khi cần thiết, bạn đã phân phối mã của mình cho tôi. Đối với tất cả ý định và mục đích của nó giống hệt như khi tôi tải xuống một chương trình và chạy nó. Câu hỏi đã được thảo luận trước đây: stackoverflow.com/questions/1239470/ , chương trình.stackexchange.com/ questions/ 62869/ chất .
Winston Ewert

2
Ngoài ra, xem trang AGPL mà bạn liên kết đến. Nó thảo luận rõ ràng về mã được thực thi trên máy chủ, không phải mã được thực thi trên máy khách. Nếu tác giả nghĩ rằng GPL không áp dụng cho mã thực thi javascript của bạn, thì anh ta đã đề cập đến điều đó trong cuộc thảo luận của mình.
Winston Ewert

1

Nói chung, nó thực sự phụ thuộc vào giấy phép. Trong trường hợp của bạn, Dart là một ví dụ tồi vì nó là BSD và có vẻ như GNU 3.0 bao quát trường hợp bạn đang nói đến. Là một người không phải là luật sư, tôi sẽ giải thích câu trích dẫn đó là "Mã được tạo không được đề cập cụ thể"

Trang chủ của Dart đề cập đến điều này: Giấy phép BSD

Vì vậy, bạn hỏi về GPL là moot

Ngoài ra: Giấy phép GNU 3.0

Có cách nào để tôi có thể GPL người đầu ra nhận được từ việc sử dụng chương trình của tôi không? Ví dụ: nếu chương trình của tôi được sử dụng để phát triển các thiết kế phần cứng, tôi có thể yêu cầu các thiết kế này phải miễn phí không? (#GPLOutput)

Nói chung điều này là không thể về mặt pháp lý; luật bản quyền không cung cấp cho bạn bất kỳ tiếng nói nào trong việc sử dụng đầu ra mà mọi người thực hiện từ dữ liệu của họ bằng chương trình của bạn. Nếu người dùng sử dụng chương trình của bạn để nhập hoặc chuyển đổi dữ liệu của chính họ, bản quyền trên đầu ra thuộc về anh ta chứ không phải bạn. Tổng quát hơn, khi một chương trình chuyển đầu vào của nó sang một số dạng khác,> trạng thái bản quyền của đầu ra kế thừa trạng thái đầu vào mà nó được tạo từ đó.

Vì vậy, cách duy nhất bạn có tiếng nói trong việc sử dụng đầu ra là nếu các phần quan trọng của đầu ra được sao chép (nhiều hơn hoặc ít hơn) từ văn bản trong chương trình của bạn. Chẳng hạn, một phần đầu ra của Bison (xem ở trên) sẽ được bao phủ bởi GNU GPL, nếu chúng ta không tạo ra ngoại lệ trong trường hợp cụ thể này.

Bạn có thể tạo một chương trình sao chép một số văn bản nhất định vào đầu ra của nó ngay cả khi không có lý do kỹ thuật nào để làm như vậy. Nhưng nếu văn bản sao chép đó không phục vụ mục đích thực tế, người dùng chỉ có thể xóa văn bản khỏi đầu ra và chỉ sử dụng phần còn lại. Sau đó, anh ta sẽ không phải tuân theo các điều kiện phân phối lại văn bản đã sao chép.


3
Câu hỏi không phải là về một trình biên dịch Dart là GPL (mà BTW sẽ không liên quan đến đầu ra của chương trình (trình biên dịch)), mà là về một chương trình Dart là GPL'd.

2
@delnan Tôi không đọc câu hỏi giống như bạn đã làm. 1) Xem liên kết đầu tiên của tôi, Dart là BSD. 2) Nếu chương trình Dara là GPL, anh ta sẽ không đặt câu hỏi. Tôi đọc câu hỏi vì anh ta muốn biết liệu anh ta có bắt buộc phải phát hành mã nguồn Phi tiêu không. Bạn đã thực sự đọc câu trả lời của tôi?
Paul

2
Chà, bạn dường như là người duy nhất đọc nó như thế. Mặc dù OP không đề cập rõ ràng rằng chương trình Dart đang được đề cập là GPL, nhưng không có gì gợi ý cho anh ta giả sử trình biên dịch Dart là GPL, vì vậy tôi không sẵn sàng cho rằng anh ta đã nghiên cứu quá ít.

Xin lỗi vì vậy hãy kéo dài nó ra ... Vì vậy, nếu chương trình Dart không phải là GPL và Dart là BSD (thực sự, hoặc ít nhất là trang web nói rằng), vậy câu hỏi là gì? Nếu đó chỉ là về "Tôi có phải phân phối A (GPL) khi tôi muốn phát hành B (không phải GPL) không", thì đó là một câu hỏi trùng lặp
Paul

2
@Paul Giả định của tôi và giả định của mọi người khác là chương trình Dart thực tế là GPL'd.

0

Câu hỏi cơ bản là:

Có bao gồm javascript trên trang web (ví dụ: tham chiếu qua thẻ script) được tính là "Truyền tải" công việc GPLed không?

Nếu có, bạn phải cung cấp nguồn ở dạng ưa thích để sửa đổi mã, nếu không thì không. Trong trường hợp này, hình thức ưa thích là mã nguồn gốc của Dart được sử dụng để tạo javascript.

Tôi không thể tìm thấy câu trả lời rõ ràng cho câu hỏi này trên trang web của FSF nhưng bài tiểu luận "Cái bẫy Javascript" của Stallman dường như cho thấy rằng anh ta xem nó là Truyền tải và như vậy bạn sẽ phải cung cấp mã nguồn gốc của Dart. Xem lưu ý của anh ấy về việc cho phép các phiên bản rút gọn không bao gồm văn bản của giấy phép nhưng vẫn được bảo vệ bởi giấy phép.

Xem thêm Câu hỏi thường gặp này về javascript và các mẫu để biết ngoại lệ cho phép các mẫu sử dụng javascript GPLed mà không bị GPLed.

Cách tuyệt đối tốt nhất để biết liệu những gì bạn muốn làm có tuân thủ giấy phép hay không là hỏi người giữ bản quyền của mã, bởi vì chỉ họ mới có quyền thực thi giấy phép. Họ có thể đã giải thích giấy phép khác nhau và sẵn sàng thêm một ngoại lệ để giải thích rõ ràng.


Trên thực tế, đó không phải là câu hỏi. Nếu bạn đọc kỹ câu hỏi, OP sẽ cho rằng bạn được yêu cầu phân phối javascript. Chỉ có những người khác về câu hỏi này đã hỏi câu giải thích đó. Câu hỏi đặt ra là liệu anh ta có phải phân phối mã phi tiêu không.
Winston Ewert

@WinstonEwert Khi tôi nói "mã nguồn", ý tôi là các tệp nguồn gốc gốc được sử dụng để tạo javascript. Tôi sẽ cập nhật câu trả lời của tôi để làm rõ điều này.
Craig
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.