Bagaimana cara kerja GPL dalam hal bahasa seperti Dart yang mengkompilasi ke bahasa lain?

11

Bahasa Dart Google tidak didukung oleh Peramban Web apa pun selain kromium khusus yang dikenal sebagai Dartium. Untuk menggunakan Dart untuk kode produksi, Anda perlu menjalankannya melalui kompiler / penerjemah JavaScript- Dart dan kemudian menggunakan JavaScript yang dihasilkan dalam aplikasi web Anda.

Karena JavaScript adalah bahasa yang ditafsirkan setiap orang yang menerima "biner" (Aka, file .js) juga telah menerima kode sumber.

Sekarang, Lisensi Publik Umum GNU v3.0 menyatakan bahwa:

"" Kode sumber "untuk suatu karya berarti bentuk karya yang disukai untuk membuat modifikasi.

Yang akan menyiratkan bahwa kode Dart asli selain kode JavaScript juga harus diberikan kepada pengguna akhir. Apakah ini berarti bahwa aplikasi web apa pun yang ditulis dalam Dart juga harus memberikan kode Dart asli kepada semua pengunjung situs web mereka walaupun salinan kode sumber telah disediakan dalam bentuk yang dapat dibaca / ditulis / dimodifikasi oleh manusia?

Peter-W
sumber
3
Saya tidak akan benar-benar memanggil file .js "kode sumber" tidak lebih dari js dikaburkan adalah "kode sumber". Tentu, ini masih ditafsirkan, tetapi sama sekali bukan kode sumbernya. Ini lebih seperti output HTML dari skrip PHP. Namun tidak yakin cara kerjanya dari sisi lisensi.
Ben Brocka
Ketika Anda mengatakan "Kode Produksi", maksud Anda "Diproduksi"? Penggunaan internal tidak memerlukan rilis kode sumber. Apakah kode Dart yang Anda gunakan berdasarkan pada kode berlisensi GPL orang lain (atau lainnya), atau ini semua kode asli yang Anda kembangkan? Jawabannya sangat tergantung pada perincian itu
Paul
1
Anda tidak harus memberikan kode sumber kepada pengunjung jika Anda menjalankan aplikasi GPL. Anda hanya perlu memberikan kode sumber jika Anda mendistribusikan aplikasi. (Jika itu AGPL maka Anda harus memberikan sumber: gnu.org/licenses/why-affero-gpl.html )
JCasso
1
Dengan anggapan aplikasi sedang berjalan pada server yang menghadap publik maka apakah kode tersebut tidak "didistribusikan" kepada setiap pengunjung? Bahkan jika itu hanya diunduh oleh browser ke lokasi sementara sebelum dieksekusi.
Peter-W
@ Peter-W Saya akan mengatakan argumennya teknis dan tidak jelas. Bahwa browser mengunduh javascript adalah detail implementasi; sebagian besar pengguna tidak menyadari bahwa mereka telah "didistribusikan" apa pun, sedangkan sebagian besar pengguna akan mengerti mendapatkan CD atau mengunduh barang dianggap sebagai "distribusi". Dalam hal ini, mekanisme implementasi adalah distribusi (ke browser, dan sementara), yang membuat seluruh masalah tidak jelas bagi saya. EDIT : juga, dengan cara kode js adalah "bytecode" dari sudut pandang coder Dart, bukan?
Andres F.

Jawaban:

9

Ya, jika kode berada di bawah GPL dan Anda memberikan JavaScript yang dihasilkan, Anda juga harus memberikan kode Dart asli. Ini biasanya dilakukan dengan tautan untuk mengunduh kode sumber dari situs Anda, tetapi Anda juga dapat menyematkannya dalam komentar atau sesuatu seperti itu.

Saya pikir cara termudah untuk mematuhi GPL dalam hal ini adalah menggunakan opsi d untuk mendistribusikan sumber

