# Yazılım dağıtımı
Yazılım dağıtımı, yazılımı kullanıma sunmak ve işlevsel bir şekilde sürdürmek için gereken karmaşık bir süreçtir. Bu süreç, sürüm yönetimi, kurulum, etkinleştirme, güncelleme gibi birbiriyle bağlantılı çeşitli aşamaları içerir.


## Tarih.
Bilgisayarlar son derece büyük, pahalı ve hantal olduğunda (ana bilgisayarlar ve mini bilgisayarlar), yazılımlar genellikle üreticiler tarafından donanımla birlikte paketleniyordu. Mevcut bir bilgisayara iş yazılımının kurulması gerekiyorsa, bu, bir sistem mimarı veya danışmanın pahalı ve zaman alıcı bir ziyaretini gerektirebilir. Günümüzde karmaşık, şirket içi kurumsal yazılım kurulumları için bu durum bazen geçerli olabilir. Ancak 1980'lerde mikrobilgisayarların yeni çağı için kitle pazarı yazılımlarının geliştirilmesiyle birlikte yazılım dağıtımının yeni biçimleri ortaya çıktı – İlk olarak kartuşlar, sonra kompakt kasetler, daha sonra disketler, daha sonra (1990'larda ve sonrasında) optik medya, internet ve flash sürücüler. Bu, yazılım dağıtımının müşteriye bırakılabileceği anlamına geliyordu. Ancak zamanla, yazılımın müşteri tarafından yapılandırılmasının önemli olduğu ve bunun ideal olarak kullanıcı dostu bir arayüze sahip olması gerektiği (örneğin, müşterinin Windows'ta kayıt defteri girdilerini düzenlemesini gerektirmek yerine) giderek daha fazla kabul edildi. İnternet öncesi yazılım dağıtımlarında, dağıtımlar (ve onlarla yakın ilişkili olan yeni yazılım sürümleri) zorunlu olarak pahalı, seyrek ve hacimli işlerdi. Dolayısıyla internetin yaygınlaşmasının uçtan uca çevik yazılım geliştirmeyi mümkün kıldığı iddia edilebilir. Gerçekten de bulut bilişimin ve bir hizmet olarak yazılımın ortaya çıkışı, yazılımın internet üzerinden dakikalar içinde çok sayıda müşteriye dağıtılabilmesi anlamına geliyordu. Bu aynı zamanda, dağıtım programlarının artık müşteriler tarafından değil, yazılım tedarikçileri tarafından belirlendiği anlamına geliyordu. Bu esneklik, özellikle daha az riskli web uygulamaları için sürekli teslimatın uygulanabilir bir seçenek olarak ortaya çıkmasına yol açtı. Yazılım dağıtımına ilişkin diğer seçenekler arasında mavi-yeşil dağıtım ve kanarya sürümü dağıtımı yer alır.


## Dağıtım faaliyetleri.
Serbest Bırakma
Kuruluşun ihtiyacına göre istediği zaman öncelik verilerin yazılım yayınlama.
Kurulum ve aktivasyon
Basit sistemler için kurulum, yazılımı (manuel veya otomatik olarak) yürütmek için bir komut, kısayol, betik veya hizmet biçiminin oluşturulmasını içerir. Karmaşık sistemler için sistemin yapılandırılmasını içerebilir - muhtemelen son kullanıcıya amaçlanan kullanımı hakkında sorular sorarak veya doğrudan nasıl yapılandırılmasını istediklerini sorarak - ve/veya tüm gerekli alt sistemleri kullanıma hazır hale getirerek. Etkinleştirme, yazılımın yürütülebilir bileşenini ilk kez başlatma etkinliğidir (yazılım lisansı ile ilgili etkinleştirme teriminin yaygın kullanımıyla karıştırılmamalıdır, bu Dijital Hak Yönetimi sistemlerinin bir işlevidir.)
Sunuculardaki daha büyük yazılım dağıtımlarında, kullanıcılar tarafından kullanılacak yazılımın ana kopyası - "üretim" - bir üretim ortamındaki bir üretim sunucusuna kurulabilir.
Dağıtılan yazılımın diğer sürümleri bir test ortamına, geliştirme ortamına ve felaket kurtarma ortamına kurulabilir.
Karmaşık sürekli dağıtım ortamlarında ve/veya hizmet olarak yazılım sistemlerinde, sistemin farklı yapılandırılmış sürümleri, farklı dahili veya harici müşteriler için üretim ortamında aynı anda mevcut olabilir (bu, çok kiracılı mimari olarak bilinir) veya hatta farklı müşteri gruplarına paralel olarak kademeli olarak sunulabilir ve paralel dağıtımlardan bir veya daha fazlasını iptal etme olasılığı vardır. Örneğin, Twitter'ın yeni özelliklerin ve kullanıcı arayüzü değişikliklerinin A/B testi için ikinci yaklaşımı kullandığı bilinmektedir. Üretim ortamında, henüz üretim yük dengeleyicisine bağlanmamış sunuculardan oluşan "gizli canlı" bir grup da, mavi-yeşil dağıtım amaçları için oluşturulabilir.
Kalite Güvencesi
Yapılan yazılım her zaman ihtiyaca göre olsun olmasın açık vermemesi adına yazlım da kalite sağlanması.
Devre dışı bırakma
Devre dışı bırakma, bir yazılım sisteminin etkinleştirilmesinin ardından, o sistemin durdurulmasıyla ilgili tüm işlemler açılır. Bu sürecin, yazılımın düzgün bir şekilde kapatılmasını sağlamak için gerekli adımları içermesi ve genellikle sistemin güvenli bir şekilde çalıştırılmasının sürdürülmesi amacıyla planlanması gerekir. Devre dışı bırakma işlemi, yalnızca yazılımın kendisi değil, aynı zamanda bu yazılıma bağlı olan diğer bileşenler de çalıştırılabilir. Bu nedenle, ilişkilerin dikkate alınmaması son derece önemlidir. Yazılım sistemleri genellikle farklı modüller veya hizmetler arasında kurulumları içerir; bu bağlantıların, bir cihazın devre dışı bırakılmasının diğer bileşenlerin nasıl etkileyeceğini belirler. 
Örneğin, bir yazdırmanın kapatılması, ona bağlı olan veritabanı veya diğer özelliklerin etkilenmesine yol açılabilir. Bu şekilde, devre dışı bırakma sürecinin planlanması sırasında, tüm ilişkilerin analiz edilmesi ve olası etkilerin değerlendirilmesi gerekir. Aksi takdirde, beklenmedik sorunlar ortaya çıkabilir; bu sistemin genel durumunu olumsuz yönde etkileyebilir. 
Bu nedenle, devre dışı bırakma işlemi sırasında dikkatli bir strateji izlemek ve tüm çalışanların ihtiyaçlarını göz önünde bulundurmak kritik öneme sahiptir. Bu yaklaşım, hem maliyetleri artırır hem de kullanıcı deneyimini geliştirir.
Güncelleme
Güncelleme, yazılım sisteminin bir cihazının yeni bir üretici tarafından piyasaya sürülmesiyle tetiklenen bir sunulur. Bu olay, genellikle üretici firmanın duyurulan bir güncelleme bildirimi ile başlar ve kullanıcıların mevcut yazılım sistemlerini en son sürümle güncellemelerini sağlar. Güncelleme işlemi, eski cihazın yeni sürümüyle değiştirilme anlamına gelir ve bu süreç, yazılımın kapsamının artırılması, güvenlik açıklarını kapatma veya yeni özelliklerin değiştirilmesi amacıyla kullanılabilir.
Güncelleme süreci, kurulum işlemine benzerlik gösterir; Ancak genellikle daha az karmaşık bir yapıya sahiptir. Bunun nedeni, çoğu güncellemenin güncelleme öncesinde zaten çözülmüş olmasıdır. Yazılım bileşenleri arasındaki ilişkiler, ilk kurulum aşamasında belirlenmiş ve mevcuttur. Bu sayede güncelleme sırasında kullanıcıların karşılaşabileceği sorunlar en aza indirilir. Örneğin, yeni sürümün eski sürümle uyumlu olup olmadığını kontrol etmek gibi karmaşık işlemler genellikle gereksiz hale gelir.
Güncelleme işlemi sırasında dikkat edilmesi gereken birkaç önemli nokta vardır. Başlangıçta, zaman zaman ve düzenli aralıklarla açılma, yazılım sistemlerinin sistemleri ve kapatılmaları sağlanır. Ayrıca, kullanıcıların güncellemeleri takip bilgileri ve manuel olarak uygulaması önemlidir. Bunun yanı sıra, güncellemelerin düzgün bir şekilde uygulanabilmesi için gerekli yedekleme işlemlerinin yapılması da önerilir; dolayısıyla herhangi bir sorun durumunda eski sürüme geri dönmek mümkün olur. Sonuç olarak güncelleme süreci, yazılım çözümleri sürekli olarak gelişmeyi sağlamak için kritik bir adımdır. Kullanıcıların bu süreçleri doğru bir şekilde yönetmeleri, hem sistem çalışmalarını artıracak hem de güvenlik risklerini en aza indirecek. Bu nedenle, güncellemeleri düzenli olarak kontrol etmek ve denetlemek, yazılım kullanıcıları için önemli bir sorumluluktur.
Emeklilik
Emeklilik süreci yazılım üretici tarafından eski olarak işaretleyerek yeni sürümünün çıkmayacağıdır.
Kaldırma
Kaldırma işlemi, yazılım bileşenine kullanıcı tarafından artık gerek duyulmadığı sistemden kalıcı olarak kaldırılmasıdır.
Sürüm izleme
Sürüm izleme sistemleri, kullanıcının yazılım sistemlerine yönelik güncellemeleri bulmasına ve yüklemesine yardımcı olur. Örneğin: Yazılım Kataloğu, yerel bir sisteme yüklenen her yazılım paketi için sürümü ve diğer bilgileri depolar. Bir düğmeye tek tıklama, uygulama için yükseltme web sayfasına giden bir tarayıcı penceresi açar ve oturum açma gerektiren siteler için kullanıcı adı ve parolanın otomatik olarak doldurulmasını sağlar. Linux, Android ve iOS'ta bu işlem daha da kolaydır çünkü sürüm izleme için standartlaştırılmış bir işlem (resmî olarak desteklenen şekilde yüklenen yazılım paketleri için) işletim sistemine yerleştirilmiştir, bu nedenle ayrı bir oturum açma, indirme ve yürütme adımı gerekmez - bu nedenle işlem tamamen otomatik olacak şekilde yapılandırılabilir. Bazı üçüncü taraf yazılımlar da belirli Windows yazılım paketleri için otomatik sürüm izleme ve yükseltmeyi destekler.


## Roller.
Dağıtım sürecinde çeşitli parçaların farklı roller ile üstlenmesi mümkündür. Bu mantıksal, Dearle iki ana rol tanımlar: yazılım üreticisi ve yazılım dağıtıcısı. Dağıtımın tasarımı ve pazarlama üzerine yazan birçok yazar genellikle sadece destekleyicinin, yani yazılım dağıtıcısının, rol aldığı, biz bu tekliflerin sunulmasında ve sunulan rollerin ayrı ayrı incelendiği rolde rol alır. Ayrıca, sistem yöneticisi ve yazılım kullanıcısı gibi iki ek rolün de dikkate alınmaması seçeneğini tercih ediyoruz. Bizim görüşümüze göre, bu rollerin net bir şekilde işleyişi, işleyişin artan karmaşıklığının yapısı ve içeriğin belirlenmesi açısından oldukça faydalıdır.


### Üretim öncesi ortamlarda.
  - Yazılım Kullanıcısı: Yazılım kullanıcısı, dağıtılan yazılımın nihai kullanıcısıdır. Dağıtım sürecinde aşağı akışta yer almasına rağmen, kendi içerikleri ve tercihlerine göre günlük katkılarda bulunabilir. Yazılım kullanıcısı, ortam parametrelerinin yer aldığı ve dolayısıyla yazılım sistemi, öncelikle onun ihtiyaçlarını ve tercihlerini göz önünde bulundurmalıdır.
  - Uygulama geliştiricileri: Yazılım geliştirme sürecine bakın
  - build-and-release mühendisleri: Sürüm mühendisliğine bakın
  - sürüm yöneticileri: bkz. Sürüm yönetimi
  - dağıtım koordinatörleri: DevOps'a bakın


### Üretim ortamlarında.
  - sistem yöneticisi: Hedeflenen cihaz kaynaklarını yönetmekten meşgul olan yöneticidir.
  - veritabanı yöneticisi
  - sürüm koordinatörleri: DevOps'a bakın
  - operasyon proje yöneticileri: ITIL'e bakın