Alasan memberi beberapa lisensi untuk satu kode
Pemegang hak cipta dapat mengizinkan kode yang sama dengan beberapa syarat sekaligus. Penerima cukup memilih salah satu dan mematuhi syaratnya. Tujuannya secara garis besar ada dua.
- Memperluas kompatibilitas — agar cocok dengan berbagai ekosistem yang berbeda.
- Model bisnis — merilis sebagai open source sekaligus menjual lisensi komersial terpisah.
Jenis 1: dua lisensi permisif sekaligus — MIT OR Apache-2.0
Cara ini dipakai bahasa Rust dan sebagian besar crate Rust. Pengguna memilih yang lebih nyaman antara MIT atau Apache-2.0.
- Jika memilih Apache-2.0, pengguna mendapat pemberian paten yang tegas.
- Jika memilih MIT, kode dapat dimasukkan juga ke proyek GPL-2.0-only (karena posisi FSF bahwa Apache-2.0 tidak kompatibel dengan GPL-2.0).
Karena mendapatkan kedua keuntungan sekaligus, cara ini populer di kalangan penulis pustaka. Kebiasaannya adalah menaruh dua file, LICENSE-MIT dan LICENSE-APACHE, di repositori.
Jenis 2: copyleft + komersial — 'pakai GPL, atau bayar'
Kode dirilis sebagai GPL·AGPL, dan kepada perusahaan yang tidak ingin menanggung kewajiban membuka sumber dijual lisensi komersial lewat kontrak terpisah. MySQL (GPL + lisensi komersial Oracle) dan Qt (LGPL-3.0/GPL + komersial) adalah contoh utamanya.
Model ini hanya berjalan jika pemegang hak cipta memiliki hak atas seluruh kode. Sebab, untuk kode yang dikontribusikan pihak luar hanya di bawah GPL, pemegang hak cipta tidak berhak menjualnya dengan lisensi komersial.
CLA dan DCO
- CLA (Contributor License Agreement): kontrak di mana kontributor memberikan hak luas (termasuk pelisensian ulang) atas kontribusinya kepada pengelola proyek, atau mengalihkan hak ciptanya. Praktis diperlukan untuk lisensi ganda komersial. Ada juga bentuk seperti ICLA Apache Software Foundation yang hanya memberi hak pelisensian ulang dan membiarkan hak cipta tetap pada kontributor.
- DCO (Developer Certificate of Origin): cara di mana kontributor mengonfirmasi di setiap commit bahwa 'saya berhak menyerahkan kode ini di bawah lisensi proyek ini' (menambahkan baris
Signed-off-by:dengangit commit -s). Dipakai kernel Linux. DCO tidak memberi hak pelisensian ulang sehingga tidak cukup untuk lisensi ganda komersial.
Cara menulis dengan ekspresi SPDX
Hubungan antarbeberapa lisensi ditulis dengan ekspresi lisensi SPDX.
| Ekspresi | Arti | Contoh |
|---|---|---|
A OR B | Pilih dan ikuti salah satu (lisensi ganda pilihan) | MIT OR Apache-2.0 |
A AND B | Keduanya harus diikuti (saat bagian yang berbeda tercampur) | MIT AND BSD-3-Clause |
A WITH pengecualian | Menambahkan klausul pengecualian pada lisensi | GPL-2.0-only WITH Linux-syscall-note |
| Tanda kurung | Menentukan urutan penggabungan | (MIT OR Apache-2.0) AND Unicode-3.0 |
Jika OR dan AND tertukar, artinya menjadi berlawanan. Jika pengguna boleh memilih, pakai OR; jika semuanya harus dipatuhi, pakai AND.
Hal yang perlu diperhatikan
- Hak yang sudah diterima tetap berlaku: meski kelak hanya lisensi komersial yang dipertahankan, izin untuk versi yang sebelumnya didistribusikan sebagai open source biasanya tetap berlaku.
- Berbeda dengan 'open core': model yang menjadikan inti sebagai open source lalu menjual fitur tambahan sebagai produk komersial tertutup bukanlah lisensi ganda. Lisensi ganda berarti memberi dua lisensi untuk kode yang sama.
- Jangan disamakan dengan lisensi source-available: makin banyak kasus beralih ke lisensi seperti BUSL·SSPL yang sumbernya terlihat tetapi bukan open source menurut standar OSI. Ini strategi yang berbeda dari lisensi ganda.
- File pemberitahuan harus tepat: untuk lisensi pilihan, sediakan teks lengkap setiap lisensi dan tulis dengan jelas di README bahwa 'pilih salah satu'.
Contoh penerapan
Untuk menerapkan lisensi ganda gaya Rust, unduh file MIT dan Apache-2.0 masing-masing dari generator, simpan sebagai LICENSE-MIT dan LICENSE-APACHE, lalu tulis license = "MIT OR Apache-2.0" di metadata. Di header setiap file, tulis SPDX-License-Identifier: MIT OR Apache-2.0.
Artikel ini adalah informasi umum, bukan nasihat hukum. Untuk keputusan penting, konsultasikan dengan ahli.
Sumber
- SPDX Specification, License Expressions — https://spdx.github.io/spdx-spec/v2.3/SPDX-license-expressions/
- Rust API Guidelines, Licensing — https://rust-lang.github.io/api-guidelines/necessities.html
- Developer Certificate of Origin — https://developercertificate.org/
- Apache ICLA — https://www.apache.org/licenses/contributor-agreements.html