d) Sampaikan kode objek dengan menawarkan akses dari tempat yang ditentukan (gratis atau dengan biaya), dan menawarkan akses yang setara ke Sumber Terkait dengan cara yang sama melalui tempat yang sama tanpa biaya lebih lanjut. Anda tidak perlu meminta penerima untuk menyalin Sumber yang Sesuai bersama dengan kode objek. Jika tempat untuk menyalin kode objek adalah server jaringan, Sumber Terkait mungkin berada di server yang berbeda (dioperasikan oleh Anda atau pihak ketiga) yang mendukung fasilitas penyalinan yang setara, asalkan Anda mempertahankan arahan yang jelas di sebelah kode objek yang mengatakan ke mana harus cari Sumber yang Sesuai. Terlepas dari server apa yang menampung Sumber yang Berkaitan, Anda tetap berkewajiban untuk memastikan bahwa itu tersedia selama diperlukan untuk memenuhi persyaratan ini.

Pada dasarnya Anda melakukan ini ketika Anda memasukkan file JS di halaman Anda

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->
Dirk Holsopple
sumber
2
Tolong baca jawaban saya. Perhatikan pernyataan tentang GPL yang tidak memerlukan sumber asli untuk dirilis, hanya dihasilkan dalam kasus ini. Dalam hal ini, GPL tidak akan mengharuskannya untuk mendistribusikan, sehingga mekanisme distribusi tidak menjadi masalah. Seperti yang saya katakan, lisensi lain memiliki aturan yang berbeda.
Paul
1
Saya pikir GCC adalah contohnya. Karena GCC adalah GPL dan saya menggunakannya untuk mengkompilasi program "sumber tertutup", apakah itu mengharuskan saya melepaskan sumber aslinya? Saya percaya hal yang sama akan berlaku untuk "kompiler" GPL
Paul
3
Jawaban ini salah. Bahkan jika kode Dart dilisensikan di bawah GPL Anda tidak harus memberikan kode sumber Dart kecuali Anda mendistribusikan aplikasi. Menjalankan aplikasi GPL di server tidak memerlukan penyediaan kode sumber untuk aplikasi itu. Itu sebabnya ada lisensi lain bernama AGPL . Untuk tujuan khusus itu.
JCasso
2
@JCasso itu akan benar jika kode tersebut berjalan di server, tetapi dalam kasus Dart kode objek yang dihasilkan adalah JavaScript yang didistribusikan ke klien dalam sebagian besar kasus. Jelas, jika Anda melakukan sesuatu yang sangat aneh seperti menjalankan sisi server JavaScript, maka itu tidak dihitung sebagai distribusi.
Dirk Holsopple
3
@JCasso yang hanya berlaku untuk kode sisi server. Dari halaman yang sama: JavaScript Drupal, termasuk salinan jQuery yang disertakan dengan Drupal, juga berada di bawah GPL, jadi setiap Javascript yang berinteraksi dengan JavaScript Drupal di browser juga harus di bawah GPL atau lisensi yang kompatibel dengan GPL.
Dirk Holsopple
2

Pertama-tama kita berbicara tentang GPL, bukan AGPL.

Jika Anda tidak mendistribusikan aplikasi GPL, jika Anda menjalankannya di server, Anda tidak harus memberikan kode sumber . Ada AGPL untuk itu. GPL adalah tentang distribusi.

Dari FAQ Drupal:

Apakah saya harus memberikan kode untuk situs web saya kepada siapa pun yang mengunjunginya?

Tidak. GPL tidak mempertimbangkan melihat situs web untuk dihitung sebagai "mendistribusikan", jadi Anda tidak diharuskan untuk membagikan kode yang berjalan di server Anda.http: //drupal.org/licensing/faq/#q6

Harap dicatat bahwa Drupal dilisensikan di bawah GPL dan berisi file js (banyak).

Dari GNU:

Tujuan dari GNU Affero GPL adalah untuk mencegah masalah yang memengaruhi pengembang program gratis yang sering digunakan di server.

Misalkan Anda mengembangkan dan merilis program gratis di bawah GNU GPL biasa. Jika pengembang D memodifikasi program dan merilisnya, GPL mengharuskannya untuk mendistribusikan versinya di bawah GPL juga. Jadi, jika Anda mendapatkan salinan versinya, Anda bebas untuk memasukkan beberapa atau semua perubahannya ke dalam versi Anda sendiri.

Tapi anggaplah program ini terutama berguna di server. Ketika D memodifikasi program, ia kemungkinan besar menjalankannya di server sendiri dan tidak pernah merilis salinan. Maka Anda tidak akan pernah mendapatkan salinan kode sumber dari versinya, jadi Anda tidak akan pernah memiliki kesempatan untuk memasukkan perubahannya di versi Anda. Anda mungkin tidak menyukai hasil itu.

