Pratik Yazılım

Yazılım Sürümü Numaralandırması Nasıl Anlaşılır?

Bir uygulamanın güncelleme ekranında "3.14.2 sürümünden 4.0.0 sürümüne geçiliyor" yazısını gördüğünüzde içinizde bir tedirginlik oluşuyorsa, bu his boşuna değil. Bu üç sayı rastgele artmıyor; her biri geliştiricinin size verdiği bir mesaj taşıyor. Doğru okuduğunuzda hangi güncellemeyi gözü kapalı kurabileceğinizi, hangisinden önce yedek almanız gerektiğini anlarsınız.

1.2.3 formatındaki sayılar tam olarak ne anlatıyor?

Bu format, yaygın olarak semver sürüm numarası (semantic versioning, anlamsal sürümleme) olarak biliniyor. Soldan sağa üç bölümü var:

Mantık şu: sayı ne kadar soldaysa, değişiklik o kadar köklü. Ayrıca soldaki bir sayı arttığında sağındakiler sıfırlanır. Yani 2.7.4'ten sonra gelen büyük sürüm 3.0.0 olur, 3.7.4 olmaz. Bu yüzden sonu ".0.0" ile biten sürümleri gördüğünüzde "burada bir şey değişti" diye düşünmeniz doğrudur.

Peki 1.9.0'dan sonra 2.0.0 mı gelir?

Hayır, gelmesi zorunlu değil. Bu sayılar ondalık sayı değil, birbirinden bağımsız tam sayılardır. 1.9.0'dan sonra pekâlâ 1.10.0 gelebilir ve 1.10.0, 1.9.0'dan yenidir. Sürümleri metin olarak sıralayan sistemlerin en klasik hatası da budur: alfabetik sıralamada "1.10" ile "1.9" karşılaştırıldığında yanlış sonuç çıkar. Sürüm karşılaştırırken her bölümü ayrı ayrı sayı olarak düşünün.

Sonundaki -beta, -rc gibi ekler ne demek?

MAJOR.MINOR.PATCH'ten sonra tireyle eklenen kısım, sürümün henüz kararlı sayılmadığını söyler. Bunlara ön yayın etiketi denir ve şu sırayı izler:

  1. alpha: Erken aşama. Özellikler eksik, çökmeler beklenir. Sadece test amaçlı.
  2. beta: Özellikler büyük ölçüde tamam, hata avı sürüyor. Günlük işinizde kullanmayın.
  3. rc (release candidate): Yayın adayı. Ciddi bir sorun çıkmazsa aynı kod kararlı olarak yayınlanacak.

Kural olarak 1.4.0-beta.2 sürümü, 1.4.0'dan önce gelir. Yani ön yayın etiketi olan bir sürüm, aynı numaranın kararlı hâlinden daha eskidir. Bir de + işaretiyle eklenen derleme bilgisi vardır (örneğin 1.4.0+20240115); bu kısım sürüm sıralamasını etkilemez, sadece hangi derlemenin kullanıldığını gösterir.

0 ile başlayan sürümlerde durum farklı mı?

Evet, ve bu çok gözden kaçar. 0.x.y sürümleri "henüz kararlı değil" anlamına gelir. Bu aşamada geliştirici, MINOR artışıyla bile uyumluluğu bozabilir. 0.8'den 0.9'a geçen bir kütüphane, sizin kodunuzu tamamen bozabilir ve bu semver kurallarına aykırı değildir. Bu yüzden üretim ortamında 0.x sürümlerine bağlanırken sürümü sabitlemek gerekir.

Hangi güncellemede risk var, hangisinde yok?

Pratik bir risk tablosu:

Değişen bölümÖrnekRiskNe yapmalı
PATCH2.3.1 → 2.3.2DüşükHemen kurun, özellikle güvenlik notu varsa
MINOR2.3.1 → 2.4.0OrtaSürüm notlarına göz atın, kurun
MAJOR2.3.1 → 3.0.0YüksekYedek alın, eklentileri kontrol edin, mümkünse bekleyin
Ön yayın3.0.0-beta.1YüksekSadece test makinesinde

MAJOR güncellemelerde en sık yaşanan sıkıntı yazılımın kendisi değil, çevresidir: eklentiler, temalar, entegrasyonlar. Ana program yeni sürüme geçer, eklenti geliştiricisi henüz uyum sağlamamıştır. Bu yüzden büyük sürüm atlamalarında bir-iki hafta beklemek çoğu zaman en akıllı hamledir; bu arada ilk kullanıcıların bildirdiği sorunlar düzeltilir. Güncelleme öncesi yedek alma, geri dönüş planı çıkarma ve ayar dosyalarını kopyalama adımlarını sitedeki güncellemelere hazırlık rehberinde daha ayrıntılı bulabilirsiniz.

Sürüm aralığı işaretleri (^ ve ~) ne yapıyor?

Paket yöneticisi kullanıyorsanız bağımlılık dosyalarında şu ifadeleri görürsünüz:

Bir projede beklenmedik şekilde bir şey bozulduysa ve "hiçbir şeye dokunmadım" diyorsanız, muhtemelen bu işaretlerden biri arka planda bir MINOR yükseltmesine izin vermiştir. Kilit dosyalarını (lock file) sürüm kontrolüne eklemenin sebebi tam olarak budur.

Herkes bu kurallara uyuyor mu?

Ne yazık ki hayır. Bazı yazılımlar tarih tabanlı sürümleme kullanır (örneğin 24.04 gibi, yıl ve ay), bazıları pazarlama amacıyla numarayı büyük atlamalar