Dapatkah saya menggunakan perangkat lunak berlisensi GPL secara komersial di server saya jika saya hanya mendistribusikan perangkat lunak klien?

15

Saya memahami aturan-aturan dari GPL yang menyatakan bahwa jika saya mendistribusikan perangkat lunak menggunakan kode GPL, maka kode harus dapat berlisensi di bawah GPL .

Namun, saya bertanya-tanya apa aturannya dalam kasus ini: Saya membuat layanan di mana saya akan menjual dan mendistribusikan perangkat lunak sisi klien .

Perangkat lunak sisi klien sama sekali tidak memiliki kode GPL di dalamnya. Ini 100% kode saya sendiri.

Namun, perangkat lunak klien akan terhubung ke server saya, yang secara internal menggunakan kode GPL.

Saya tidak mendistribusikan perangkat lunak sisi server saya; perangkat lunak sisi server akan hidup pada server khusus yang saya kontrol sendiri, tetapi perangkat lunak sisi klien tidak akan berfungsi tanpa tersambung ke server tersebut.

Apakah ini dianggap sebagai satu perangkat lunak? Jika saya melakukan ini, apakah saya harus melisensikan kode sumber sisi klien saya sebagai GPL? Atau, bisakah saya menjual perangkat lunak sisi klien tanpa merilis kode sumbernya?

Steven Jeffries
sumber

Jawaban:

12

Ini bukan masalah yang jelas. Pertimbangkan dua ujung ekstrem dari spektrum:

  1. Perangkat lunak klien milik Anda adalah klien HTTP dan memberikan respons HTML. Ini dapat bekerja dengan server HTTP apa pun. Server HTTP yang Anda gunakan untuk layanan Anda kebetulan menggunakan komponen GPL.

  2. Anda memiliki program yang menggunakan komponen berlisensi GPL. Anda memilih titik sembarang dalam operasi program itu dan memecah program menjadi dua program. Kedua program berkomunikasi melalui jaringan yang benar-benar berlebihan. Anda menempatkan semua komponen berlisensi GPL dalam program pertama dan lisensi di bawah GPL, dan Anda melisensikan program lain di bawah lisensi yang tidak kompatibel dengan GPL.

Kasus pertama jelas oke. Kasus kedua jelas tidak oke. Anda belum memberikan banyak informasi tentang kasus khusus Anda, dan bahkan jika Anda melakukannya, hanya putusan pengadilan yang dapat memutuskan secara pasti apakah Anda benar.

GPL FAQ mengatakan hal ini tentang program yang dapat dioperasikan dan dilisensikan secara terpisah :

Namun, dalam banyak kasus Anda dapat mendistribusikan perangkat lunak yang dilindungi GPL di samping sistem milik Anda. Untuk melakukan hal ini secara sah, Anda harus memastikan bahwa program yang bebas dan tidak bebas berkomunikasi dengan tangan terbuka , bahwa mereka tidak digabungkan dengan cara yang akan menjadikan mereka secara efektif satu program.

Perbedaan antara ini dan "menggabungkan" perangkat lunak yang dicakup GPL sebagian adalah masalah substansi dan sebagian bentuk. Bagian substantifnya adalah ini: jika dua program digabungkan sehingga mereka menjadi dua bagian dari satu program secara efektif, maka Anda tidak dapat memperlakukannya sebagai dua program yang terpisah. Jadi GPL harus mencakup semuanya.

Anda harus memutuskan apakah menurut Anda klien Anda adalah server yang memenuhi standar "dua bagian dari program yang sama" (dan karena itu masing-masing harus dilisensikan di bawah GPL) atau tidak. FAQ GPL memberikan penjelasan lebih lanjut tentang topik ini pada pertanyaan lain :

Di mana garis antara dua program yang terpisah, dan satu program dengan dua bagian? Ini adalah pertanyaan hukum, yang akhirnya akan diputuskan oleh hakim. Kami percaya bahwa kriteria yang tepat tergantung pada mekanisme komunikasi (eksekutif, pipa, rpc, pemanggilan fungsi dalam ruang alamat bersama, dll.) Dan semantik komunikasi (jenis informasi apa yang dipertukarkan).

...

Sebaliknya, pipa, soket dan argumen baris perintah adalah mekanisme komunikasi yang biasanya digunakan antara dua program yang terpisah. Jadi ketika mereka digunakan untuk komunikasi, modul biasanya adalah program yang terpisah. Tetapi jika semantik komunikasi cukup intim, bertukar struktur data internal yang kompleks, itu juga bisa menjadi dasar untuk mempertimbangkan dua bagian sebagai digabungkan ke dalam program yang lebih besar .

Jadi, komunikasi jaringan tentu saja lulus tes "mekanisme komunikasi" tetapi tidak jelas di mana pasangan klien / server Anda jatuh pada tes "semantik komunikasi".

