Apa arti “GPL dengan pengecualian classpath” dalam praktik?

70

Oracle tampaknya melisensikan semua kode sumber terbuka terkait Java mereka di bawah GPL dengan pengecualian classpath . Dari apa yang saya mengerti, ini tampaknya memungkinkan untuk menggabungkan pustaka-pustaka ini dengan kode Anda sendiri ke dalam produk yang tidak harus dicakup oleh GPL.

  1. Bagaimana cara kerjanya?
  2. Apa contoh bagaimana saya bisa dan tidak bisa menggunakan kelas-kelas ini?
  3. Mengapa lisensi baru ini digunakan sebagai lawan dari LGPL, yang tampaknya memungkinkan untuk hal yang hampir sama, tetapi lebih mapan dan dipahami?
  4. Apa perbedaan dengan LGPL?
Thilo
sumber
1
Saya menemukan ini di wikipedia: en.wikipedia.org/wiki/... yang sedikit memperjelas, tapi saya masih tidak mengerti mengapa seseorang menggunakan ini di LGPL. Pertanyaan bagus!
1
Halaman Wikipedia itu tidak menyebutkan hal-hal seperti "pengguna harus dapat menukar perpustakaan dengan versinya sendiri" yang merupakan ketentuan dari LGPL. Jadi mungkin GPL + Exception tidak mensyaratkan itu?
Thilo
1
Membaca, sepertinya memang begitu: "LGPL merumuskan lebih banyak persyaratan untuk pengecualian yang menghubungkan: Anda harus mengizinkan modifikasi bagian Perpustakaan yang Anda gunakan dan rekayasa terbalik (program dan perpustakaan Anda) untuk debugging modifikasi seperti itu"
Thilo
Dalam hal ini, apa yang tidak boleh saya lakukan di bawah lisensi ini? Saya dapat menyalin kode berlisensi (pilih + pilih kelas) ke basis kode saya sendiri (tentu saja tidak dimodifikasi)? Bisakah saya menggunakan alat membangun otomatis untuk memodifikasi biner yang dihasilkan? Obfuscator, minimizers, penari telanjang kode mati?
Thilo
Anda dapat menyalin kode dari ini dan menggunakannya dalam kode Anda HANYA jika kode Anda sendiri juga dirilis di bawah lisensi "GPL with classpath exception" . Jika kode Anda adalah hak milik, atau di bawah sebagian besar lisensi open source lainnya seperti MIT, maka Anda tidak diperbolehkan menggunakannya.
Abhi Beckert

Jawaban:

69

Pertama, Saya Bukan Pengacara. Tetapi saya telah mempelajari banyak lisensi dan memahami masalah-masalah yang terkait dengannya.

Kedua, saya tahu ini adalah pertanyaan lama, tetapi saya pikir ini masih merupakan titik kebingungan dan kekhawatiran. Jika itu bukan masalah, seharusnya. Memilih lisensi adalah masalah besar yang tidak bisa Anda ubah sepele, terutama jika banyak kontributor terlibat.

(L) GPL ditulis dengan C / C ++, sayangnya. Ini berbicara tentang "Kode Sumber", "Kode Objek", "Penghubung Dinamis", "Penghubung Statis", "Penyusun" dan "Penerjemah Kode Obyek". Jadi menerjemahkan ini untuk bahasa lain yang tidak mengikuti teknik kompilasi yang sama (seperti bytecode Java, kompilasi tepat waktu Python atau sifat yang ditafsirkan Javascript) memerlukan beberapa dugaan dan asumsi. Ketika Anda berbicara tentang hukum - yaitu berpikir tentang kasus-kasus pengadilan akhirnya di mana dua pihak berdebat - tidak memiliki perbedaan yang jelas adalah HAL YANG BURUK.

Sepotong kode standar berlisensi GPL cukup mudah. Siapa pun yang menggunakan kode itu diharapkan melepaskan kode mereka ke semua pengguna saat mereka mendistribusikan atau menjualnya. Itulah virus GPL yang ingin diciptakan dan dilakukan oleh Richard Stallman dengan jelas dan bersih.

