Ana Sayfa

Go ile Ruby Gem'lerini Yüklemek: Paket Yönetimine Yenilikçi Bir Bakış

1 dk okuma

“Cursed Bundler” adlı bu makale, Go'nun paket yöneticisi go get'i kullanarak Ruby Gem'lerini yükleme üzerine ilginç bir düşünce deneyi sunuyor. Yazara göre, GOPATH ortam değişkenini bir Ruby yükleme yoluna (load path) ayarlayarak, Go'nun modül getirme mekanizması bir taşıma katmanı olarak işlev görebilir. Bu kurulumla, go get komutuyla GitHub'dan bir Ruby modülü çekildiğinde, Go modülü kendi dizin yapısı içinde diskte saklar. Ruby, dosyaların oraya nasıl geldiğini umursamadığı için, require "rack" gibi komutlar sorunsuz çalışır. Go'nun her sürümü kendi dizininde saklaması sayesinde, Ruby'nin yükleme yolunun geleneksel olarak zorlandığı çoklu sürüm çakışmaları da ortadan kalkar.

Bu yaklaşımın temelinde Go'nun kendini açıklayan (self-describing) içe aktarma yolları yatar. import "github.com/foo/bar" gibi bir ifade, kodun nerede bulunacağını (hosting alanı, organizasyon, depo) doğrudan belirtir, merkezi bir dizine ihtiyaç duymaz. Bu, gem install foo gibi komutların aksine, "foo" gibi kısa isimlerin yalnızca merkezi bir kayıt defteri (rubygems.org gibi) aracılığıyla anlam kazandığı geleneksel paket yönetim sistemlerinden farklıdır. Go'nun bu merkeziyetsiz yaklaşımı, merkezi dizinlerin getirdiği yönetişim, güven ve yayınlama kontrolü gibi sosyal maliyetleri ortadan kaldırır.

Go'nun bu sistemi daha da ilginç kılan ise güvenlik özellikleri. Go, modülleri doğrudan GitHub'dan çekmek yerine proxy.golang.org adlı bir önbellekleme proxy'si üzerinden getirir. Ayrıca, her modül sürümü sum.golang.org adlı bir şeffaflık günlüğüne (transparency log) kriptografik özetleriyle (hash) kaydedilir. Bu "ilk gelen kazanır" prensibi sayesinde, bir modülün özeti bir kez kaydedildiğinde kalıcı olur. Bu, kötü niyetli bir geliştiricinin bir sürümü sessizce değiştiremeyeceği anlamına gelir; çünkü özetler eşleşmezse Go istemcileri indirmeyi reddeder. Bu güvenlik özellikleri, yazılım tedarik zinciri güvenliği açısından önemli avantajlar sunar.

İçgörü

Go'nun merkeziyetsiz paket yönetim yaklaşımı ve şeffaf güvenlik mekanizmaları, geleneksel sistemlere alternatif bir model sunarak yazılım tedarik zinciri güvenliğini güçlendirme potansiyeli taşıyor.

Kaynak