Apa Perbedaan Clone dan Fork?

Bagus Aji Santoso 4 Desember 2017

Apa Perbedaan Clone dan Fork?

Berita Utama yang dirilis oleh Hacker News baru-baru ini menyebabkan kegaduhan (tweet asli disini):

Image

Judul yang ditulis adalah Google forked Swift. Judul berita ini dapat menjadi judul yang akurat juga bisa menjadi judul yang membingungkan. Mengapa judul ini bisa membuat kegaduhan? Hal ini karena dalam istilah free and open source software, kata "fork" memiliki dua artian. Mari kita bahas lebih lanjut.

Fork

Konsep forking a project telah ada selama puluhan tahun di dunia free and open source software. Mem-"fork" berarti menyalin sebuah project, mengubah namanya, serta membuat sebuah project dan komunitas dengan salinannya. Orang yang melakukan fork jarang sekali berkontribusi kembali ke project utama.

Ada banyak alasan sebuah project di fork. Bisa jadi project tersebut sudah kurang diperhatikan pemilik asli sehingga seseorang ingin meneruskannya sendiri. Bisa jadi pula perusahaan yang membuat project aslinya telah diakuisisi dan komunitas pengguna project khawatir perusahaan yang mengakuisisi dapat menutup project tersebut. Atau mungkin saja terjadi perpecahan di dalam komunitas pengguna project tersebut dimana beberapa orang memutuskan untuk menempuh jalan yang berbeda. Apapun alasannya, sebuah fork adalah salinan sebuah project dengan tujuan untuk membuat project dan komunitas baru yang terpisah. Meskipun membutuhkan technical action, fork lebih sebagai social action.

Ada banyak fork yang telah terjadi dalam sejarah free and open source software. Beberapa yang paling besar adalah forking MariaDB dari MySQL, NextCloud dari OwnCloud, dan Jenkins dari Hudson.

Clone

Dulu, jika kita ingin bekerja disebuah codebase kita perlu mengatur CVS atau Subversion untuk membuat sebuah working copy di komputer lokal.

Sejak kedatangan git (juga Mercurial, tapi tidak langsung bersinggungan dengan masalah ini), kita tidak perlu lagi membuat sebuah working copy dari repositori utama. Kita dapat menyalin repositori tersebut dari siapa saja yang memilikinya. Setiap project yang di-clone tadi dapat menjadi repositori utama.

Jika ingin berkontribusi ke sebuah project yang menggunakan git sebagai version control system-nya, kita perlu membuat sebuah clone. Misalnya, jika ingin berkontribusi ke repositori Public_Speaking, kita akan membuat sebuah clone dengan perintah:

git clone https://github.com/vmbrasseur/Public_Speaking.git

Perintah ini akan membuat salinan repositori tersebut di komputer kita dimana kita bebas melakukan apapun dengannya. Jika ingin mengubah sesuatu dan mengirimkannya ke repositori utama, kita perlu membuat sebuah pull request. Apabila kita tidak memiliki akses langsung dari maintainers repositori utama, kita tidak bisa begitu saja mengubah sesuatu di repositori utama melainkan harus melalui sebuah clone dan pull request.

Clone, tidak seperti fork, merupakan technical actions sehingga tidak melibatkan komunitas.

Komplikasi

Proses yang terjadi dalam free and open source software cukup rumit. Saat GitHub diluncurkan tahun 2008 lalu, mereka memilih kata fork untuk merepresentasikan perintah git clone. Saat kita mem-fork sebuah project di Github, kita sebetulnya melakukan proses clone, sebuah salinan repositori dimana kita bekerja. Salinan yang dibuat ini dapat dijadikan fork seperti pada definisi di atas dengan memulai project dan komunitas yang baru daripada sekedar mengirim pull request ke repositori asli. Hampir semua orang yang melakukan fork ke sebuah project di GitHub hanya ingin membuat salinan biasa (clone). Hal ini lah yang menyebabkan kebingungan dalam mengartikan istilah fork.

Judul yang dirilis oleh Hacker News mengkhawatirkan beberapa orang bahwa Google telah mem-fork (dalam definisi aslinya) bahasa pemrograman Swift (seolah-olah Google memulai project baru dan terpisah), dibandingkan sekedar melakukan clone untuk berkontribusi balik ke project aslinya.

Image

Kesimpulan

Jadi bisa kita simpulkan bahwa, fork yang kita lakukan adalah sebuah aksi clone, tapi terkadang juga dapat menjadi fork tergantung pada niatan kita apakah ingin membuat project baru atau sekedar berkontribusi ke komunitas aslinya. Kemudian, jika menggunakan GitHub, saat melakukan clone artinya kita melakukan fork begitu pula sebaliknya.

Diterjemahkan dari What's the difference between a fork and clone? dipublikasi pertama kali di opensource.com