Bagaimana aturan GPL static vs dynamic linking berlaku untuk bahasa yang ditafsirkan?

19

Dalam pemahaman saya, GPL melarang tautan statis dari kode non-GPL ke kode GPL, tetapi mengizinkan tautan dinamis dari kode non-GPL ke kode GPL. Jadi yang mana ketika kode tersebut tidak terhubung sama sekali karena kode tersebut ditulis dalam bahasa yang ditafsirkan (misalnya Perl)?

Tampaknya akan terlalu mudah untuk mengeksploitasi aturan jika dianggap sebagai tautan dinamis, tetapi di sisi lain, juga tampaknya tidak mungkin untuk secara legal merujuk kode GPL dari kode non-GPL jika dianggap statis! Bahasa yang dikompilasi setidaknya memiliki perbedaan antara tautan statis dan dinamis, tetapi ketika semua "tautan" hanya menjalankan skrip, mustahil untuk mengetahui maksudnya tanpa lisensi eksplisit!

Atau apakah pemahaman saya tentang masalah ini salah, menjadikan pertanyaan bisa diperdebatkan? Saya juga pernah mendengar "pengecualian classpath" yang melibatkan tautan dinamis; bukankah itu bagian dari GPL melainkan sesuatu yang dapat ditambahkan padanya, jadi penautan dinamis hanya diperbolehkan ketika lisensi menyertakan pengecualian ini?

ekolis
sumber
Sudahkah Anda membaca gnu.org/licenses/lgpl-java.html ?
2
@delnan lgpl! = gpl
Johann
softwareengineering.stackexchange.com/questions/87446/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

16

Adapun pertanyaan spesifik tentang bahasa yang ditafsirkan, FAQ GPL sangat jelas :

Program yang ditafsirkan, bagi penerjemah, hanyalah data; lisensi perangkat lunak gratis seperti GPL, berdasarkan pada undang-undang hak cipta, tidak dapat membatasi data apa yang Anda gunakan pada juru bahasa. Anda dapat menjalankannya pada data apa saja (program yang ditafsirkan), dengan cara apa pun yang Anda suka, dan tidak ada persyaratan tentang melisensikan data itu kepada siapa pun.

Adapun pertanyaan umum tentang menghubungkan dinamis vs statis. Pertama-tama, pandangan FSF dan Stallman adalah bahwa tidak masalah jika tautannya statis atau dinamis, GPL menginfeksi dengan cara apa pun. Dari FAQ GPL FSF:

Jika program secara dinamis menautkan plug-in , dan mereka membuat panggilan fungsi satu sama lain dan berbagi struktur data, kami percaya mereka membentuk program tunggal, yang harus diperlakukan sebagai perpanjangan dari program utama dan plug-in. Ini berarti bahwa kombinasi plug-in yang tertutup GPL dengan program utama yang tidak bebas akan melanggar GPL.

dan

Menautkan [nama program Anda] secara statis atau dinamis dengan modul lain sedang membuat kerja gabungan berdasarkan [nama program Anda]. Dengan demikian, syarat dan ketentuan Lisensi Publik Umum GNU mencakup seluruh kombinasi

Namun, ini dipertanyakan dari sudut pandang hukum. Dalam satu-satunya kasus yang benar-benar pergi ke pengadilan tentang tautan dinamis - Galoob v. Nintendo - Pengadilan Banding memutuskan bahwa karya turunan "harus memasukkan sebagian dari karya berhak cipta dalam beberapa bentuk" . Yang tidak demikian halnya dengan tautan dinamis.

Pokoknya terlepas dari apakah tautan dinamis memang menginfeksi atau tidak, masih ada jalan keluar. Ini digunakan misalnya oleh Nvidia untuk menyediakan driver biner untuk Linux. Anda membuat (L) pembungkus GPL, tetapi sebagai penulis Anda diizinkan menambahkan pengecualian khusus untuk menautkan dengan sumber tertutup tertentu. Vide FSF GPL FAQ .

