Soğukkanlı yazılım
- 2004 yılında, bilgisayar bilimi öğrencisi olan yazar bir doğa tarihi dersine katılırken profesör donmuş bir yavru boyalı kaplumbağa gösteriyor.
- Bu kaplumbağa, donmuş haldeyken bile hayatta kalabilen az sayıdaki türden biri; düşük sıcaklıklarda metabolizmasını düzenleyebilen soğukkanlı bir hayvan.
- Ders boyunca kaplumbağanın yavaş yavaş hareket edip yeniden canlanmasını gözlemlemek, yazarın soğukkanlı hayvanlara dair anlayışını derinleştiriyor.
Yazılım projelerinin ikiliği
- Yazılım projeleri de sıcakkanlı ve soğukkanlı projeler olarak ikiye ayrılabilir.
- Sıcakkanlı projeler sürekli faaliyet gerektirir; faaliyet durduğunda sorunlar ortaya çıkar.
- Soğukkanlı projeler ise uzun süre hareketsiz kalsa bile yeniden başlandığında önceki durumundan hemen devam edebilir.
Blogun soğukkanlı yazılımı
- Yazarın blogunu çalıştıran yazılım, soğukkanlı yazılıma bir örnek.
- 12 yıl önce başlatılan bu proje basit, harici servislere bağımlı değil ve tüm bağımlılıkları proje deposunun içinde yer alıyor.
- Birkaç küçük iyileştirme dışında neredeyse hiç değişiklik gerektirmeden iyi çalışıyor ve önümüzdeki 12 yıl boyunca da çalışması bekleniyor.
GN⁺ görüşü
- Soğukkanlı yazılım kavramı, projelerin sürdürülebilirliği ve bakım yapılabilirliği üzerinde önemli etkiye sahip.
- Bu yazı, teknoloji yığını seçimlerinin bir projenin yaşam gücünü nasıl etkilediğine dair içgörü sunuyor.
- Yazarın deneyimi, yazılım geliştiricilere uzun vadede istikrarlı sistemler kurma konusunda ders veriyor.
1 yorum
Hacker News görüşleri
Node ve JavaScript ekosisteminde Express adlı bir web framework'ü var. Güncel ana sürüm dalı olan 4.x.x 10 yılı aşkın süredir kullanımda ve haftada 17 milyondan fazla kez indiriliyor. Bazı özellikleri eksik ve performansı en iyisi değil, ancak hızlı ve istikrarlı geliştirme sağladığı, API değişiklikleri veya güvenlik yaması eksikliği konusunda endişe duymadan uzun vadeli plan yapılabildiği için birçok geliştirici tarafından tercih ediliyor. Go dili ise geniş standart kütüphanesi ve uyumluluk sözü sayesinde 10 yıldan eski programların bile çalıştırılabildiği daha iyi bir istikrar sunuyor.
Bir yazılım güncelleme almadan da iyi çalışıyorsa, bu genelde en baştan doğru yapıldığı anlamına gelir. Kişisel kullanım için yazılım geliştirmek görece daha kolaydır çünkü zevkleriniz büyük ölçüde değişmez. Ancak başkalarının kullanacağı yazılımları yazarken gereksinimler farklı olabilir ve öngörülmeyen sorunlar ortaya çıkabilir. Örneğin büyük dosyaları işlerken çökme yaşanabilir ve bunu düzeltmek için yazılımın yarısını yeniden yazmak gerekebilir. Bu da, yazılımın sık değişmemesinin tek başına mutlaka daha iyi olduğu iddiasına yönelik en güçlü karşı argümandır.
Python, sürekli geriye dönük uyumluluğu bozan değişiklikler nedeniyle kötü bir örnek. Buna karşılık Go veya Java'da 10 yıllık kod bile modern araçlarla sorunsuz çalışıyor. Perl ise 30 yıllık kodun hâlâ çalışmasıyla daha iyi bir örnek.
IBM mainframe (z/OS) üzerinde çalışıyorum. Geriye dönük uyumluluğu koruma konusunda IBM en iyisi. Microsoft (Windows) ikinci, Linux (kernel) ABI ise üçüncü sırada. Diğer sistemlerin çoğunda sorun, uyumluluğu korumaya zaman ayırmak istemeyen OSS projelerinde sık görülüyor.
Bağımlılıklar bir uygulamayı "sıcak kanlı" hâle getirebilir, ancak Docker veya container kullanımı bu sorunları bir ölçüde çözebilir. Bir projede kullanılacak kütüphaneleri seçerken, bunların yeterince "soğuk kanlı" olup olmadığını araştırarak seçiyorum.
Birçok mühendis GitHub'da kütüphane ararken son commit zamanına bakıyor. Daha yeni commit varsa bunun daha iyi desteklendiğini düşünüyorlar. Oysa uzun süre istikrarlı kalmış ve hatasız olduğu için arşivlenmiş projeler bulmak, ikinci el dükkânında saklı bir hazine bulmaya benziyor.
Kendi yan projelerimin bakımını yapıyorum. 12-13 yıl önce başladım ve projeyi PHP, Laravel, Symfony ile yeniden yazdım. Uzun süreli proje bakımını öğrenmek açısından çok değerli oldu. Örneğin Vagrant'tan Docker'a geçmek, Vue + Axios + Webpack gibi yapıları Htmx ile sadeleştirmek için fırsatlar aradım. Son dönemde de PHP 8.2 ve Symfony 7'ye yükselttim, ayrıca ChatGPT tabanlı özellikler entegre ettim.
Son birkaç yılda mobil uygulamaların birkaç saatlik yama çalışması gerektirmesinden bıktım. Yazar, kendi statik site oluşturucusunu "soğuk kanlı" olarak tanımlıyor; Python 2 üzerinde çalışıyor, ancak Python 2 kurmak giderek zorlaşıyor.
1994-95'te yazdığım SDK, 2017'de şirketten ayrılana kadar kullanıldı. ANSI C ile yazılmıştı; PHP(5) ile yazdığım şeyler de PHP 8.2 üzerinde hâlâ düzgün çalışıyor. Ama bunlar sıkıcı ve gündem değeri düşük şeyler.
Makalede bahsedilenlerin ötesinde, doğası gereği güvenli bir tehdit modeline sahip olmak da önemli. Örneğin tam bir web sitesi, saldırganlar, spam botları vb. ile sürekli mücadele etmek zorunda olduğundan yapısı gereği "sıcak kanlı"dır. Buna karşılık Tiddlywiki gibi statik sayfalar web'e konmak zorunda değildir ve tarayıcı çok istikrarlı bir platform olduğu için çok daha iyidir.