Bağımlılıklar Neden Doğrudan VCS'den Çekilmeli: Go vs RubyGems
Go modüllerinin VCS tabanlı bağımlılık modeli ile RubyGems/npm'in paket yayınlama modeli karşılaştırılıyor; tedarik zinciri güvenliği ve denetim kolaylığı ele alınıyor.
Yazar, Go'dan Ruby'ye geçişinde bağımlılık yönetimindeki temel farkı ele alıyor. Go, paketleri doğrudan URL üzerinden VCS'den (git gibi) çeker; go.mod hem bağımlılık listesi hem kilit dosyası işlevi görür ve sum.golang.org üzerinden hash doğrulaması yapılır. Bu sayede git log -p ile commit geçmişi incelenerek bağımlılık denetimi kolayca yapılabilir.
RubyGems, npm ve PyPI gibi sistemlerde ise ayrı bir 'paket yayınlama' adımı vardır; .gem veya .tar.gz arşivinin içeriği kaynak repodakiyle birebir eşleşmek zorunda değildir. Bu da denetimi zorlaştırır: commit geçmişi kaybolur, arşivleri indirip elle diff almak gerekir. npm'deki hesap ele geçirme saldırıları, xz'deki gizlenmiş exploit ve 2018'deki event-stream/flatmap-stream vakası gibi çoğu tedarik zinciri saldırısı tam olarak bu yayınlama adımını hedef alıyor. Derlenmiş, minify edilmiş veya binary içerikler bu sorunu özellikle npm'de daha da büyütüyor.
RubyGems'in yakın zamanda eklediği cooldown süresi ve AI destekli güvenlik açığı taraması kısa vadeli önlemler olarak değerlendiriliyor; yazara göre asıl çözüm, paket yayınlama modelinin tamamen gözden geçirilip bağımlılıkların doğrudan VCS'den çekilmesi. Bundler'da git kaynaklı gem tanımlama kısmen mümkün olsa da dolaylı bağımlılıklar hâlâ rubygems.org üzerinden geliyor; yazar, mevcut Gemfile yapısını bozmadan tüm bağımlılıkları git üzerinden zorunlu kılacak bir mekanizma öneriyor.