vartec
sumber
Salah satu sifat turunan adalah bahwa tidak mungkin memisahkan karya pemegang hak cipta secara bersih. Jika Bob Foo()terhubung secara statis dengan panggilan Joe Bar(), kepada pemegang hak cipta mana CALLinstruksi di antara mereka dikaitkan? Interaksi seperti itu akan cukup untuk membentuk "karya turunan". Namun, jika pekerjaan Joe tetap sepenuhnya dalam satu file dan Bob tetap sepenuhnya dalam yang lain, hanya tampilan file-file itu di direktori yang berbeda pada disk yang sama merupakan agregasi, bukan derivasi.
supercat
2
@thepaul: sudah ada presedensi hukum yang menyatakan bahwa setidaknya sebagian dari karya berhak cipta harus dimasukkan dalam sebuah karya untuk menjadi karya turunan. Keyakinan Stallman sering memiliki sedikit dasar dalam hukum yang sebenarnya.
vartec
1
@thepaul: di satu sisi Anda memiliki praktik hukum yang digunakan oleh perusahaan 9 miliar dolar, pada klaim lain oleh pria yang suka memakai topi kertas timah. Anda mengklaim bahwa nanti lebih dapat diandalkan, dan Anda sepenuhnya berhak untuk percaya.
vartec
1
Anda mengutip bagian yang salah dari FAQ GPL sangat jelas . Bagian yang Anda kutip adalah tentang Jika penerjemah bahasa pemrograman dirilis di bawah GPL, apakah itu berarti program yang ditulis untuk ditafsirkan olehnya harus di bawah lisensi yang kompatibel dengan GPL? ! Oleh karena itu untuk penerjemah [berlisensi GPL] . Bagian yang relevan adalah 2 paragraf terakhir: [...] Kasus serupa dan sangat umum adalah untuk menyediakan perpustakaan dengan penerjemah yang ditafsirkan sendiri. Misalnya, Perl dilengkapi dengan banyak modul Perl [...]
Chris Wesseling
1
«Program yang ditafsirkan, bagi penerjemah, hanyalah data; lisensi perangkat lunak gratis seperti GPL, berdasarkan pada undang-undang hak cipta, tidak dapat membatasi data apa yang Anda gunakan pada juru bahasa. Anda dapat menjalankannya pada data apa saja (program yang ditafsirkan), dengan cara apa pun yang Anda suka, dan tidak ada persyaratan tentang melisensikan data itu kepada siapa pun. »Ini tentang menjalankan program dalam lisensi apa pun bahkan dengan juru bahasa GPL, kan? Yang tidak mencakup topik menggunakan plugin non-libre dalam program GPL dalam bahasa yang ditafsirkan.
tuxayo
4

Catatan: ini pertanyaan hukum. Programmers.SE bukan forum hukum, ini adalah forum pemrograman. Sementara orang-orang di sini tahu sedikit tentang pemrograman, mereka tidak tahu apa-apa tentang hukum. Jika Anda ingin mengajukan pertanyaan hukum, Anda harus menanyakannya di forum hukum, di mana ada orang yang benar-benar mengetahui sesuatu tentang masalah tersebut.


GPL tidak mengatakan apa pun tentang tautan statis atau dinamis. Bahkan tidak mengatakan apa pun tentang menghubungkan sama sekali . Setiap pengacara atau hakim yang saya ajak bicara mengatakan bahwa masalah tautan statis dan dinamis sama sekali tidak relevan.

Hak cipta adalah tentang kreativitas. Penghubungan statis vs dinamis adalah detail implementasi teknis. Apakah sesuatu terhubung secara statis atau dinamis bukanlah tindakan kreatif, itu tidak mungkin mengubah status hak cipta suatu karya.

Dalam pertanyaan Anda, Anda berbicara tentang "bahasa yang ditafsirkan". Tetapi istilah itu tidak masuk akal: tidak ada yang namanya bahasa yang ditafsirkan. Bahasa adalah seperangkat aturan dan batasan matematika yang abstrak. Bahasa tidak ditafsirkan atau dikompilasi. Bahasa apa adanya . Istilah "bahasa yang ditafsirkan" tidak hanya salah , tetapi juga tidak masuk akal . Jika bahasa Inggris adalah bahasa yang diketik, itu akan menjadi kesalahan ketik.

Interpretasi dan kompilasi adalah sifat dari penafsir atau kompiler (duh!), Bukan bahasa. Setiap bahasa dapat diimplementasikan dengan penerjemah, dan setiap bahasa dapat diimplementasikan dengan kompiler. Sebagian besar bahasa memiliki keduanya. Sebagian besar implementasi bahasa modern bahkan menggabungkan keduanya dalam satu mesin eksekusi.

Implementasi Rubinius Ruby, misalnya, berisi kompiler statis terdepan yang mengkompilasi kode Ruby ke kode byte Rubinius, seorang juru bahasa yang menginterpretasikan kode byte Rubinius, dan kompilator just-in-time dinamis yang mengkompilasi kode byte Rubinius ke LLVM IR, yang infrastruktur LLVM pada gilirannya mengkompilasi ke kode mesin asli. Implementasi Ruby MacRuby sama sekali tidak mengandung juru bahasa, ia mengkompilasi kode Ruby langsung ke LLVM IR, kemudian lebih jauh ke kode mesin asli.

