Moviento 0deps: Yerel Bağımlılıklar ve Güvenlik
Yazılım geliştiriciler çoğu projede yüzlerce harici kütüphane yükler. Modern framework'ler binlerce dolaylı (transitive) bağımlılığa dayanır. Bu, uygulamanızın yüzlerce bilinmeyen kişi tarafından yazılmış kodları çalıştırdığı anlamına gelir.
Bu ekosistem geliştirme sürecini hızlandırır. Aynı zamanda devasa tedarik zinciri riskleri 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 yeni bir saldırı yüzeyi ekler. Bir bağımlılık şunları yapabilir:
- Güvenlik açıkları oluşturabilir.
- Tedarik zinciri saldırıları için bir hedef haline gelebilir.
- Oluşturucusu tarafından terk edilebilir.
- Genel (public) API'sini değiştirebilir.
- Geriye dönük uyumluluğu bozabilir.
0deps modelinde, gerekli tüm bağımlılıkları doğrudan proje deponuza (repository) taşırsınız. Derleme (build) sırasında paketleri dinamik olarak indirmeyi bırakırsınız. Uygulamayı çalıştırmak için gereken her şey, depoyu klonladığınız andan itibaren deponun içinde kalır.
Bu yaklaşım şunları sağlar:
- Tekrar üretilebilir derlemeler (reproducible builds).
- Harici paket kayıt defterlerine (package registries) daha az bağımlılık.
- Merkezi güvenlik denetimleri.
- Öngörülebilir sonuçlar.
Amaç kodu statik hale getirmek değildir. Hataları düzeltmek ve güvenli kalmak için implementasyonlar ve algoritmalar gelişmelidir. Amaç, genel sözleşmeyi (public contract) sabit tutmaktır.
Her kütüphane belirli bir arayüz (interface) sunar. Örneğin:
- authenticate()
- createSession()
- verifyPasskey()
Bu fonksiyonlar bir sözleşme oluşturur. Alttaki kodu yeniden yazsanız bile sözleşme aynı kalır. Uygulamanızın geri kalanını bozmadan kütüphaneleri değiştirebilir veya protokolleri güncelleyebilirsiniz.
Bir güvenlik açığı ortaya çıktığında genellikle iki sorunla karşılaşırsınız:
- Hatayı düzeltmek.
- Güncellemenin uygulamanızı bozup bozmadığını kontrol etmek.
0deps mimarisinde ikinci sorun ortadan kalkar. Arayüzün arkasındaki implementasyonu güncellersiniz. Genel API aynı kalır. Uygulamanız kod değişikliği yapmadan çalışmaya devam eder.
Harici kodu dahili adaptörlerin (adapters) arkasına izole ederek uzun vadeli riski azaltırsınız. Eğer bir kütüphane yarın ortadan kaybolursa, sadece adaptörü güncellemeniz yeterlidir.
0deps açık kaynakla savaşmaz. Onu tüketme biçiminizi değiştirir. Kütüphaneler dinamik harici bağlantılar yerine entegre bileşenler haline gelir.
Bu; öngörülebilir, dirençli ve bakımı kolay yazılımlar oluşturur. Implementasyonlar gelişir. Sözleşme ise sabit kalır.