LGPL pada awalnya merupakan upaya untuk memungkinkan "perpustakaan" yang tidak akan viral. Tetapi mereka masih menginginkan pengguna akhir untuk dapat mengganti perpustakaan sendiri, maka perbedaan antara menghubungkan "statis" dan "dinamis" - pengguna dapat bertukar ke perpustakaan berbeda yang terhubung secara dinamis, sehingga tidak perlu dilisensikan sebagai GPL. Dan tautan statis mengharuskan pengguna menjadi GPL. Lisensi sebenarnya berbicara tentang "file header", yang jelas dalam C / C ++ tetapi jelas tidak jelas ketika Anda berada di dunia Java, Python, Javascript, dll. Jadi L ("library") dari barang-barang LGPL berlumpur, paling-paling.

Ini sampai pada inti masalah. Apa pun yang tidak jelas adalah BURUK dalam dunia hukum. Jika saya melihat membangun sesuatu menggunakan komponen GPL atau LGPL, saya ingin memastikan apa kedudukan hukum saya di masa depan jika saya mendarat di pengadilan. Tetapi sampai hari ini, saya tidak yakin karena benar-benar belum ada kasus pengadilan yang baik yang membentuk preseden hukum, hanya argumen intelektual di forum seperti ini.

Di sinilah Pengecualian Classpath sangat berharga. Ini dengan jelas menyatakan bahwa kode di bawah lisensi adalah (L) GPL, tetapi apa pun yang menggunakan kode itu dapat mengikuti lisensi apa pun yang mereka inginkan. Tidak ada ifs, ands, atau buts. Jika Anda mengubah kode inti (mis. Memperbaiki bug), Anda masih harus melepaskan perubahan itu sebagai bagian dari GPL. Tetapi menggunakan TIDAK menginfeksi Anda.

Dari perspektif bisnis, saya mengerti mengapa beberapa tidak mau menyentuh kode GPL dengan kutub 10 '. Kedudukan hukum tidak jelas dan bisnis mungkin tersengat satu dekade ke depan ketika preseden hukum akhirnya ditetapkan. Atau mereka mungkin terjebak di pengadilan selama bertahun-tahun berjuang untuk menetapkan preseden hukum. Bagaimanapun mereka tidak mau mengambil risiko biaya pertempuran itu. Menambahkan klausa Pengecualian Classpath menghilangkan pertanyaan hukum dan menghindari kasus pengadilan (serius) potensial.

Jadi, bagi saya, Pengecualian Classpath jauh berbeda dari LGPL. Ini adalah cara yang bersih secara hukum untuk menarik garis terang yang memungkinkan penggunaan kode sumber atau pustaka GPL atau LGPL non-GPL.

Steve
sumber
21
IANAL, tetapi saya adalah salah satu pencipta Pengecualian Classpath, dan ini adalah jawaban yang tepat. Pengecualian dibuat untuk mendukung kasus penggunaan tersemat yang dikompilasi AOT di mana pengembang akan secara statis menghubungkan binari (dengan gcj dalam kasus kami). Kami membutuhkan sesuatu seperti lisensi libgcc, jadi saya menulis versi pertama Pengecualian Classpath berdasarkan itu. Sejak itu telah matang, tetapi rohnya sama.
Anthony Green
6

GPL dengan pengecualian classpath berperilaku seperti LGPL untuk sebagian besar kegunaan.

Itu berarti Anda harus dapat mengirimkan sumber untuk perpustakaan sesuai permintaan. Itu tidak berarti Anda harus dapat mengirimkan sumber Anda sendiri. Itu terjadi berarti Anda tidak perlu mengirim cara untuk mengganti perpustakaan jika Anda secara statis menghubungkannya, tetapi Anda tidak dapat menggunakan kunci publik untuk mencegah penggantian.

Joshua
sumber
-3

Sepertinya lisensi gaya "GPL with classpath exception" mungkin lebih tua dari LGPL.

Mungkin satu-satunya alasan orang masih menggunakannya, adalah karena kode GPL tidak dapat dimigrasi ke kode LGPL tanpa izin tertulis dari semua orang yang pernah berkontribusi kode.

Abhi Beckert
sumber
7
Versi pertama LGPL dirilis pada tahun 1991, sehingga mendahului Java. en.wikipedia.org/wiki/LGPL
Thilo
Itu mendahului java, tetapi apakah itu mendahului semua kode di dalam Java? Mungkin rilis pertama Java berisi kode dari beberapa proyek "GPL with classpath" yang lebih lama.