0deps Hareketi: Yerel Bağımlılıklar ve Değişmez Sözleşmeler
Yazılım geliştiriciler genellikle yüzlerce harici kütüphane yükler. Modern framework'ler binlerce dolaylı (transitive) bağımlılığa dayanır. Bu, uygulamanızın yabancılardan gelen kodları çalıştırdığı anlamına gelir.
Bu durum, bir yazılım tedarik zinciri riski oluşturur.
Her bağımlılık saldırı yüzeyinizi artırır. Şunlara yol açabilir:
- Güvenlik açıklarına neden olabilir.
- Tedarik zinciri saldırıları için bir hedef haline gelebilir.
- Bakımcılar tarafından terk edilebilir.
- Genel (public) API'sini değiştirebilir.
- Geriye dönük uyumluluğu bozabilir.
0deps hareketi basit bir soru sorar: Ya uygulamanız yalnızca sizin kontrol ettiğiniz kodlara dayanıyorsa?
0deps modelinde, gerekli bağımlılıkları doğrudan proje deponuza (repository) gömersiniz. Bunları derleme (build) sırasında dinamik olarak indirmeyi bırakırsınız. Uygulamayı çalıştırmak için gereken her şey en başından itibaren depoda kalır.
Bu yaklaşım şunları sağlar:
- Yeniden üretilebilir (reproducible) derlemeler.
- Harici kayıt defterlerine (registries) daha az bağımlılık.
- Merkezi güvenlik denetimleri.
- Daha yüksek öngörülebilirlik.
Temel ilke, kodu statik tutmak değildir. Implementasyonlar ve algoritmalar, hataları düzeltmek ve güvenliği artırmak için gelişmelidir. Sabit kalan şey ise genel sözleşmedir (public contract).
Her kütüphane dikkatlice tasarlanmış bir arayüz sunar. Örnekler şunlardır:
- authenticate()
- createSession()
- verifyPasskey()
Bu fonksiyonlar bir sözleşme tanımlar. Sözleşme asla değişmez. Arkasındaki kodu yeniden yazabilir veya kütüphaneyi tamamen değiştirebilirsiniz. Uygulamanızın geri kalanı bu değişikliği fark etmeyecektir.
Bir güvenlik açığı ortaya çıktığında genellikle iki sorunla karşılaşırsınız:
- Açığı düzeltmek.
- Güncellemenin uygulamanızı bozup bozmadığını kontrol etmek.
0deps mimarisinde ikinci sorun ortadan kalkar. Genel API aynı kalırken dahili implementasyonu güncellersiniz. Uygulamanız kod değişikliği gerektirmeden çalışmaya devam eder.
Harici entegrasyonları dahili bir adaptör kullanarak izole edersiniz: Uygulama -> Genel Arayüz -> Adaptör -> Implementasyon
Eğer bir kütüphane yarın ortadan kalkarsa, sadece adaptörü değiştirirsiniz. Uygulamanızın başka hiçbir parçası bozulmaz.
0deps yazılımı mükemmel yapmaz. Tedarik zinciri risklerini azaltır. Kötü amaçlı paketler, kayıt defteri ihlalleri ve bağımlılık karmaşası (dependency confusion) gibi sorunları önler.
Projeler onlarca yıl sürer. Kütüphaneler ve framework'ler değişir. 0deps ile uygulamanız, ekosistem nasıl gelişirse gelişsin aynı kararlı sözleşmeleri kullanmaya devam eder.
