Anlaşılabilirlik adına, lütfen “GNU GPL 2 altında lisanslanmıştır” demeyin!
yazan Richard Stallman1989 ylında GNU Genel Kamu Lisansını (GNU GPL) yazdığımda, değişikliklerin gerekli olabileceğini farketmiştim: FSF'nin günün birinde yeni bir sürüm yayınlamak için nedenleri olabilirdi. Bu yüzden lisansa “1. sürüm” dedim ve kullanıcıların programlarını sonraki lisans sürümlerine güncelleyebilmesi için bir çerçeve oluşturdum.
Özgür bir lisansla bunu yapmanın alışılmış bir yolu yoktu; bildiğim kadarıyla, daha önce hiç yapılmamıştı. Geliştiriciler bir programın yeni bir sürümünü farklı bir lisans altında yayınlayabilirdi ve belki de eski sürümlerin yeni dağıtımlarını farklı bir lisans altında yapabiliyorlardı. Ancak halihazırda yayınlanmış program sürümleri için gelecekteki bir lisansı kullanma seçeneğini kullanıcılara öneren sistematik bir yol oluşturulmamıştı.
Geliştiricilerin bu yeniliğe nasıl tepki vereceğini bilmiyordum, bu yüzden her bir geliştiriciye gelecekteki sürümlere izin vermeleri için bir seçenek sundum. Bunun anlamı şuydu, geliştiriciler isterlerse programı sadece GNU GPL sürüm 1 altında yayınlayabilirdi veya GPL sürüm 1 ve daha sonraki bir sürüm altında yayınlayabilirdi. Geliştiricilerin tercihlerini ifade ettikleri yer, her kaynak dosyanın başında yer alan lisans bildirimiydi. Bu GPL'nin karar ifade edilsin dediği yerdi.
Özgür Yazılım Vakfı geliştiricileri veya sonraki bir sürümü seçmeye teşvik etti, çünkü bu kullanıcıların GNU GPL sürüm 1 altında veya sürüm 2 (bir zamanlar sürüm 2 vardı) altında veya sürüm 3 altında bu programı kullanmakta özgür olacakları anlamına geliyordu. Ve eğer bir gün gelir de sürüm 4 çıkarırsak onu sürüm 4 altında da kullanmakta özgür olacaklardır.
O zamandan beri FSF 1991'de GNU GPL sürüm 2'yi ve 2007 yılında sürüm 3'ü yayınladı. Her sürüm geliştiricilere tek bir lisans sürümünde ısrarcı olma veya gelecek lisans sürümleri altında da kullanıma izin verme seçeneği sunuyor. (GPL 3 “vekil” [proxy] seçeneği de sunuyor, belirli bir web sayfası sonradan belirli bir gelecekteki sürümü kullanma izni verebilir.)
Lisans yükseltme izniyle program yayınlamak, farklı GPL sürümleri altında yayınlanmış programlar arasındaki uyumsuzluklardan kaçınmak için çok önemlidir.
İki farklı copyleft lisansı, bazı açık uyumluluk düzeneğinin yokluğunda neredeyse kaçınılmaz bir şekilde uyumsuzdur. Bunun nedeni, her birinin programın değiştirilmiş sürümlerinin tam da aynı lisansla dağıtılmasını gerektirmesidir. Sonuç olarak, sadece GPL sürüm 2 altında yayınlanmış bir kod, sadece GPL sürüm 3 altında yayınlanmış bir kodla birleştirilemez.
GPL sürümleri arasındaki uyumluluk için düzenek bir programı “sürüm N veya daha sonraki bir sürüm” altında yayınlamaktır. GPL-2.0-or-later [GPL-2.0-veya-sonraki] altında yayınlanmış bir program, GPL-3.0-or-later [GPL-3.0-veya-sonraki] altında yayınlanmış bir programla birleştirilebilir, çünkü “3 veya sonraki” “2 veya sonraki”'nin bir alt kümesidir.
Bazı geliştiriciler “Şimdi sadece GNU GPL sürüm 3 altında yayınlayacağım. GPL sürüm 4'ü gördüğümde, eğer onu beğenirsem, programımı sürüm 4 altında kullanılması için tekrar lisanslayacağım” diyecekler. Bu eğer tek geliştirici sizseniz, hala hayattaysanız, sağlıklıysanız, temas kurulabilir durumdaysanız ve o dönem ilgileniyorsanız işe yarar. Ancak telif hakkı bu günlerde anlamsızca uzun süreler boyunca sürüyor; büyük reformların yokluğunda, kodunuzun telif hakkı ABD'de ölümünüzden 70 yıl sonraya kadar sürüyor (Meksika'da 100 yıl). Değerlendirmek için etrafta olmadığınızda kodunuzu GPL sürüm 4 altında yeniden lisanslamaları için varisleriniz için gerekli düzenlemeleri yaptınız mı?
Ancak yaşamınız sırasında da sorun çıkacaktır. Eğer GNU GPL sürüm 4'ü 10 yıl sonra yayınlarsak ve diyelim 50 başka kişi programınıza katkıda bulundu, eklenmiş kodlarını, sırf yapabiliyorsunuz diye GPL-3.0-only [sadece GPL 3.0] altında yayınladıysanız? İlk başta yayınladığınız program için GPL 4'ü onaylayabilirsiniz ama 50 sonradan gelen geliştiriciyle kendi ekledikleri kısımların GPL 4 kullanım iznini o zaman almak için bağlantıya geçmek büyük bir iş olacaktır.
Bu gibi sorunlardan kaçınmanın yolu, başlangıçta lisans bildiriminde gelecekteki GPL sürümlerini kabul etmektir. Lütfen yayınladığınız her önemli kaynak dosyaya kullandığınız GPL sürümünün sonunda gösterilmiş biçimdeki lisans bildirimini koyun.
Lisans uyumluluğunu bu şekilde ele aldığımız için, insanlar bir programın “GNU GPL sürüm 2” altında yayınlandığını söylediklerinde, programın lisanslanması konusunu belirsiz bırakmış oluyorlar. GPL-2.0-only [sadece GPL-2.0] altında mı yoksa GPL-2.0-or-later [GPL-2.0-veya-sonraki] altında mı yayınlanmış? Kodu GPL-3.0-or-later [GPL-3.0-veya-sonraki] altında yayınlanmış paketlerle birleştirebilir misiniz?
GitHub gibi siteler kullanıcıları diğer lisans seçeneklerinin yanında “GPL 3” veya “GPL 2” seçmeye davet ettiğinde ve gelecek sürümler sorununu ortaya koymadığında, bu durumda binlerce geliştiricinin kodlarının lisansını belirsiz bırakmasına yol açar. Bu kullanıcılardan “only” [sadece] veya “or later” [veya sonraki] arasından seçim yapmalarını istemek, kodlarının lisansını belirginleştirmelerine yol açar. Ayrıca ikinci seçeneğin gelecekteki uyumsuzluklardan nasıl kaçındığını açıklama imkanı da sunar.
“GPL-2.0” veya “GPL-3.0” gibi kısaltılmış lisans tanımlayıcıları da karışıklığa yol açacaktır. “2 only” ve “2 or later” arasındaki farkı tanımayan insanlar ve kuruluşlar, bir ayrım yapılması gerektiğinin farkına varmadan her iki durumda da “GPL-2.0” yazmaya yatkın olacaklardır.
Bu yüzden, SPDX lisans tanımlayıcı kullanırken, şunlardan birini kullanın:
- GPL-2.0-only veya GPL-2.0-or-later
- GPL-3.0-only veya GPL-3.0-or-later
- LGPL-2.0-only veya LGPL-2.0-or-later
- LGPL-2.1-only veya LGPL-2.1-or-later
- LGPL-3.0-only veya LGPL-3.0-or-later
- AGPL-3.0-only veya AGPL-3.0-or-later
- GFDL-1.3-only veya GFDL-1.3-or-later
Lütfen aşağıdaki eski, muğlak lisans tanımlayıcılarını kullanmayın, zamanla bunlar kullanımdan kalkacaktır:
- GPL-2.0
- GPL-3.0
- LGPL-2.0
- LGPL-2.1
- LGPL-3.0
- AGPL-3.0
- GFDL-1.3.
Geliştiricilere GPL sürüm “1 sadece” ve GPL sürüm “1 veya sonraki” seçeneğini sunmak 1989'da mecburi gözükmüştü, ancak olmasaydı daha iyi olacak olan bir karmaşıklık yarattı. Bu esnada, kullanıcılara sonraki lisans sürümlerine koşulsuz yükseltme seçeneği sunan birçok lisans yaygın bir şekilde kabul gördü. Bunların arasında Mozilla Kamu Lisansı ve Eclipse Kamu Lisansı da var. Her sürüm, kullanıcının, eğer mevcutsa aynı lisansın sonraki sürümlerini kullanmakta özgür olduğunu söyler. Creative Commons copyleft lisansı, CC BY-SA, kullanıcıların çalışmayı değiştirdiklerinde lisans sürümünü yükseltmelerine de izin verir.
Belki de GNU GPL'nin gelecekteki sürümlerinde bu yaklaşıma geçmeliyiz. Ama bu gelecekte düşünmemiz gereken bir şey.
SPDX'e, “veya sonraki” ile “sadece” seçeneğini belirgin kılmak için GNU lisans ailesinin kısa tanımlayıcılarını değiştirmeye karar verdikleri için teşekkür ediyoruz. Lisans tanımlayıcılar için SPDX Lisans Listesinin gelecek sürümü yukarıda önerilen tanımlayıcıları kullanacak. “GPL-2.0,” gibi muğlak tanımlayıcılar kullanımdan kalkacak. İnsanları, bir an önce muğlak tanımlayıcılar yerine bu yeni belirsizliğe yer vermeyen tanımlayıcıları kullanmaya çağırıyoruz.
Belirgin bir şekilde sadece veya herhangi bir sonraki sürüm şeklindeki tanımlayıcıları kullanarak topluluğun farklılıktan haberdar olmasını sağlayabilir ve geliştiricileri kararlarını açıkça beyan etmeye cesaretlendirebiliriz.