Sürüm Numaraları Rastgele Değildir
Bir uygulamayı güncellerken karşınıza çıkan "2.4.1" gibi bir numara ilk bakışta anlamsız bir etiket gibi görünebilir. Oysa bu üç basamaklı dizi, çoğu zaman geliştiricinin size dolaylı yoldan bir mesaj verdiği bir sistemin parçasıdır: bu güncelleme ne kadar büyük, ne kadar riskli, eski kullanımınızı bozup bozmayacak.
Bu mantığın en yaygın kabul görmüş biçimine "semantik sürümleme" (Semantic Versioning, kısaca SemVer) deniyor. Yazılım dünyasında özellikle kütüphaneler, paketler ve uygulamalar arasında ortak bir dil görevi görüyor. Bu yazıda sistemin nasıl çalıştığı, hangi durumlarda işe yaradığı, sınırları ve kendi küçük projenizde nasıl uygulamaya başlayabileceğinizi ele alacağız.
MAJOR.MINOR.PATCH: Temel Yapı Nedir
Semantik sürümlemenin çekirdeği üç basamaklı bir formattır: MAJOR.MINOR.PATCH. Örneğin 2.4.1 numarasında 2 major, 4 minor, 1 ise patch basamağıdır.
Kabaca şöyle özetlenebilir:
- MAJOR artışı: Geriye dönük uyumsuz, yani "breaking" değişiklikler yapıldığında artırılır.
- MINOR artışı: Eski kullanımı bozmadan yeni özellik eklendiğinde artırılır.
- PATCH artışı: Hata düzeltmesi veya küçük iyileştirme yapıldığında artırılır.
Burada önemli olan nokta, bu numaraların sadece "kaçıncı sürüm olduğumuzu" göstermek için değil, değişikliğin niteliği hakkında bilgi vermek için tasarlanmış olmasıdır. Yani bir sayı dizisinden çok, geliştirici ile o yazılımı kullanan kişi arasındaki bir iletişim biçimi olarak düşünülebilir. Sürüm numarasına bakarak "bu güncelleme benim kurulumumu etkiler mi" sorusuna kabaca bir cevap bulmak mümkün hale gelir.
MAJOR Sürüm: Dikkatli Olunması Gereken Değişiklikler
MAJOR basamağın artması, o yazılımın önceki sürümlerle tam uyumlu olmayabileceği anlamına gelir. Bir kütüphane veya API için bu, bazı fonksiyonların kaldırılmış, isimlerinin değişmiş ya da davranışlarının farklılaşmış olabileceği anlamına gelir.
Günlük kullanım açısından örnek vermek gerekirse: bir uygulamaya bağlı çalışan eklentiler, entegrasyonlar veya otomasyon betikleri, o uygulamanın MAJOR sürümü değiştiğinde beklendiği gibi çalışmayabilir. Bu yüzden MAJOR güncellemeler genelde "aceleyle kurulmaması, önce değişiklik notlarına göz atılması gereken" güncellemeler olarak değerlendirilir. Özellikle üzerine iş kurulu sistemlerde bu tür güncellemeler test ortamında denendikten sonra ana sisteme uygulanır.
MINOR Sürüm: Yeni Özellikler, Bozulmayan Uyumluluk
MINOR basamağın artması ise farklı bir sinyal verir: yeni bir şey eklenmiştir ama eskisi bozulmamıştır. Örneğin bir uygulamaya yeni bir menü, yeni bir ayar seçeneği veya yeni bir işlev eklendiğinde bu genelde MINOR artışla ifade edilir.
Buradaki temel ilke geriye dönük uyumluluktur: kullanıcı önceki sürümde yaptığı her şeyi yeni sürümde de aynı şekilde yapabilmelidir, üstüne bir de yeni imkanlar kazanmıştır. Bu nedenle MINOR güncellemeler genellikle MAJOR güncellemelere göre daha düşük riskli kabul edilir; kurulumdan önce büyük bir hazırlık yapma zorunluluğu doğurmaz.
PATCH Sürüm: Hata Düzeltmeleri ve Küçük İyileştirmeler
PATCH basamağı, listedeki en "sakin" değişiklik türünü temsil eder. Genellikle bir hatanın giderilmesi, bir çökme probleminin çözülmesi ya da küçük bir performans iyileştirmesi PATCH artışıyla duyurulur.
Örneğin bir uygulama belirli bir dosya türünü açarken çöküyorsa ve bu sorun bir sonraki sürümde giderilmişse, bu genelde sadece PATCH numarasının artmasıyla yansıtılır; yeni bir özellik eklenmediği ve mevcut kullanım şekli değişmediği için. Kullanıcı açısından PATCH güncellemeleri genellikle en düşük riskli güncelleme türü olarak görülür ve çoğu zaman beklemeden kurulması önerilir. Yine de "düşük risk" ile "sıfır risk" aynı şey değildir; her düzeltme beraberinde küçük yan etkiler getirebilir.
Ön Sürüm ve Build Meta Verisi Etiketleri
Semantik sürümleme sadece üç basamaktan ibaret değildir. Bazı sürüm numaralarında "1.0.0-beta.1" ya da "1.0.0+20230601" gibi ek etiketler görülür.
Tire (-) işaretinden sonra gelen kısım, ön sürüm (pre-release) etiketidir. "beta", "alpha", "rc" (release candidate) gibi ifadeler, o sürümün henüz kararlı kabul edilmediğini, test amaçlı yayınlandığını gösterir. Bu tür sürümler genellikle geniş kullanıcı kitlesine değil, geliştiriciye geri bildirim vermek isteyen, riski göze alan kullanıcılara yöneliktir.
Artı (+) işaretinden sonra gelen kısım ise build meta verisidir; genellikle o sürümün ne zaman veya hangi derleme sürecinde oluşturulduğunu belirtmek için kullanılır ve çoğunlukla sürüm karşılaştırmasında dikkate alınmaz. Bu iki etiket türü, geliştirme sürecinin şeffaflığına katkıda bulunur: kullanıcı, elindeki sürümün "deneysel" mi yoksa "üretime hazır" mı olduğunu numaraya bakarak ayırt edebilir.
Neden Önemli: Güven, Bağımlılık Yönetimi ve Otomasyon
Semantik sürümlemenin pratikteki en somut faydalarından biri bağımlılık yönetiminde ortaya çıkar. Bir yazılım projesi genellikle başka kütüphanelere veya paketlere bağımlı çalışır. Proje sahibi, "bu kütüphanenin 2.x sürümlerinin herhangi biriyle çalışabilirim ama 3.0.0'a geçersem uyumluluk kontrolü yapmam gerekir" gibi bir kural belirleyebilir. Bu, MAJOR-MINOR-PATCH ayrımı sayesinde mümkün olur.
Otomatik güncelleme araçları da benzer bir mantıkla çalışır. Birçok paket yöneticisi, PATCH ve MINOR güncellemeleri otomatik olarak uygulayabilirken MAJOR güncellemeleri manuel onaya bırakabilir; çünkü bu araçlar sürüm numarasının taşıdığı sinyale güvenir.
Bütün bunların ötesinde, semantik sürümleme geliştirici ile kullanıcı arasında bir öngörülebilirlik ilişkisi kurar. Kullanıcı, sürüm numarasına bakarak "bu güncellemeyi güvenle kurabilir miyim yoksa önce araştırmalı mıyım" sorusuna kabaca bir cevap bulabilir.
Sınırlılıkları: Her Proje Bu Kurala Uymuyor
Semantik sürümleme yaygın olsa da evrensel bir zorunluluk değildir. Bazı yazılımlar tarih bazlı veya yıl bazlı sürümleme tercih eder; örneğin sürüm numarasının yayınlandığı yılı ve ayı yansıttığı sistemler vardır. Bu tür projelerde MAJOR.MINOR.PATCH mantığı aranmaz, çünkü sürüm numarası zamanı belirtmek için tasarlanmıştır, değişikliğin niteliğini değil.
Ayrıca semantik sürümlemeyi benimsediğini iddia eden bazı projeler de kurallara harfiyen uymayabilir; bir MINOR güncelleme aslında beklenmedik şekilde eski kullanımı bozabilir, ya da bir PATCH güncelleme küçük bir davranış değişikliği getirebilir. Bu nedenle sürüm numarası faydalı bir gösterge olsa da tek başına kesin bir garanti sayılmamalıdır. Kullanıcının, özellikle kritik sistemlerde, değişiklik notlarını okuma alışkanlığını tamamen bırakmaması önerilir.
Kendi Projenizde Semantik Sürümlemeye Nasıl Başlanır
Küçük bir projede semantik sürümlemeyi uygulamaya başlamak istiyorsanız, karmaşık bir sisteme ihtiyaç yoktur. Birkaç basit adım yeterli olabilir:
- Değişiklik günlüğü (changelog) tutun. Her sürümde neyin eklendiğini, neyin düzeltildiğini ve neyin kaldırıldığını kısa maddeler halinde kaydedin. Bu hem sizin hem de kullanıcılarınızın hangi sürümde neyin değiştiğini takip etmesini kolaylaştırır.
- Sürüm artışına karar verirken kendinize üç soru sorun: Bu değişiklik mevcut kullanıcıların eski kullanım şeklini bozuyor mu (MAJOR)? Yeni bir özellik ekleniyor ama eskisi çalışmaya devam ediyor mu (MINOR)? Yoksa sadece bir hata mı düzeltiliyor (PATCH)?
- 1.0.0'dan önce dikkatli olun. SemVer'de 0.x.y sürümleri genellikle "henüz kararlı değil, her an değişebilir" anlamına gelir; bu yüzden ilk kararlı sürümü 1.0.0 olarak işaretlemek yaygın bir tercihtir.
- Küçük başlayın. İlk etapta sadece üç basamağı doğru kullanmak bile, projenizin kullanıcılarına güncellemelerin niteliği hakkında net bir sinyal vermenizi sağlar.
Kullanıcılar İçin Pratik Çıkarım: Sürüm Numarasından Risk Tahmini
Bir uygulama ya da kütüphane güncellemesiyle karşılaştığınızda sürüm numarasına bakmak, güncellemenin kabaca ne kadar riskli olabileceği hakkında hızlı bir fikir verebilir. MAJOR basamağı değişmişse, güncellemeden önce değişiklik notlarını okumak, özellikle o yazılıma bağlı başka araçlarınız veya entegrasyonlarınız varsa, makul bir önlemdir.
MINOR ve PATCH güncellemeler genellikle daha güvenli kabul edilir ve çoğu zaman sorunsuz kurulabilir. Ancak bunun mutlak bir garanti olmadığını unutmamak gerekir; her projenin bu kurallara ne kadar sadık kaldığı değişkenlik gösterebilir. Semantik sürümleme, mükemmel bir kesinlik sunmasa da, sürüm numaralarını rastgele rakamlar olmaktan çıkarıp anlamlı bir iletişim aracına dönüştüren pratik ve yaygın kabul görmüş bir yaklaşımdır.