· kaynak Hacker News – Front Page (native)
PHP geliştiricisi, yaklaşık 20 milyon kez indirilen 2014 tarihli http_build_url shim'ini deprecated etti
2014'te bir AOL CMS göçü için yazılmış 174 satırlık bir PHP polyfill'i yaklaşık 20 milyon kez kuruldu. Geliştiricisi, paketi denetlenmemiş bir bakımcıya devretmek yerine artık deprecated etti.

2014'te geçici bir çözüm olarak yazılmış 174 satırlık bir PHP fonksiyonu yaklaşık 20 milyon kez indirildi ve geliştiricisi artık onu deprecated etti. Jake A. Smith, http_build_url polyfill'ini emekliye ayırma kararını Hacker News ana sayfasına çıkan bir blog yazısında duyurdu; modern alternatiflerin bu shim'i gereksiz kıldığını ve yeni bir bakımcıya devredilmesinin PHP ekosisteminin kaçınması gereken türde bir tedarik zinciri riski yaratacağını açıkladı.
Geçici bir çözüm nasıl yayıldı
Smith, kodu AOL'ün içerik yönetim sistemini PHP 5.2'den 5.3'e yükseltmesine yardım ederken yazdı. Yükseltme, CMS'in onlarca yerde çağırdığı URL oluşturma fonksiyonu http_build_url()'ı sağlayan pecl_http eklentisinin 1. sürümünün bırakılması anlamına geliyordu. Smith, bu çağrı noktalarını yeniden yazmak yerine fonksiyonu, yalnızca gerçek eklenti yoksa tanımlanacak şekilde yeniden uyguladı ve paketi Packagist'e yayımladı; topluluk daha iyi bir şey üzerinde uzlaşana kadar bir iki yıl işe yarayacağını düşündü.
Ama geçici olmadı. Smith'e göre paket yaklaşık 20 milyon kez kuruldu ve hâlâ her ay 400.000'den fazla kurulum birikiyor. Dağıtımı Composer'ın çok ötesine uzanıyor: çok dilli bir WordPress eklentisi olan WPML polyfill'i doğrudan paketliyor ve 1,5 milyondan fazla sitede çalıştığını söylüyor; idna-convert kütüphanesi de ona bağımlı, bu da kodu SPIP içerik yönetim sistemine ve Debian ile Ubuntu paketlerine taşıyor. Smith, AOL'ün shim'den hiç ayrılmadığını ve platform 2020 civarında kapatılana kadar kodun CMS içinde çalıştığını ekliyor.
Yarım kalan devir ve sinsi bir hata
Smith yıllar önce PHP'den uzaklaştı. 2021'de indirme sayılarına şaşıran yeni bir bakımcı aradı ve üç kişi gönüllü oldu, ama ailesindeki ani bir vefat süreci sekteye uğrattı ve takibini yapamadı. Pakete ancak yakın zamanda yeniden baktı ve kurulum istatistiklerinin yanı sıra, slash ile biten bir URL'ye yol eklendiğinde yoldaki tüm "a" harflerinin silinmesi de dahil bir dizi GitHub issue'su buldu.
Bunun nedeni, açıklamasına göre, son bir segment garanti etmek için yola bir "a" ekleyip ardından bul-değiştir ile kaldıran bir çözümdü. Yol slash ile bitiyorsa eklenen "a" son segment oluyor ve değiştirme işlemi onunla birlikte yoldaki diğer tüm "a" harflerini siliyor. Smith, kusurun bu kadar uzun süre fark edilmemesine şaşırdığını söylüyor.
Devir yerine deprecasyon neden
Yaklaşık on yıl uzak kaldıktan sonra PHP'ye dönmek, sahipliği devretmek ya da paketi atıl bırakmak seçenekleri karşısında Smith onu emekliye ayırmayı seçti. Topluluğun URL işleme için yerleşik çözümü olarak The PHP League'nin URI kütüphanesini gösteriyor ve PHP 8.5'in artık dilin kendisinde standartlara uygun bir URI API'siyle geldiğini belirtiyor. İkisi de onun görüşüne göre on yılı aşkın süre önce yazılmış kısa bir shim'den daha iyi seçenekler.
Paketi devretmek, riski azaltmak yerine artırır diye savunuyor: yeni sahibini hiçbir aşağı akış kullanıcısının denetlemediği, yaygın kurulmuş bir bağımlılık, saldırganların aradığı türden yüksek değerli ve az denetimli bir hedeftir; bu dinamiği xz Utils arka kapısıyla karşılaştırıyor ve o olayın en net anlatımı olarak bir Veritasium videosuna atıf yapıyor. ozh'in YOURLS için bir fork sürdürdüğünü ve bir topluluk üyesinin ona yeni PHP 8.5 API'sini gösterdiğini belirtiyor.
Deprecasyon kurulumları bozmuyor: paket Packagist'ten indirilmeye devam edecek. Ama eksik "a" hatası dahil başka düzeltme almayacak, çünkü yıllarca değişiklik görmeyen bir pakette tek satırlık bir yama bile, sonucu destekleyecek kimse kalmadığında istenmeyen sonuçlar doğurabilir. README, nasıl geçileceğini belgeliyor.
Neden önemli
Bu olay, "geçici" uyumluluk shim'lerinin görünmez altyapıya dönüşmesinin küçük ama özlü bir örneği. Özel bir göç yaması, WordPress eklentilerine, Linux dağıtımlarına ve Smith'in kendi ifadesiyle neredeyse herkesin muhtemelen ziyaret ettiği web sitelerine gömülmüş bir bağımlılığa dönüştü. PHP geliştiricileri için pratik adım, projelerinin http_build_url polyfill'ini çekip çekmediğini kontrol etmek ve The PHP League'nin URI kütüphanesine ya da PHP 8.5'in yerel API'sine geçişi planlamaktır. Daha geniş açıdan bakıldığında, yüksek kurulumlu bir paketi devretmek yerine deprecated etme kararı bilinçli bir tedarik zinciri değerlendirmesi: on milyonlarca kurulumu olan bir bağımlılığın denetlenmemiş yeni sahibi, dürüst bir kullanımdan kaldırmaadan daha büyük bir tehlike olabilir.
- #php
- #packagist
- #composer
- #supply-chain
- #open-source
İlgili yazılar
- Cloudflare, çok aşamalı güvenlik denetimleri için bir coding-agent skill'i açık kaynak yaptı
- TypeSafe'ın Jev tarayıcı ajanı, indekslenmiş aksiyon uzayıyla web görevlerini saniyeler içinde tamamlıyor
- Floci: ücretsiz ve açık kaynak LocalStack alternatifi, AWS servislerini Docker'da yerel olarak çalıştırıyor