deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

En çok yıldız alan 433 JavaScript deposunun taranmasında bir bakımcının paketleri bunların %99'unda bulundu

dev.to'da yayımlanan bir tarama, popüler 433 JavaScript deposunda kurulu npm paketlerinin yarısının tek bir yayımlama hesabına sahip olduğunu ve bir bakımcının paketlerinin projelerin %99'unda göründüğünü ortaya koydu.

En çok yıldız alan 433 JavaScript deposunun taranmasında bir bakımcının paketleri bunların %99'unda bulundu

GitHub'daki en çok yıldız alan 433 JavaScript ve TypeScript deposunun taranması, xz arka kapısı olayının meşhur kıldığı bir endişeye somut sayılar kazandırdı: popüler açık kaynak projeleri, şaşırtıcı derecede küçük bir yayımcı grubuna yaslanıyor. Ahmed Benhamadi'nin dev.to'daki yazısına göre, sindresorhus npm hesabının tek başına yayımladığı paketler — taramadaki 513 paket — 433 deponun 430'unda, yani %99'unda yer alıyor.

Tarama nasıl yapıldı

Benhamadi, bir projenin lockfile dosyasını okuyup kurulu her paket için bir sonraki sürümü yayımlama hakkının kime ait olduğunu, paketin kullanımdan kaldırılmış (deprecated) ya da arşivlenmiş olup olmadığını, en son ne zaman yayımlandığını ve bir fonlama bağlantısı bildirip bildirmediğini raporlayan küçük bir CLI yazdı: npx @genamed/busfactor. Araç ardından sonuçları toplayarak hangi bireysel hesapların en çok paketi tek başına taşıdığını gösteriyor.

Taramanın kendisi için GitHub'daki en çok yıldız alan 600 JavaScript ve TypeScript deposundan yola çıktı ve kök dizininde lockfile dosyası olan 433 tanesini tuttu — package-lock., pnpm-lock.yaml, yarn.lock veya npm-shrinkwrap.. Bu küme 27.184 benzersiz npm paketine çözüldü ve npm registry ile ecosyste.ms üzerinden çapraz kontrol edildi.

Sayılar ne gösteriyor

Kümedeki medyan proje 945 paket kuruyor ve bu paketlerin yaklaşık yarısında yeni bir sürüm yayımlayabilecek tek bir hesap var. Tek yayımcısı bir organizasyon ya da @types kapsamı olan paketler bu sayımdan hariç tutuldu.

Zirvedeki yoğunluk çarpıcı. sindresorhus'un (%99 depo, tek başına 513 paket, supports-color, camelcase ve wrap-ansi dahil) ardından isaacs (%98, 76 paket), juliangruber (%95, 21), ljharb (%94, 152, resolve ve deep-equal dahil) ve kevva (%93, 31) geliyor. İlk beş, taranan her tek depoda yer alıyor — React, VS Code, Vue ve n8n dahil. Daha aşağıda qix, satazor, vitaly, lukeed ve esp gibi hesaplar projelerin yaklaşık %90'ına ulaşıyor.

Dikkat çeken bir kayıt var: nopersonsmodules, text-table, wordwrap ve commondir gibi 59 paketle projelerin %88'inde bulunuyor. Yazıya göre bu, paketlerin orijinal yazarı npm registry'den ayrıldığında düştüğü hesap ve bu hesaptan hiçbir şey yayımlanmıyor. Bu paketlerden birine güvenlik yaması gerekirse, soracak kimseleri fiilen yok.

Tarama ölü ağırlığı da saydı: depoların %98'i en az bir kullanımdan kaldırılmış ya da arşivlenmiş bağımlılık taşıyor. path-is-absolute ve — bellek sızdırdığı için kullanımdan kaldırılan — inflight, 433 deponun yaklaşık 305'inde görünüyor; prop-types, regenerator-runtime, xtend ve through gibi arşivlenmiş paketler ise hâlâ yaygın. Paketlerin yalnızca %24'ü fonlama bağlantısı taşıyor, ne var ki en yoğun yayımcıların çoğu bir GitHub Sponsors sayfası listeliyor.

Yazarın belirttiği uyarılar

Benhamadi verinin ne anlama geldiği konusunda titiz. Bir yayımlama hesabı aktif bir bakımcı demek değil: tek bir ortak giriş tüm bir ekibi gizleyebilir ve birkaç hesap, yıllar önce ayrılmış iş birlikçileriyle birlikte tek bir kişiyi temsil ediyor olabilir. Pasif olmak bozuk olmak anlamına da gelmiyor — bu paketlerin çoğu küçük ve fiilen tamamlanmış durumda. Aracın yanıtladığı daha dar soru şu: yarın bir düzeltme gerekseydi onu kimin yazması gerekecekti. Her şey herkese açık registry verisinden türetildiği için tazeliği, npm registry ve ecosyste.ms'ye bağlı.

Araç ve veri kümesi

CLI, Node 20 gerektiriyor, sıfır runtime bağımlılığına sahip ve sonuçları bir hafta boyunca önbelleğe alıyor. Bayraklar arasında bir README'ye veya pull request'e yapıştırılabilecek bir kart için --md, paylaşılabilir bir görsel için --svg ve ölü bağımlılık içeren derlemeleri başarısız kılan bir CI kapısı haline getiren --fail-on dead var.

Projenin ik yarısı, terk edilmiş paketleri sürdürülen alternatiflerle eşleştiren successors. veri kümesi: her paket için kaynak gösterilmiş tek bir kayıt ve registry'ler üzerinden haftalık CI doğrulaması var, böylece kendisi ölen bir halef işaretleniyor. npm için mevcut e18e/module-replacements projesine öncelik veriyor ve bunun yerine yapılandırılmış bir eşdeğerin bulunmadığı PyPI, Cargo, Go ve Packagist'e odaklanıyor. GitHub'daki GenAmed/busfactor deposu MIT lisanslı — ve yazarının da belirttiği gibi, kendi başına bir bus factor'a sahip; sessiz kalması hâlinde ne olacağını açıklayan bir GOVERNANCE.md dosyası bulunuyor.

Neden önemli

xz arka kapısı, tek bir aşırı yüklenmiş bakımcının kritik yazılım için tek bir hata noktası olabileceğini gösterdi. Bu tarama, JavaScript ekosistemindeki durumun istisnai değil yapısal olduğunu düşündürüyor: beş hesabın paketleri örneklemdeki tüm popüler depolara ulaşıyor ve sahipsiz bir yayımcı hesabı on projeden neredeyse dokuzunda oturuyor. Mühendislik ekipleri için aracı kendi lockfile dosyalarına karşı çalıştırmak ucuz bir tedarik zinciri denetimi ve CI bayrağıyla ölü bağımlılıkların merge'lere girmesini engellemenin bir yolu. Ekosistem geneli içinse bu, o 945 paketlik kurulumları yamalanabilir tutan insanlara ve yönetişim düzenlemelerine fon sağlanması yönünde bir dürtme.

  • #javascript
  • #npm
  • #open-source
  • #supply-chain-security
  • #developer-tools

İlgili yazılar