Menggunakan GNU Affero GPL menghindari hasil itu. Jika D menjalankan versinya di server yang dapat digunakan semua orang, Anda juga dapat menggunakannya. Dengan asumsi ia telah mengikuti persyaratan lisensi untuk membiarkan pengguna server mengunduh kode sumber versinya, Anda dapat melakukannya, dan kemudian Anda dapat memasukkan perubahannya ke dalam versi Anda. (Jika dia belum mengikutinya, Anda punya pengacara yang mengeluh kepadanya.) Sumber: http://www.gnu.org/licenses/why-affero-gpl.html

JCasso
sumber
2
Tetapi mengingat ini adalah Dart, yang dikompilasi ke Javascript, dan kemudian dieksekusi seperti pada cilent, apakah ini berlaku?
Winston Ewert
1
GPL jelas tentang itu. Jika saya memberi Anda ubuntu cd saya harus memberi Anda cara untuk mendapatkan kode sumber. Jika saya meletakkan ubuntu.iso ke server file juga saya harus memberikan tautan unduhan (atau sesuatu seperti itu). Ini disebut distribusi. Jika Anda mendistribusikannya, Anda harus memberikan kode sumber. Tetapi memiliki aplikasi online (di server) tidak pernah dihitung sebagai "distribusi".
JCasso
3
intinya adalah bahwa kode berjalan di browser, bukan di server. Jawaban Anda hanya bermakna jika kami melihat kode yang berjalan di server. Tapi kami tidak. Kami melihat kode yang berjalan di komputer klien. Jika kode dieksekusi di server, Anda benar, itu bukan distribusi. Tetapi karena kode tersebut diunduh oleh browser dan menjalankannya adalah distribusi dan jawaban Anda tidak sopan.
Winston Ewert
2
Sebenarnya, saya pikir sangat penting CPU mana yang memprosesnya. Jika saya menjalankan kode Anda pada CPU saya, maka karena kebutuhan, Anda telah mendistribusikan kode Anda kepada saya. Untuk semua maksud dan tujuan, persis sama dengan jika saya mengunduh suatu program dan menjalankannya. Pertanyaannya telah dibahas sebelumnya: stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert
2
Juga, lihat halaman AGPL yang Anda tautkan. Ini secara eksplisit membahas kode yang dieksekusi pada server, bukan kode yang dieksekusi pada klien. Jika penulis berpikir bahwa GPL tidak berlaku untuk kode yang dieksekusi javascript Anda, dia akan menyebutkan itu dalam diskusi.
Winston Ewert
1

Secara umum, itu sangat tergantung pada lisensi. Dalam kasus Anda, Dart adalah contoh buruk karena BSD, dan sepertinya GNU 3.0 mencakup kasus yang Anda bicarakan. Sebagai seorang non-pengacara saya akan menafsirkan kutipan itu sebagai "Kode yang dihasilkan tidak secara khusus dibahas"

Halaman Beranda Dart Mengacu pada hal ini: Lisensi BSD

Jadi pertanyaan Anda tentang GPL adalah moot

Juga: Lisensi GNU 3.0

