Paket Yöneticileri Bunu Çözemez
Çözülemez Çatışma
Paket yöneticisi sorunu ölmüyor. Aletlerin yıllarca güncellenmesine rağmen, bağımlılık çatışmaları vẫn inşaaları bozar. Geçen hafta, bir geliştirici, iç içe bağımlılıklar boyunca aynı kütüphanenin çakışan sürümlerinden kaynaklanan bir derleme hatası bildirdi - her bakımcının karşılaştığı ancak hiçbir ekosistemin çözmediği bir sorun.
Kevin Patel tarafından yayınlanan “Bunu Önlemek için Bir Yol Yok” makalesi tam olarak bu senaryoyu belgelemektedir. Bir kullanıcı, lodash@4.17.12 gerektiren bir paket kurarken, başka bir bağımlılık lodash@4.17.20 talep etti. Paket yöneticisi, çakışmayı her iki sürümü de yükleyerek çözdü, ancak bu, node_modules klasörünü şişirdi ve yanlış sürüm yüklendiğinde çalışma zamanı hatalarına neden oldu. Bu, hipotetik bir kenar durumu değil. Hacker News’te 79 yorumcu benzer deneyimleri teyit etti, biri “Python, Node ve Ruby’de bu sorunları geliştirme açısından saatlerce hallettim” diye belirtti. Araçlar, bağımlılık grafiğinin intrinsic olarak çözmemekte direttiği şeyi çözemez.
Neden Bu Sürekli Oluyor
Paket yöneticileri, temel olarak kusurlu bir varsayımı işler: sürüm aralıklarının güvenilir bir şekilde bir arada bulunabileceği. Uygulamada, anlamsal sürümleme, birden çok paket uyumsuz kısıtlamalar dayattığında bozuşur. Erlang/OTP 29.0 sürümü geçen ay bu soruna, yeni bir “kilid Dosyası” formatı ile çözüm getirmeye çalıştı, ancak bir HN yorumcusu “Kilit dosyaları sadece sorunu gizler. Altta yatan çatışma çözümünü çözmez” diye belirtti. Temel sorun kalıyor: hiçbir algoritma, merkezsiz bir ekosistemdeki rekabetçi sürüm gereksinimlerini güvenilir bir şekilde uzlaştıramaz.
Bu, açık kaynaklı değildir. Londra Polisi’nin recent yüz tanıma dağıtımı bir protestoda benzer çelişkileri gerçek dünya sistemlerinde ortaya çıkardı. Yüz tanıma yazılımları, çakışan tanımlama kriterleriyle mücadele ettiği gibi, paket yöneticileri de bağımlılık ağaçları çarpıştığında zorlanırlar. Her iki sistem de karmaşıklığı tam olarak kontrol edemedikleri için kırılgan kurallara dayanır.
Daha Büyük Resim
Bağımlılık yönetimindeki başarısızlık, yazılım geliştirmedeki daha derin gerilimleri yansıtmaktadır. WinCE64 gibi projeler - Nintendo 64’e Windows CE 2.11 portu - mühendislerin sistemleri kendi iradelerine uydurmak için ne kadar ileri gidebileceklerini gösterir. Ancak en kararlı hackerlar bile paket yöneticisinin en temel kusurunu çözemez: modern bağımlılık grafiklerinin ölçeğini işlemek için tasarlanmamıştır. Recent Kars4Kids reklam davası, bir hakimin aldatıcı pazarlamayı yasakladığı durum, paralel bir durum sunar. Tüketici mesajlamasında düzenleyicilerin şimdi doğruluk talep ettiği gibi, açık kaynak topluluğu, bağımlılık bildirimleri için uygulanabilir standartlara ihtiyaç duyar.
Project Gutenberg’in devam eden iyileştirmeleri, teknik borç ödemenin önceliklendirildiğinde neler mümkün olduğunu gösterir. 1997’den beri proje, kamu malı metinlerin temiz, sürüm-kontrol edilen bir arşivini korudu. Paket yöneticileri, bağımlılıkları edebi sürümler olarak ele alırsa - her sürümün ayrı, değişmez bir çalışma olması durumunda - mevcut kriz possibly hiç gerçekleşmezdi. Ancak yazılımla contrario, kitaplar gibi, yazılım bağımlılıkları öngörülemez şekillerde evrimleşir, bu nedenle araçların, uyumsuz sürümleri çalışma zamanında uzlaştırmak zorunda kalmasını sağlar.
İzlenecek Olaylar
Bağımlılık yönetimindeki sonraki büyük test, 2024’ün 4. çeyreğinde gerçekleşecek. npm, en büyük paket kayıt defteri, anlamsal sürümleme yerine güvenlik yamalarını önceliklendiren yeni bir “çatışma çözücü” sunmayı planlıyor. İzleyin:
- Bu çözücü, 100+ bağımlılıkları olan projeleri nasıl işler
- Büyük dil ekosistemlerinin aynı mantığı benimsemesi
- Zorunlu sürüm yükseltmelerine karşı topluluk tepkisi
Bu arada, Groq’un Llama 3.3-70B çıkarım hizmetinin kaderi, bulut sağlayıcılarının bu dengesizliği para kazanıp kazanamayacağını açıklarácaktır. Groq, geliştiricilerin bağımlılıkları sabitlemeye çalışırken her çıkarım için 0,05 $ ücret aldığında, pazar ya kırılacak ya da yeni, daha karmaşık hata modları oluşturacaktır. Asıl soru, paket yöneticilerinin gelişip gelişmeyeceği değil, bu gelişmelerin sorunu çözeceği yoksa sadece yeni, daha karmaşık hata modları oluşturup oluşturmayacağıdır.