Bir projenin composer.lock’unda 180 paket vardı. Doğrudan kullanılan, elle sayınca, on ikiydi. Geri kalanı — yüzden fazla paket — çoğu zaman küçük bir fonksiyon için kurulmuş paketlerin sürüklediği bağımlılıklardı.

composer require yazmak bedava hissettirir. Değil. Her bağımlılık, kod tabanınızda başkasının koduna açılan bir kapıdır — ve o kapı bir daha tam kapanmaz.

Her bağımlılık bir kapıdır

Bir paket kurduğunuzda, o paketin kodu sizin uygulamanızın yetkileriyle, sizin sunucunuzda çalışır. Veritabanınıza erişebilir, dosya sisteminizi görür, ortam değişkenlerinizi okur.

Bu, paketin kötü niyetli olduğu anlamına gelmez — ama bir gün ele geçirilirse, sizin uygulamanız da ele geçirilmiş olur. Supply-chain saldırısı denen şey budur: zayıf halka sizin yazdığınız kod değil, güvendiğiniz koddur. Yüzlerce pakete güveniyorsanız, güvenmeniz gereken yüzlerce ekip var demektir.

Faturanın kalemleri

Bir bağımlılığın maliyeti kurulumla bitmez:

  • Güvenlik yüzeyi. Her paket, denetlemediğiniz bir kod parçasıdır. Transitive bağımlılıklarla birlikte, gerçekte neye güvendiğinizi kimse tam bilmez.
  • Bakım. Paket terk edilir, yeni bir PHP sürümünde kırılır, başka bir paketle çakışır. Onun sorunu artık sizin sorununuzdur.
  • Yükseltme sürtünmesi. Framework’ü yükseltmek istediğinizde, en eski ve en bakımsız bağımlılığınız kadar hızlısınız.

Bu kalemler küçük bir paket için de, büyük bir paket için de ödenir.

Küçük iş, büyük kapı

Asıl mesele asimetri. Bir slug üreten, bir tarih biçimleyen, birkaç satırlık bir yardımcı — bunlar için bir paket kurmak, küçük bir kazanç için geniş bir kapı açmaktır. Kazanç birkaç satır kod; bedel ise yukarıdaki faturanın tamamı.

Ünlü bir örnek var: JavaScript dünyasında, bir string’i sola dolduran on bir satırlık bir paket bir gün yayından kalktı ve binlerce projenin build’i çöktü. On bir satır için hepsi, denetlemediği bir kapıya bağlanmıştı.

Ne zaman paket, ne zaman kendiniz

Kural ideolojik değil, ekonomik:

  • Paket kullanın: zor, iyi test edilmiş, güvenlik-kritik işlerde. Kriptografi, HTTP istemcileri, veritabanı sürücüleri, framework’ün kendisi. Kendi kripto kodunuzu asla yazmayın — burası paketin tartışmasız kazandığı yer.
  • Kendiniz yazın: küçük, durağan ve iyi anladığınız işlerde. Birkaç satırlık bir yardımcı, koca bir bağımlılık ağacı miras almaktan ucuzdur.

Ölçü şu: paketin çözdüğü problem, paketin getirdiği faturadan büyük mü? Büyükse kurun. Değilse, o birkaç satırı yazın ve sahiplenin.

Bağımlılığı seçerken

Paket kurmaya karar verdiyseniz, hangisini seçeceğinize bakın: aktif bakılıyor mu, son sürümü ne zaman çıkmış, kaç transitive bağımlılık sürüklüyor, lisansı uygun mu, topluluğu ne kadar geniş. Bir bağımlılık seçmek, boring architecture yazısındaki innovation token mantığıyla aynı: olgun, öngörülebilir, terk edilmeyecek olanı seçin.


Bağımlılık eklemek, kod yazmamanın bir yolu gibi görünür. Aslında kodu başka birine yazdırıp sorumluluğunu kendinizde tutmaktır.

Küçük bir iş için koca bir kapı açmadan önce sorun: bu birkaç satırı yazmak gerçekten daha mı pahalı?