Forking Nedir? Yazılım Geliştirmede Dallandırma Tekniği Detaylı Açıklama

Forking, bir yazılım projesinin bağımsız bir kopyasını oluşturarak kendi kontrolünüz altında geliştirme yapma işlemidir. Genellikle açık kaynak projelerde orijinal kodu değiştirmeden yeni özellikler eklemek veya hataları düzeltmek için kullanılır. Forking, yazılım geliştirme sürecinde merkeziyetsiz işbirliğini mümkün kılar.

5 dk okuma
Forking

Forking, bir yazılım projesinin tamamen bağımsız bir kopyasını oluşturarak kendi kontrolünüz altında geliştirme yapma tekniğidir. Genellikle GitHub, GitLab ve Bitbucket gibi kod yönetim platformlarında karşınıza çıkan forking, açık kaynak yazılım dünyasının temel taşlarından biridir. Bu işlem sayesinde herhangi bir kişi, izin almadan bir projenin tarafından ayrılabilir, kendi versiyonunu oluşturabilir ve tamamen farklı yönde geliştirebilir.

Forking Nasıl Çalışır?

Forking işlemi teknik olarak oldukça basittir. Bir depo (repository) üzerinde "Fork" düğmesine tıkladığınızda, o deponun tüm dosyaları, commit geçmişi ve branch'leri sizin hesabınız altında yeni bir depo olarak kopyalanır. Bu, orijinal depodan tamamen bağımsız bir kopyasıdır.

Örneğin, GitHub'da bir projeyi forklarsanız:

  • Projenin tam kopyası sizin hesabınıza geçer
  • Orijinal proje üzerinde hiçbir etkiniz olmaz
  • Kendi forkunuzda istediğiniz değişiklikleri yapabilirsiniz
  • Dilerseniz "Pull Request" (Çekme İsteği) aracılığıyla değişikliklerinizi orijinal projeye sunabilirsiniz
  • Orijinal proje güncellenirse, bu güncellemeleri kendi forkunuza almayı seçebilirsiniz

Forking ile Clone Arasındaki Fark

Forking ve clone (klonlama) sık sık karıştırılır, ancak aralarında önemli farklar vardır:

Özellik Forking Clone
Tanım Sunucuda yeni bir depo oluşturma Depoyu yerel makinaya indirme
Yer Uzak sunucuda (GitHub vb.) Yerel bilgisayarda
Bağlantı Orijinal depodan bağımsız Orijinal depoyla bağlantılı
Amaç Uzun süreli, bağımsız geliştirme Yerel üzerinde çalışmak
Pull Request Gönderebilirsiniz Gönderemezsiniz (izniniz varsa push yapabilirsiniz)

Forking Nerede ve Ne Zaman Kullanılır?

Forking, özellikle aşağıdaki durumlarda yaygın olarak kullanılır:

  • Açık Kaynak Projelere Katkı: Bir açık kaynak projesine hata düzeltmesi veya yeni özellik eklemek istiyorsanız, önce forklarsınız.
  • Yazılımı Kustomize Etme: Mevcut bir yazılımı alıp kendi ihtiyaçlarınıza göre uyarlamak.
  • Proje Ayrışması: Bir projeden tamamen farklı bir yöne gitmek istediğinizde (bu duruma "fork" olayı da denir).
  • Deney Yapma: Riskli değişiklikleri orijinal projeyi etkilemeden deneme fırsatı.
  • Bakım Almayan Projeleri Devam Ettirme: Geliştirici tarafından artık bakımı yapılmayan bir projeyi fork edip yeni versiyon yayınlama.

Forking'in Avantajları

  • Özgürlük: Orijinal projeyi etkilemeden istediğiniz gibi değişiklik yapabilirsiniz.
  • İşbirliği: Çok sayıda geliştirici paralel olarak aynı proje üzerinde çalışabilir.
  • Merkeziyetsizlik: Merkezi bir onay mekanizmasına gerek yoktur; herkes kendi versiyonunu yönetebilir.
  • Geri Dönüş: Pull Request aracılığıyla en iyi değişiklikler orijinal projeye dönebilir.
  • Yedekleme: Bir nevi proje yedeklemesi sağlar.