apsillers
sumber
Apakah masuk akal untuk mendasarkan perbedaan pada sejauh mana interfacing antara program adalah publik? Jika misalnya saya menerapkan sistem bermain catur yang menggunakan program antarmuka pengguna GPL yang berkomunikasi dengan mesin catur berpemilik, dan saya mendokumentasikan bagaimana orang lain yang ingin menulis mesin catur mereka sendiri dapat membuatnya menggunakan front-end UI yang sama, saya akan berpikir bahwa itu harus memuaskan semangat (dan mudah-mudahan surat) dari GPL meskipun, kecuali seseorang kebetulan menulis mesin alternatif, ujung depan UI tidak akan memiliki tujuan selain berbicara dengan program berpemilik.
supercat
Hmm. Saya mengajukan pertanyaan ini dengan sangat samar karena saya hanya ingin tahu tentang GPL secara umum. Namun, saya pikir saya mengerti perbedaannya sekarang. Jika server saya memiliki informasi akun pengguna yang harus dijalankan oleh perangkat lunak klien saya, maka itu jelas melanggar GPL. Jika server saya adalah sesuatu seperti server paket relay yang hanya memungkinkan dua versi perangkat lunak klien saya untuk berkomunikasi satu sama lain, maka itu akan baik-baik saja. Apakah saya benar dalam asumsi-asumsi ini?
Steven Jeffries
4

Dua proses berkomunikasi melalui jaringan tidak memerlukan penciptaan karya turunan seperti cara keterkaitan yang dapat dieksekusi dengan perpustakaan. Jadi kode GPL di server tidak berlaku untuk kode klien.

Di bawah GPL, Anda diharuskan mendistribusikan kode sumber yang dimodifikasi saat Anda mendistribusikan binari. Karena Anda tidak mendistribusikan binari server, Anda tidak diharuskan mendistribusikan kode sumber server.

GNU Affero GPL adalah lisensi yang mirip dengan GPL dengan verbage tambahan yang dirancang untuk menutup lubang loop ini yang ingin Anda manfaatkan (lihat: http://www.gnu.org/licenses/why-affero-gpl.html dan http://en.wikipedia.org/wiki/Affero_General_Public_License#Examples_of_web_applications_under_GNU_AGPL ).

Penafian: Saya seorang pengembang, bukan pengacara.

J. Lenthe
sumber
3
Hanya catatan peringatan: Jika klien dirancang untuk secara khusus berkomunikasi dengan ini perangkat lunak server, maka sangatlah mungkin bahwa FSF tidak mempertimbangkan server dan perangkat lunak klien sebagai salah satu produk. Lihat juga di sini di FAQ GPL
Bart van Ingen Schenau
Di sisi lain, jika pihak ketiga menulis perangkat lunak klien untuk berkomunikasi dengan server Anda, tanpa pernah melihat perangkat lunak server atau lisensi, argumen itu terlihat konyol. Dan itu berarti Microsoft dapat menuntut siapa pun yang menulis perangkat lunak yang terhubung ke server Outlook, misalnya.
gnasher729
2

Apakah perangkat lunak klien bergantung pada perangkat lunak server untuk berfungsi dengan baik? Dengan kata lain, akankah perangkat lunak klien berfungsi tanpa terhubung ke server?

Jika jawaban untuk itu adalah "ya," dan server hanya menyediakan fitur tambahan, dan bukan dukungan inti, untuk perangkat lunak klien Anda, maka Anda mungkin jelas. Jika perangkat lunak server merupakan bagian integral dari perangkat lunak klien dan menyediakan fungsionalitas inti untuk perangkat lunak klien (yaitu perangkat lunak klien tidak akan berfungsi tanpa server), maka kombinasinya adalah karya turunan, tercakup dalam GPL.

Robert Harvey
sumber
Saya akan berbuat salah di sisi hati-hati dan tidak menggunakan kode GPL di server saya kemudian.
Steven Jeffries
2
@StevenJeffries Jawaban ini bertentangan dengan praktik saat ini dan persyaratan GPL. Selama saya tidak mendistribusikan perangkat lunak atau karya turunan, saya bebas untuk menggunakan perangkat lunak GPL di server, misalnya Linux atau GCC atau WordPress. Hanya menggunakan perangkat lunak tidak membuat karya turunan. Dalam kasus GPL, itu dianggap baik-baik saja ketika setidaknya pemisahan tingkat proses terlibat (tidak ada memori bersama, tidak ada struktur data bersama). Lihat jawaban J. Lenthe untuk solusi yang benar dan untuk referensi.
amon
@amon: Jika Anda bahkan tidak berbagi struktur data antara server dan klien, maka Anda benar. Tapi saya ragu itu masalahnya. Perbedaan yang saya gambar (apakah perangkat lunak klien tergantung pada perangkat lunak server untuk eksekusi yang tepat) tidak sewenang-wenang; itu salah satu dari dua persyaratan penting untuk apa yang FSF anggap bukan "pekerjaan turunan"; yang lainnya adalah "komunikasi panjang lengan." Jangan mengambil kata-kata saya untuk itu; baca sendiri di situs web FSF.
Robert Harvey
@amon: Anda dapat membaca lebih lanjut tentang itu di sini .
Robert Harvey
@amon Item GPL FAQ yang sangat relevan lainnya (baik sebagai tindak lanjut setelah membaca tautan Robert) adalah ini, khususnya tiga paragraf terakhir: gnu.org/licenses/gpl-faq.html#MereAggregation
apsillers