Yazılım projelerinde intihal dendiğinde zihinler çoğu zaman birebir kod kopyasına, yani dosyadan dosyaya satır eşleştirmesine gider. Oysa gerçek dünya çok daha katmanlıdır. Modern yazılım; çerçeveler, paket yöneticileri, transitive bağımlılıklar, gömülü snippet’ler, kod üreteçleri ve “örnek–şablon” paketlerle örülmüş devasa bir kütüphane ekosistemiüzerine kurulur. Bu ekosistem, üretkenliği artırırken kütüphane tabanlı intihal riskini de büyütür: Bir ekibin, üçüncü taraf kütüphanelerin kaynak/atfı gözetmeden kritik bölümlerini “vendoring” ile projeye gömmesi; bir açık kaynak projenin lisans koşulları ihlâl edilerek neredeyse aynen içe alınması; API kullanım örüntülerinin ve test setlerinin kaynak gösterilmeden taşınması; hatta ikili (binary) artefakt seviyesinde kopya tespiti gerektiren durumlar…
1) Kütüphane Tabanlı İntihal Nedir? Spektrum ve Sınırlar
-
Doğrudan içe alma (vendoring): Üçüncü taraf kütüphane dosyalarının küçük kozmetik değişikliklerle projeye gömülmesi.
-
Şablon/örnek kopyası: Framework starter’larının, örnek proje iskeletlerinin, test fixture’larının atıfsız–lisanssız kullanımı.
-
API desen intihali: Aynı fonksiyon çağrı sıraları, hata/istisna akışları ve benzersiz “idiom”ların kopyalanması.
-
Kısmi gömme: Kütüphaneden seçme fonksiyonların yeniden adlandırılarak projeye alınması.
-
İkili (binary) düzey: Minify/obfuscate edilmiş paketlerin aynen taşınması.
-
Lisans ihlali: GPL/MIT/Apache gibi lisans koşullarının çiğnenmesi; telif başlıklarının kaldırılması.
İncelemede amaç, fikrî emek–lisans–atıf üçlüsünün korunmasıdır; adil kullanım ve “fair use” istisnaları bağlamsal değerlendirme ister.
2) Tehdit Modeli ve Motivasyonlar
-
Zaman baskısı: “Hızla teslim et” kültürü, hazır kod gömmeyi teşvik eder.
-
Ölçek karmaşıklığı: Transitive bağımlılık zincirlerinde köken izini kaybetmek kolaydır.
-
Görünmezlik illüzyonu: Minify/obfuscate’le kopyanın saklanabileceği sanılır.
-
Örnek kodun normalleşmesi: “Zaten herkes kullanıyor” algısı atıfı zayıflatır.
3) Bağımlılık Grafı ve SBOM: Kökeni Görünür Kılmak
-
SBOM (Software Bill of Materials) oluşturarak her derlemede paket ad–sürüm–kaynak–lisans kaydı tutun.
-
Graf analizi: NPM/PyPI/Maven/Go modules bağımlılıklarından transitive zinciri çıkarın; “gölge paketler”i (fork’lanmış, yeniden adlandırılmış) etiketleyin.
-
Çakışma analizi: Aynı kütüphanenin iki sürümü; fork zinciri; “şüpheli yeniden paketleme”.
4) Manifest ve Metadata İzleri
-
package.json
,pyproject.toml
,pom.xml
,go.mod
,Cargo.toml
ve lock dosyaları:-
Hash ve integrity alanları;
-
Repository/Homepage URL’leri;
-
License, author, copyright başlıkları.
-
-
Eksik/boş lisans alanı ve silinmiş copyright başlıkları kırmızı bayrak.
5) Dosya Başlıkları ve Telif Satırları
-
Kaynak dosya başlıklarındaki lisans bloklarının otomatik taraması (regex/AST).
-
Şablon eşlemesi: Apache-2.0 başlığı → kaldırılmış mı, değiştirilmiş mi?
-
Farklarda edit distance ve “maskeli eşleşme” (yıl/isim değişimi).
6) Kod Klon Tespiti (Type I–IV)
-
Type I: Birebir kopya (boşluk/yorum dışında aynı).
-
Type II: İsimler değişmiş.
-
Type III: Eklemeler/çıkarımlar var.
-
Type IV: Farklı ifade ama eş davranış.
-
Araç yaklaşımı: Token tabanlı (winnowing), AST alt-ağaç, PDG/CFG benzerliği; kütüphane imzası ile çakıştırma.
7) API Kullanım Örüntüsü (Idiomatic Usage) Parmak İzi
-
Çağrı sırası, istisna yakalama kalıpları, resource management (open→read→close) zincirleri.
-
“Nadir idyomlar” (ör. spesifik bir parametre kombinasyonu) yüksek ayırt edicilik taşır.
-
Otomatik çıkarım: Call-graph + n-gram of API-calls → LSH/ANN ile eşleşme.
8) Test ve Fixture Kopyalarının İncelenmesi
-
Test isim kalıpları, table-driven testler, PS snapshot’ları, golden file’lar.
-
Aynı kenar durumlarının aynı sırayla test edilmesi ve aynı fixture verisi kopyası.
-
Benzerlik düşükse bile rastgele tohum (
seed
) ve mesaj metinleri eşleşmesi güçlü kanıttır.
9) Build Script ve Konfigürasyon İzleri
-
Gradle/Maven task’ları, Webpack/Rollup config’leri, ESLint/Prettier kuralları.
-
Opsiyon kümeleri ve plugin kombinasyonları kütüphane kökenini ele verir.
-
“Kör yapıştırma” izleri: Kullanılmayan plugin, bozuk path, proje bağlamıyla uyumsuz hedefler.
10) İkili (Binary) ve Dağıtım Artefaktı Analizi
-
Perseptüel hash (minify edilmiş JS paketleri için), string tablosu ve sembol izleri.
-
Web için SourceMap kontrollü geri açma; native için symbol diff.
-
İmza tabanı: Popüler kütüphanelerin minify edilmiş fingerprint’leri.
11) “Vendoring” ve Fork’lama Ayrımı
-
Legal vendoring: Lisans ve telif korunarak üçüncü taraf kodun kopyası.
-
Şüpheli fork: Telif başlıkları silinmiş, repo tarihi gizlenmiş, commit geçmişi sıfırlanmış.
-
Kanıt: Dosya ağaç yapısı, fonksiyon sırası, yorum dili, tarihsel commit izleri.
12) Lisans Uyum Taraması (SCA ile Birlikte)
-
SCA (Software Composition Analysis) araçlarıyla lisans tiplerini (GPL, LGPL, MIT, Apache, BSD, MPL vb.) ve kısıtları eşleyin.
-
Çıkarım hataları için manuel teyit: “UNLICENSED”, “custom” veya boş alanlar.
-
Beyaz/karalisteler: Kurumun kabul ettiği lisans seti, riskli kombinasyonlar (ör. GPL→kapalı kaynak).
13) SBOM + Klon Tespit + Lisans: Birleştirilmiş Risk Skoru
S=αSklon+βSAPI+γSbinary+ζStest+ηSlisans_riski
-
Çift eşik: Üst bant (inceleme zorunlu), orta bant (uyarı–düzeltme), alt bant (temiz).
-
Proje türüne göre profil (kütüphane, uygulama, CLI aracı, mobil).
14) Kod Üreticiler ve Örnek Depolar: YZ Çağının İncelikleri
-
Kod asistanlarının önerdiği snippet’ler lisans izleri taşıyabilir.
-
Framework starter’lar ve “awesome-templates” depoları: Atıf ve lisans dosyasının korunması esastır.
-
YZ kullanımında beyan ve izlenebilirlik: “Şu dosyada asistan yardımı” + kaynak linki.
15) Multidil ve Çapraz Yığın Eşleşme
-
Aynı kütüphanenin JavaScript/TypeScript, Python/C bağlayıcıları;
-
JNI/FFI köprüleri ve interface imza benzerliği;
-
“Özgün çeviri” sanılan ama birebir API semantiği taşıyan örnekler.
16) “Nadir Satırlar” ve “Sürçme İzi” Yaklaşımı
-
Çok özgül hata mesajları, yazım hataları, sıra dışı yorumlar “parmak izi” gibidir.
-
Rare-line index: Depolarda seyrek görülen satırlar için ters indeks → hızlı aday eşleşmesi.
17) Güvenlik–İntihal Kesişimi
-
Kopyalanan kütüphane bölümü CVE’li sürüm olabilir.
-
SCA bulgularını klon kanıtı ile iliştirin: “Hem kopya hem zafiyetli” kritik vakalar önceliklidir.
18) Vaka Çalışması A: JS UI Kütüphanesi Fork’u
Durum: Bir şirket, popüler bir UI kütüphanesini forkladığını söylemeden “özel komponent” diye dağıtıyor.
Bulgu: Minify JS’de pHash eşleşmesi + SourceMap string’lerinde orijinal sınıf adları.
Çözüm: Lisans ve telif başlıklarının geri eklenmesi, kanonik repo linki, değişiklik günlüğü.
19) Vaka Çalışması B: Python Veri İşleme Modülü
Durum: Bir modül, MIT lisanslı bir projeden fonksiyonları yeniden adlandırıp içe almış.
Bulgu: AST alt-ağaç benzerliği yüksek; test fixture’ları aynı; seed=42
mesajları ortak.
Çözüm: Atıf ve lisans dosyası eklenir, değişiklikler belgelendirilir; gerektiğinde upstream’e PR.
20) Vaka Çalışması C: Mobil SDK ve Binary İz
Durum: Mobil SDK’da üçüncü taraf analitik kitaplığının gömülü kopyası var.
Bulgu: Symbol tablosunda işlev imzaları, binary pHash; sürüm eski ve CVE’li.
Çözüm: Resmî bağımlılık şeklinde tüketim, sürüm yükseltme, SBOM güncellemesi.
21) Süreç ve Yönetişim: Politika–Akış–Sorumluluk
-
Politika: Hangi lisanslar kabul, “vendoring” koşulları, atıf biçimi.
-
Akış: PR açılışında otomatik SBOM üretimi + SCA + klon taraması; ihlâlde “policy gate”.
-
Roller: Geliştirici, reviewer, OSS uyum sorumlusu, hukuk.
-
Kayıt (audit): Düzeltmeler, atıflar, lisans eklemeleri sürekli izlenebilir.
22) Otomasyon: CI/CD’ye Entegre Kontroller
-
Pre-commit: Telif başlığı denetimi, lisans taraması.
-
CI: Klon/AST taraması, API idyom analizi, SBOM üreterek artefakta iliştirme.
-
CD: Release öncesi lisans paketlemesi (NOTICE/THIRD_PARTY).
23) Eğitim ve Kültür
-
Atıf pratikleri: README, NOTICE ve değişiklik günlüğü (CHANGELOG) örnekleri.
-
Lisans okuryazarlığı: MIT vs. GPL etkileri, “static vs. dynamic link” farkları.
-
Şablonların etik kullanımı: Starter’larda “kredi” bölümü, dokümantasyonda kaynakça.
24) KPI ve Başarı Ölçümü
-
İhlâl bayrak oranı, yanlış pozitif oranı, düzeltme süresi.
-
Atıf sayısı ve doğruluğu; SBOM kapsama oranı.
-
Güvenlik kesişimi: “İntihal + CVE” vaka sayısında azalma.
-
Açık kaynak katkısı: “Upstream’e dönen düzeltme/PR” sayısı.
25) Yol Haritası: 60–90 Gün
-
Hafta 1–2: Politika ve lisans matrisi; SBOM şablonu; SCA aracı seçimi.
-
Hafta 3–5: Klon/AST/pHash taraması POC; rare-line index oluşturma.
-
Hafta 6–8: CI/CD entegrasyonu; policy gate; NOTICE üretimi.
-
Hafta 9–10: Eğitim ve örnek repo templateleri; “kredi” bileşeni.
-
Hafta 11–12: Kalibrasyon (ROC/PR), yanlış pozitif azaltımı; metrik panosu.
Sonuç
Kütüphane tabanlı intihal, modern yazılımın bağımlılık merkezli doğası nedeniyle geleneksel “dosya–satır” odaklı denetimle yakalanamayabilir. Etkili bir strateji; SBOM/SCA ile köken–lisans şeffaflığını, klon–AST–API idyomanaliziyle kod düzeyi kanıtı, binary/pHash ile dağıtım artefaktı izlerini ve test/fixture eşlemesini ansambl hâlinde birleştirir. Bu teknik yapı, politikalar ve otomasyon (CI/CD gate’leri, pre-commit kuralları, NOTICE üretimi) ile bütünleştiğinde, intihal yalnızca “yakalanan ihlal” değil; adil yeniden kullanım ve açık kaynakla sağlıklı ilişkikültürüne dönüşen bir pratik olur.
Uzun vadede kazanan, yalnız hukuki risklerin azalması değildir: Daha izlenebilir tedarik zinciri, daha güvenli bağımlılıklar, daha saydam ürün belgeleri ve geliştirici topluluğunda güven artışı sağlanır. YZ çağında dahi, şablon ve örneklerden öğrenmek meşrudur; mesele, kaynağı görünür kılmak, lisansa saygı göstermek ve katkıyı belgelemektir. Bu ilkelerle kurulan bir sistem, kurumu hem etik hem mühendislik olgunluğu bakımından ileri taşır.
No responses yet