Bu gıcık edici soruyu yazmadan edemezdim zira yeni öğrenilen bir şey için “Yenilir mi?” diye sormayı çok seviyorum 🙂
Linux Yaz Kampı 2013 devam ediyor. Ruby-Rails eğitiminde öğrendiğim bir başka konu olan “Semantik Versiyonlama” olayı beni çok şaşırttı zira bu konuda bazı ciddi kuralların olduğunu bilmiyordum.
Sürüm kontrol (version control) sistemlerini kullananlar için semantik versiyonlama çok önemli bir mevzu. Özelik ekleme, hata kapama (hotfix), ufak yamalar gibi işlerin mutlaka sürüm etiketine sahip olması gerekiyor. Ve bunlar için de belirli kurallar var. Tabi her proje için farklı versiyonlama sistemlerini kullanabilirsiniz, doğal olarak da kuralları da farklı olacaktır. Burada en bilinenlerinden biri olan semantik versiyonlamadan bahsetmek istedim. Aşağıdaki siteden semantik versiyonlamanın kurallarına bakabilirsiniz (İngilizce):
Şimdi genel hatları ile semantik versiyonlamanın kurallarına bakalım:
MAJOR.MİNÖR.YAMA
1) Major: Yazılımın müşteriye sunulabilir hale geldiğinde 0’dan 1’e yükselir. Sonrası için çoğunlukla API değişmesi gibi köklü değişiklikler için sürüm atlar. Yani, 1.0’dan sonraki Major sürüm değişikliklerinde geriye dönük uyumsuzluklar olacaktır.
2) Minör: Yazılıma yeni özellikler eklendiğinde sürüm atlar. Tabi her özellik eklemesi için burayı yükselteceğiz diye bir durum yok. Size kalmış. Major’un 0 sürümü hariç daima müşterinin kullanımına hazırdır. Geriye dönük uyumsuzluk beklenmez.
3) Yama (Patch): Hata kapatma ve ekstra dil desteği gibi işlevselliğin değişmediği durumlarda sürüm atlar. Minörde olduğu gibi, Major’un 0 durumu hariç daima kullanıma hazırdır. Geriye dönük uyumsuzluk beklenmez.
Bir de bunların dışında, çok az kullanılan dördüncü bir kısım daha bulunur. Bu kısım genellikle release denemeleri, kod iyileştirmeleri (optimizasyon), beta sürümleri gibi durumlarda kullanılır.
Bir başka önemli kural ise, eğer bir kısım sürüm atlarsa, bunun sağ tarafında olanlar daima sıfırlanır. Ve bir kısım 9’u aşarsa, sol taraf yükseltilir diye bir mantık yok. Kendi kısmında 10’dan itibaren devam eder.
Örnek bir senaryo oluşturalım:
- Yazılımı ilk defa oluşturduk ve temel özellikler ekledik. Sürüm no: 0.1.0
- Yazılıma başka bir özellik daha ekledik. Sürüm no: 0.2.0
- Yazılımda bir hata bulduk ve hatayı kapadık. Sürüm no: 0.2.1
- Yazılıma bir başka özellik daha ekledik. Sürüm no: 0.3.0
- Yazılımı ilk defa müşteriye sunuyoruz. Sürüm no: 1.0.0
ÖNEMLİ: Yazılımı ilk defa müşteriye sunmak demek, aslında son deneme sürümünü teslim etmek anlamına geliyor. Dolayısı ile bu senaryoda 0.3.0 ve 1.0.0 aslında aynı olabilir. Ve uyumsuzluk beklenmeyecektir. Major sürüm atlamasındaki uyumsuzluklar daima 1’den sonraki sürüm atlamalarındadır.
Ve asıl önemli sorunun cevabı: Yenmezmiş 🙂