0deps Hareketi: Yerel Bağımlılıklar ve Değişmez Sözleşmeler
Yazılım geliştiriciler her projede genellikle yüzlerce harici kütüphane yüklerler. Modern çerçeveler (frameworks) binlerce dolaylı (transitive) bağımlılığa dayanır. Bu, uygulamanızın yüzlerce bilinmeyen katkıda bulunan kişinin kodunu çalıştırdığı anlamına gelir.
Bu hız, yazılım tedarik zinciriniz için devasa bir risk oluşturur.
0deps hareketi basit bir soru sorar: Ya uygulamanız sadece gerçekten kontrol ettiğiniz kodları çalıştırsaydı?
Her bağımlılık saldırı yüzeyinizi genişletir. Güvenlik açıkları oluşturabilir, terk edilebilir veya yeni bir güncellemeyle kodunuzu bozabilir. Üretim (production) ortamınızda çalışan kod üzerindeki kontrolünüzü kaybedersiniz.
0deps modelinde, tüm bağımlılıkları doğrudan proje deponuza (repository) getirirsiniz. Bunları kurulum sırasında dinamik olarak indirmezsiniz. Uygulamanızı oluşturmak ve çalıştırmak için gereken her şey zaten oradadır.
Bu yaklaşım çeşitli faydalar sağlar:
- Yeniden üretilebilir (reproducible) derlemeler
- Harici paket kayıt defterlerine (package registries) daha az bağımlılık
- Merkezi güvenlik denetimleri
- Daha iyi öngörülebilirlik
- Daha düşük tedarik zinciri riski
Temel ilke, kodun değişmesini durdurmak değildir. Algoritmalar ve güvenlik düzeltmeleri gelişmek zorundadır. Sabit kalan şey, genel sözleşmedir (public contract).
Her kütüphane dikkatlice tasarlanmış bir arayüz sunar.
- authenticate()
- createSession()
- verifyPasskey()
Bu fonksiyonlar bir sözleşme tanımlar. Bu sözleşme asla değişmez. Alttaki kodu yeniden yazabilir veya kütüphaneyi tamamen değiştirebilirsiniz. Uygulamanızın geri kalanı aynı kalır çünkü sadece sözleşme ile iletişim kurar.
Bir güvenlik açığı ortaya çıktığında, bunu dahili olarak düzeltirsiniz. Arayüzün arkasındaki uygulamayı (implementation) güncellersiniz. Genel API aynı kalır. Uygulamanız kod değişikliği yapmadan çalışmaya devam eder.
Bu yapı, harici kodu izole etmek için dahili bir adaptör kullanır: Uygulama ↓ Genel Arayüz (Public Interface) ↓ Adaptör ↓ Gerçekleştirme (Implementation)
Harici bir kütüphane ortadan kalkarsa, sadece adaptörü güncellersiniz. Uygulamanızın başka hiçbir parçası bozulmaz.
0deps hareketi açık kaynağa karşı değildir. Onu nasıl kullandığınızı değiştirir. Kütüphaneler, bizzat denetlediğiniz ve versiyonladığınız entegre bileşenler haline gelir.
Bu, onlarca yıl sürecek yazılımlar oluşturur. Uygulamalar değişir ancak sözleşmeleriniz kalıcı olur. Bu kararlılık, yazılımınızı öngörülebilir ve dirençli kılar.