Di sisi lain, ada juru bahasa untuk C atau C ++.

Semua ini hanyalah detail teknis. Ini sama sekali tidak relevan dengan hak cipta.

Tidak masuk akal bahwa seseorang melanggar hak cipta orang lain atau tidak tergantung pada apakah orang ketiga memilih untuk menjalankan program dengan penerjemah atau mengkompilasinya terlebih dahulu.

Pertanyaannya adalah apakah suatu karya berasal dari karya lain. Ini dapat dihubungkan secara dinamis dan masih diturunkan, dan dapat dihubungkan secara statis dan tidak diturunkan sama sekali.

Jörg W Mittag
sumber
Bagaimana dengan bahasa "perantara-kode" yang ditafsirkan? Salah satu prinsip di balik GPL adalah bahwa siapa pun harus dapat mengadaptasi program ke mesin yang masuk akal yang memiliki alat bahasa yang sama seperti yang tersedia di aslinya. Jika seseorang melepaskan kode sumber untuk juru kode perantara, bersama dengan sekelompok kode bentuk perantara yang dapat dijalankan, apa aturan untuk melepaskan informasi terkait dengan gumpalan kode perantara? Tidak seperti executable yang dikompilasi, yang khusus untuk mesin, gumpalan kode menengah akan sepenuhnya portabel.
supercat
Maaf; Saya akan bertanya di stackoverflow.com, dan itu menyarankan saya bertanya di sini sebagai gantinya ketika saya menggunakan tag "gpl"! Apakah diskusi semacam ini juga dilarang di sini? exec ("killall -9 pengacara"); : D
ekolis
Dan ya, saya setuju bahwa tidak masuk akal bahwa detail implementasi seharusnya tidak berpengaruh pada status hukum penggunaan kembali; Saya hanya berpikir ada perbedaan dan meminta klarifikasi!
ekolis
2
@ekolis: itu tidak dilarang, per se. Hanya saja itu bukan ide yang baik untuk mengajukan pertanyaan hukum orang yang tidak tahu apa-apa tentang masalah hukum (seperti programmer, misalnya), ketika ada orang-orang yang tidak tahu tentang masalah hukum (alias pengacara) Anda bisa meminta gantinya. Saya tidak menentang pengacara, justru sebaliknya. Tapi saya tidak akan meminta satu untuk saran algoritma, dan saya juga tidak akan meminta seorang programmer untuk nasihat hukum.
Jörg W Mittag
IANAL: Ini mungkin detail teknis, tetapi masih membuat perbedaan besar, karena itu mengubah apa yang didistribusikan secara signifikan secara hukum. Dengan tautan statis, Anda membuat karya gabungan yang, menurut aturan GPL, tidak dapat didistribusikan di luar GPL. Dengan tautan dinamis, Anda mungkin melakukan ini juga, misalnya jika Anda mengemas perpustakaan dengan perangkat lunak Anda dalam file ZIP. Tetapi dengan tautan dinamis, Anda dapat mendistribusikannya tanpa perpustakaan, dan ini adalah 100% pekerjaan Anda, bahkan jika itu tidak berfungsi sendiri. Dan Anda masih bisa, tentu saja, menawarkan perpustakaan di bawah GPL.
flarn2006
0

Tidak tahu berapa banyak kebenaran dalam hal ini, dan IANAL, dll .; tetapi dalam interpretasi saya, yang penting adalah apakah perpustakaan yang Anda tautkan melawannya ada dalam beberapa bentuk yang termasuk dalam "biner" (di mana "biner", dalam hal bahasa pemrograman dinamis, hanyalah kode sumber yang didistribusikan; ini adalah apa yang saya dapatkan dari definisi FSF tentang "biner" dalam konteks ini).

Jadi jika Anda mereferensi pustaka dari kode Anda tanpa memasukkannya dalam distribusi Anda, saya akan menganggap ini setara dengan "penghubung dinamis", sedangkan jika Anda menggabungkan pustaka dengan produk Anda, atau menyalin-tempel bagian pustaka ke dalam kode Anda sendiri, skenario "tautan statis" akan berlaku. Paling tidak, ini sesuai dengan semangat GPL: Anda dapat dengan bebas menggunakan (menjalankan, memeriksa, referensi) perangkat lunak GPL tanpa batasan, tetapi segera setelah Anda mendapatkannya , dengan menghubungkan atau menyalin bagian-bagiannya ke dalam perangkat Anda. memiliki produk yang dapat didistribusikan), ia menyebar, dan perangkat lunak Anda juga harus GPL.

tammmer
sumber