Forking'in Dezavantajları

  • Parçalanma: Aynı projenin birden fazla versiyonu ortaya çıkabilir, bu da kullanıcıları karıştırabilir.
  • Bakım Yükü: Forklanan projeler ayrı olarak bakım gerektir.
  • Senkronizasyon Sorunu: Orijinal proje güncellenirse, fork versiyonu da güncel tutulmalıdır.
  • Topluluk Bölünmesi: Geliştirici gücü ve topluluk, birden fazla fork arasında dağılabilir.

Forking Türleri ve Seviyeleri

Forking, amacına ve kapsamına göre farklı şekillerde yapılabilir:

  • Katkı Amaçlı Fork: Orijinal projeye geri katkı vermek amacıyla yapılan forking. En yaygın türüdür.
  • Kalıcı Fork: Orijinal projeden tamamen ayrılarak kendi bağımsız projesine dönüştürülen forking (ör. MariaDB'nin MySQL'den ayrılması).
  • Deneysel Fork: Test ve deney amaçlı, kısa ömürlü forking.
  • Ticari Fork: Açık kaynak yazılımı alıp ticari olarak uyarlamak (lisans terimleri uygunsa).

Forking'in Tarihi ve Önemi

Forking kavramı, Git version control sistemiyle yaygınlaşmıştır. 2000'lerin başında merkeziyetsiz version control sistemlerine ihtiyaç duyulmuş, Git bu ihtiyacı karşılamıştır. Forking, özellikle GitHub'ın 2008 yılında kurulmasından sonra, açık kaynak yazılım geliştirmede devrim yaratmıştır. Bugün, milyonlarca proje fork edilerek farklı versiyonlara dönüştürülmüştür.

"Forking, yazılım geliştirmede gerçek anlamda demokratikleşme sağlamıştır. Herkes, her hangi bir merkezi otoritenin izni olmadan bir projeyi alıp kendi yolunda ilerleyebilir." – Açık Kaynak Yazılım Felsefesi

Pratik Forking Örnekleri

Ünlü Forking Örnekleri:

  • MariaDB: MySQL'in fork'lanarak tamamen bağımsız veritabanı sistemine dönüştürülmesi.
  • LibreOffice: OpenOffice'in fork'lanarak çok daha başarılı versiyonu haline gelmesi.
  • Chromium Tabanlı Tarayıcılar: Microsoft Edge, Opera ve Brave gibi birçok tarayıcı Chromium'u fork ederek yapılmıştır.
  • Linux Dağıtımları: Debian, Ubuntu, Fedora gibi dağıtımlar aslında Linux kernel'inin forklandığı ve uyarlandığı örneklerdir.
Forking ile Pull Request arasında ne fark vardır?+
Forking, bir projenin bağımsız kopyasını oluşturmak; Pull Request ise fork'lanmış projede yapılan değişiklikleri orijinal projeye geri gönderme isteğidir. Fork'lanmadan Pull Request gönderilemez.
Bir fork'u orijinal projenin güncellemeleriyle senkronize nasıl yapılır?+
Fork'unuzdaki "upstream" olarak orijinal depoyu ayarlarsınız ve düzenli olarak "git fetch upstream" komutuyla değişiklikleri çekersiniz, ardından merge edersiniz. Çoğu platform (GitHub vb.) bu işlemi kolay bir buton aracılığıyla sunar.
Fork'lanmış bir projeyi silebilir miyim?+
Evet, bir fork'u istediğiniz zaman silebilirsiniz. Orijinal projede hiçbir etki yaratmaz. Ancak fork'unuza dayalı Pull Request'leriniz varsa, silinmeden önce bunları kontrol etmelisiniz.
Forking için özel yazılım gerekli midir?+
Hayır, GitHub, GitLab, Bitbucket gibi web platformları forking işlemini basit bir "Fork" butonu aracılığıyla sağlarlar. Teknik olarak Git'i anlamak faydalı olmakla beraber, mutlaka gerekli değildir.
Fork'lanmış bir proje ticari amaçla kullanılabilir mi?+
Projenin lisansına bağlıdır. MIT, Apache 2.0, GPL gibi açık kaynak lisanslarının çoğu ticari kullanıma izin verir. Ancak GPL lisansı altındaki bir yazılımı fork edip ticari ürüne çevirirseniz, kodunuzu da açık kaynak yapmak zorunludur.

F harfindeki diğer terimler