Apakah ada cara agar saya bisa mendapatkan hasil keluaran GPL dari penggunaan program saya? Misalnya, jika program saya digunakan untuk mengembangkan desain perangkat keras, dapatkah saya meminta agar desain ini harus gratis? (#GPLOutput)

Secara umum ini tidak mungkin secara hukum; undang-undang hak cipta tidak memberi Anda suara apa pun dalam penggunaan hasil yang dibuat orang dari data mereka menggunakan program Anda. Jika pengguna menggunakan program Anda untuk memasukkan atau mengonversi datanya sendiri, hak cipta pada output menjadi miliknya, bukan Anda. Secara lebih umum, ketika suatu program menerjemahkan inputnya ke dalam bentuk lain,> status hak cipta dari output mewarisi input yang dihasilkannya.

Jadi satu-satunya cara Anda memiliki suara dalam penggunaan output adalah jika sebagian besar output disalin (lebih atau kurang) dari teks dalam program Anda. Sebagai contoh, bagian dari output Bison (lihat di atas) akan dicakup oleh GNU GPL, jika kami tidak membuat pengecualian dalam kasus khusus ini.

Anda dapat secara artifisial membuat program menyalin teks tertentu ke dalam outputnya bahkan jika tidak ada alasan teknis untuk melakukannya. Tetapi jika teks yang disalin itu tidak memiliki tujuan praktis, pengguna hanya dapat menghapus teks dari output dan hanya menggunakan sisanya. Maka dia tidak perlu mematuhi ketentuan redistribusi teks yang disalin.

Paul
sumber
3
Pertanyaannya bukan tentang kompiler Dart yang merupakan GPL (yang BTW tidak akan relevan dengan output program (kompiler)), tetapi tentang program Dart yang GPL.
2
@nannan saya tidak membaca pertanyaan yang sama seperti yang Anda lakukan. 1) Lihat tautan 1 saya, Dart adalah BSD. 2) Jika program Dara adalah GPL, ia tidak akan mengajukan pertanyaan. Saya membaca pertanyaan ketika dia ingin tahu apakah dia diharuskan juga merilis kode sumber Dart-nya. Apakah Anda benar-benar membaca jawaban saya?
Paul
2
Nah, Anda tampaknya satu-satunya yang membacanya seperti itu. Meskipun OP tidak secara eksplisit menyebutkan bahwa program Dart yang dimaksud adalah GPL, tidak ada yang mengisyaratkan bahwa ia menganggap kompiler Dart adalah GPL juga, jadi saya tidak mau berasumsi bahwa ia melakukan sedikit riset.
Maaf jadi ulurkan ini ... Jadi jika tidak ada program Dart GPL dan Dart adalah BSD (sungguh, itu, atau setidaknya situs mengatakan itu), lalu apa pertanyaannya? Jika ini hanya tentang "Apakah saya harus mendistribusikan A (GPL) ketika saya ingin melepaskan B (bukan GPL)", maka itu adalah pertanyaan rangkap
Paul
2
@ Paul Asumsi saya, dan asumsi semua orang, adalah program Dart sebenarnya GPL.
0

Pertanyaan dasarnya adalah:

Apakah termasuk javascript pada halaman web (misalnya referensi melalui tag skrip) dianggap sebagai "Menyampaikan" pekerjaan GPL?

Jika ya, Anda harus membuat sumber tersedia dalam bentuk yang disukai untuk memodifikasi kode, jika tidak Anda tidak. Dalam hal ini bentuk yang disukai adalah kode sumber Dart asli yang digunakan untuk menghasilkan javascript.

Saya tidak dapat menemukan jawaban eksplisit untuk pertanyaan ini di situs FSF tetapi esai Stallman "The Javascript Trap" tampaknya mengindikasikan bahwa ia menganggapnya Menyampaikan dan dengan demikian Anda harus menyediakan kode sumber Dart asli. Lihat catatannya tentang mengizinkan versi yang diperkecil yang tidak menyertakan teks lisensi tetapi masih dilindungi oleh lisensi.

Lihat juga FAQ ini tentang javascript dan templat untuk pengecualian yang memungkinkan templat menggunakan javascript GPL tanpa GPL.

Cara terbaik mutlak untuk mengetahui apakah yang ingin Anda lakukan sesuai dengan lisensi adalah dengan bertanya kepada pemegang Hak Cipta kode, karena hanya mereka yang memiliki hak untuk menegakkan lisensi. Mereka mungkin telah menafsirkan lisensi secara berbeda dan bersedia menambahkan pengecualian untuk membuat interpretasi mereka eksplisit.

Craig
sumber
Sebenarnya, itu bukan pertanyaannya. Jika Anda membaca pertanyaan dengan seksama, OP mengasumsikan bahwa Anda akan diminta untuk mendistribusikan javascript. Hanya ada orang lain di pertanyaan ini yang mempertanyakan interpretasi itu. Pertanyaannya adalah apakah dia juga harus mendistribusikan kode Dart.
Winston Ewert
@ WinstonEwert Ketika saya mengatakan "kode sumber" maksud saya file sumber Dart asli yang digunakan untuk menghasilkan javascript. Saya akan memperbarui jawaban saya untuk memperjelas ini.
Craig