GitHub Lisans Verisi Kalitesi: Kayıp Oran %45’ten %24’e
GitHub, bağımlılık grafiği (dependency graph) içindeki yazılım bileşenlerine ait lisans bilgilerini artık doğrudan paket kayıt sunucularından (package registries) alıyor. Değişiklik; bağımlılık içgörüleri, SBOM üretimi, GitHub Advanced Security kapsamındaki açık kaynak lisans uyumluluk özelliği ve dependency review action gibi birçok yüzeyde gösterilen lisans verisinin hem doğruluğunu hem kapsamını artırıyor.
Neden bir değişikliğe gidildi?
Daha önce GitHub’da lisans verisinin birincil kaynağı ClearlyDefined servisiydi. GitHub bu servisi kullanmaya ve katkı sağlamaya devam ettiğini belirtiyor. Ancak ClearlyDefined’ın “derinlik öncelikli” (depth-first) dosya tarama yaklaşımı, kullanıcıların sonuçları yorumlamasını zorlaştıran karmaşık çıktılar üretiyordu. Yeni yaklaşımda GitHub paket kayıt sunucularından gelen lisans bilgisini önceliklendiriyor; kayıt sunucusunda karşılık bulunamayan durumlarda geri düşüş (fallback) olarak ClearlyDefined verisi kullanılmaya devam ediyor.
İlk sonuçlara göre yaklaşım değişikliği, eksik lisans oranını belirgin biçimde düşürdü. Bağımlılık grafiğindeki 170 milyon paket üzerinde eksik lisans oranı %45’ten %24’e indi; yani eksik lisans sayısı neredeyse yarı yarıya azaldı. Sistem artık her sürüm için ayrı bir veritabanı kaydına ihtiyaç duymadan sürüm aralıklarını (version ranges) takip ettiğinden, gerçek kapsamın raporlanan bu oranın da üzerinde olması bekleniyor.
Hangi kayıt sunucusu, hangi ekosistem için?
Dependency graph servisi, ilgili paket ekosistemi için “kanonik” kabul edilen kayıt sunucusundaki meta veriyi kullanıyor. GitHub’ın paylaştığı eşleştirme şöyle:
| Paket Yöneticisi | Kayıt Sunucusu (Registry) |
|---|---|
| npm | npmjs.org |
| NuGet | nuget.org |
| Python | pypi.org |
| Rubygems | rubygems.org |
| Rust | crates.io |
| Go | pkg.go.dev |
| Maven | deps.dev |
| Dart | pub.dev |
| PHP | packagist.org |
Tablo, GitHub’ın hangi ekosistem için hangi kaynağı otorite kabul ettiğini açıkça ortaya koyuyor. Böylece lisans verisinin nereden geldiğini anlamak ve kurumsal uyumluluk süreçlerinde denetlenebilirliği artırmak kolaylaşıyor.
Sürüm aralığına dayalı lisans geçmişi
Yeni modelin en dikkat çekici tarafı, dependency graph servisinin lisans geçmişini sürüm aralıkları üzerinden tutması. Her yeni sürüm için ayrı bir kayıt eklenmesi gerekmiyor; bir paketin lisansı değişene kadar aynı aralık geçerli sayılıyor.
GitHub bu davranışı Grafana örneği ile açıklıyor. Grafana, Apache lisansından AGPL lisansına geçmişti. Yeni sistemde bu paketin iki kaydı bulunuyor:
- 1.0.0 ile 7.5.17 arası sürümler için
Apache-2.0 - 8.0.0 ve sonrası sürümler için
AGPLv3
Bu yaklaşımın iki önemli faydası var. Birincisi, veritabanının karmaşıklığını azaltıyor: aynı lisansa sahip onlarca sürüm için ayrı ayrı kayıt tutulmuyor. İkincisi, henüz veritabanına eklenmemiş yeni sürümler için de otomatik olarak doğru lisans bilgisi sunuluyor; çünkü sürüm aralığı sonu açık bırakılmış bir kayıt, “bu sürümden sonrasının hepsi” anlamına geliyor. Böylece lisans verisi, yeni sürüm yayımlandığında elle güncelleme beklemeden hazır oluyor.
Hangi GitHub yüzeylerini etkiliyor?
Güncellenmiş lisans bilgisi, GitHub’ın lisans verisini gösterdiği tüm yüzeylerde şu an itibarıyla kullanılabilir durumda. Etkilenen alanlar şöyle:
- Dependency insights: Depo veya organizasyon düzeyinde bağımlılıkların lisans dağılımını izlerken daha az “unknown/eksik” satır görülmesi bekleniyor.
- SBOM (Software Bill of Materials): GitHub üzerinden üretilen SBOM çıktılarında lisans alanlarının daha eksiksiz gelmesi mümkün.
- GitHub Advanced Security – açık kaynak lisans uyumluluğu: Yasak veya kısıtlı lisansların tespiti, kaynak verisi güçlendiği için daha güvenilir çalışıyor.
- Dependency review action: Pull request üzerinde bağımlılık değişikliklerini incelerken lisans uyarılarının doğruluk oranı artıyor.
Uygulamada ne değişiyor?
Kurumsal ekipler için değişikliğin pratik yansıması, “unknown license” olarak işaretlenmiş bağımlılıkların sayısında azalma olarak görülecek. Özellikle npm, PyPI, NuGet gibi büyük ekosistemlere yaslanan projelerde SBOM ve uyumluluk raporları daha temiz çıktı üretebilir. Sürüm aralığına dayalı geçmiş ise Grafana benzeri lisans değişikliği yaşamış paketlerin doğru dönemde doğru lisansla eşleştirilmesini kolaylaştırıyor; bu da hem geçmişe dönük denetimlerde hem yeni sürümlerin devreye alınmasında ek bir güvence sağlıyor.
ClearlyDefined verisi tamamen bırakılmıyor; kayıt sunucusunda karşılık bulunmayan paketler için hala devrede. Yani lisans verisinin kalitesi, hem kanonik kayıt sunucularının hem de ClearlyDefined kataloğunun ortak katkısıyla iyileşmeye devam edecek.
Değerlendirme
GitHub’ın yaptığı bu değişiklik, tedarik zinciri güvenliği ve açık kaynak uyumluluğu tarafında sessiz ama etkili bir iyileştirme. Lisans verisinin daha doğru ve kapsamlı hale gelmesi; hukuki uyumluluk, güvenlik denetimi ve müşteriye SBOM sunma zorunluluğu olan ekipler için doğrudan fayda üretiyor. Sürüm aralığına dayalı model ise veritabanı bakım maliyetini düşürürken yeni sürümlerin de otomatik kapsanmasını sağlıyor; uzun vadede sürdürülebilir bir yaklaşım.
Kaynaklar ve İleri Okuma
- GitHub Changelog: License data quality improvements
- ClearlyDefined
- GitHub Community tartışması
- Disrupting supply chain attacks on npm and GitHub Actions
- Innersource Security Advisories GA: Kurum İçi Zafiyet Yönetimi







Yorum gönder