Proyek perangkat lunak open source merupakan proyek yang memberikan kode program kepada penggunanya secara bebas, dan tak jarang pengembangannya dilakukan secara terbuka: siapapun boleh berkontribusi dalam menulis kode tersebut. Proyek open source sangat populer di Indonesia, karena harga software orisinal yang masih dianggap mahal oleh masyarakat kita. Menggunakan perangkat lunak open source tentunya sangat baik, karena selain tidak melakukan pembajakan, kita juga mendukung para pengembang dari perangkat lunak yang kita gunakan. Tetapi, akan lebih baik lagi jika kita juga ikut berkontribusi, mulai dari kontribusi pengunaan, pelaporan bug, sampai dengan kontribusi kode. Kontribusi pada proyek open source akan membantu meningkatkan kemampuan pengembagnan perangkat lunak kita, yang (harapannya) akan meningkatkan kualitas pekerjaan kita, dan pada akhirnya meningkatkan nilai praktisi TI Indonesia secara nasional maupun Internasional.

Penulis sendiri bermimpi suatu hari akan terjadi pergerakan open source yang besar di Indonesia, menyaingi para pengembang open source luar negri. Mari wujudkan mimpi tersebut bersama!

Jadi, jika kita ingin berkontribusi pada proyek open source, apa yang harus pertama kali dilakukan? Tulisan ini akan membahas langkah demi langkah yang dapat diambil untuk berkontribusi pada proyek open source. Langkah yang dijabarkan merupakan langkah yang dilakukan oleh penulis ketika berkontribusi pada sebuah framework PHP yang dikembangkan secara terbuka, yaitu Symfony. Kontribusi ini dipilih karena merupakan kontribusi terakhir dan terbaru dari penulis, sehingga langkah-langkahnya masih segar dalam kepala penulis.

Langkah 0: Mengetahui Aturan Kontribusi pada Proyek

Lain ladang lain belalangnya, lain lumbung lain ikannya. Jika kita ingin pergi ke suatu daerah, tentunya kita harus mempelajari budaya dan hukum pada daerah tujuan tersebut. Mengetahui budaya dan hukum pada suatu tempat akan membantu untuk menjaga diri kita sendiri, agar tidak melakukan kesalahan dan menyinggung orang-orang yang berada pada daerah tersebut, atau bahkan melanggar hukum pada daerah tersebut.

Hal ini juga harus diaplikasikan pada proyek pengembangan perangkat lunak. Setiap proyek memiliki aturan kontribusinya sendiri. Ada yang mengharuskan pengiriman kode dilakukan dalam bentuk patch, melalui email. Ada yang melakukan pengembangan pada platform seperti Github. Aturan kontribusi juga umumnya mencakup standar pengkodean (tab vs space, penamaan variabel, dll). Sebelum mulai berkontribusi, cari tahu terlebih dahulu aturan-aturan yang harus diikuti oleh kontributor. Misalnya, untuk symfony, kita dapat membaca aturan kontribusi pada dokumentasi resmi symfony. Kontribusi yang tidak mengikuti aturan kontribusi proyek seringkali akan ditolak, sebesar apapun kontribusi tersebut. Jadi ingat, sebelum memulai proyek, pastikan kita telah mengerti aturan kontribusi dari proyek tersebut dengan baik.

Langkah 1: Komunikasi

Proyek open source yang dikembangkan secara terbuka umumnya memiliki sangat banyak kontributor. Karena banyaknya kontributor ini, jika tidak hati-hati kita mungkin saja melakukan pekerjaan yang telah dilakukan oleh orang lain. Komunikasi sangat penting untuk memastikan duplikasi usaha tersebut tidak terjadi. Misalnya, sebelum menuliskan laporan bug, terlebih dahulu cari apakah sudah ada laporan yang sejenis pada basis data bug proyek. Sebelum menuliskan kode untuk menambahkan fitur, pastikan terlebih dahulu fitur tersebut tidak sedang dikembangkan oleh kontributor lainnya. Biasanya proyek open source memiliki milis atau forum tersendiri untuk komunikasi pada kontributornya. Kita juga dapat berkomunikasi melalui sarana lain, seperti email ke pemimpin proyek. Kontribusi terakhir penulis kepada Symfony berawal dari tweet pimpinan proyek Symfony (klik gambar untuk masuk ke percakapan tersebut pada twitter).

Klik untuk melihat langsung di twitter

Seperti yang dapat dilihat pada gambar, tidak diperlukan bahasa inggris yang sempurna untuk berkomunikasi (penulis membuat beberapa kesalahan gramatikal - jangan dihakimi, akibat mengantuk :D). Yang penting adalah memastikan bahwa apa yang ingin kita lakukan dapat dimengerti oleh pengembang lainnya.

Langkah 2: Mengambil Kode

karena kontribusi yang dilakukan penulis ialah melakukan terjemahan, maka tentunya pengambilan kode program akan dibutuhkan. Jika kontribusi yang dilakukan tidak berhubungan dengan kode (misalnya melaporkan bug atau menjadi beta tester), maka langkah ini harus disesuaikan dengan kegiatannya.

Catatan: Pengembangan Symfony dilakukan pada Github, karenanya tulisan ini akan memberikan langkah-langkah yang spesifik terhadap Github. Tetapi konsep-konsep yang dijalankan tidak akan jauh berbeda dengan platform-platform lainnya.

Untuk mengambil kode, pertama-tama kita harus masuk ke halaman proyek Symfony pada Github terlebih dahulu. Pada Github, pengkopian kode dapat dilakukan secara otomatis, sehingga kode proyek akan dimasukkan ke akun kita. Untuk melakukan pengkopian, tekan tombol “Fork” pada bagian kiri atas halaman (lihat arsiran merah pada gambar).

Fork pada Github

Ketika tombol ditekan, kita akan diberikan tampilan loading, sampai pengkopian selesai dilakukan. Tunggu saja sampai selesai, dan setelah selesai kita akan dibawa ke kopi kode pada halaman kita. Perhatikan bagaimana nama proyek pada gambar di bawah berbeda dengan nama proyek pada gambar sebelumnya (symfony/symfony vs bertzzie/symfony).

Fork berhasil

Jika nama proyek dan halaman sudah berubah, maka kita telah berhasil melakukan pengkopian repositori kode. Sekarang kita akan mulai melakukan perubahan kode, yang ingin kita kirimkan kembali ke symfony.

Langkah 3: Coding

Repositori kode yang kita kopikan pada langkah sebelumnya masih tersimpan pada server Github. Jika ingin mengubah kode, tentunya kita harus mengunduh kode tersebut ke komputer kita terlebih dahulu. (Perubahan dapat dilakukan secara langsung di Github juga, tetapi tentunya akan lebih mudah jika dilakukan pada komputer lokal).

Catatan: Karena Github mengharuskan kita menggunakan VCS (Version Control System) git, pada tulisan ini diasumsikan git telah ada di komputer pembaca. Karena sifat kontribusi yang sederhana, tulisan ini tidak mengharuskan pengertian akan git. Penjelasan lengkap mengenai VCS dan git akan dilakukan pada tulisan lainnya. Untuk sementara, jika penasaran, pembaca dapat membaca dokumentasi resmi git berbahasa Indonesia.

Pengambilan kode secara lokal dapat dilakukan dengan perintah git clone pada terminal anda. Pengguna sistem operasi Windows dapat menjalankan Git Bash yang akan otomatis terpasang ketika menginstalasi git. Berikut adalah keluaran perintahnya:

bert@LYNNSLENIA ~/Desktop/projects
$ mkdir symfony

bert@LYNNSLENIA ~/Desktop/projects
$ git clone git@github.com:bertzzie/symfony.git
Cloning into 'symfony'...
remote: Counting objects: 154197, done.
remote: Compressing objects: 100% (47029/47029), done.
remote: Total 154197 (delta 98363), reused 144939 (delta 90539)
Receiving objects: 100% (154197/154197), 24.43 MiB | 105 KiB/s, done.
Resolving deltas: 100% (98363/98363), done.
Checking out files: 100% (3956/3956), done.

URL untuk kode (pada kasus ini: git@github.com:bertzzie/symfony.git) didapatkan dari halaman proyek pada Github. Setelah melakukan kopi kode ke komputer lokal, kita dapat melihat bagaimana isi dari direktori yang baru dibuat tadi telah berisi:

bert@LYNNSLENIA ~/Desktop/projects/symfony (master)
$ ls
CHANGELOG-2.0.md  CONTRIBUTORS.md  UPGRADE-2.1.md     composer.json
CHANGELOG-2.1.md  LICENSE          UPGRADE-2.2.md     phpunit.xml.dist
CONTRIBUTING.md   README.md        autoload.php.dist  src

Sebelum melakukan perubahan lebih lanjut, kita akan menambahkan repositori kode pusat (symfony/symfony) pada repositori lokal kita, untuk memudahkan kita dalam memastikan perubahan yang dilakukan tidak mengalami konflik dengan kontributor lainnya (detil ada pada langkah selanjutnya). Perintah untuk menambahkan repositori rujukan ialah git remote add <nama-repo> <alamat-repo>. nama-repo dapat diisikan sesuka hati kita, seperti berikut:

bert@LYNNSLENIA ~/Desktop/projects/symfony (master)
$ git remote add upstream git://github.com/symfony/symfony.git

Perhatikan juga bagaimana pada prompt terminal telah ada kata (master), yang menandakan bahwa kita sedang berada pada cabang utama dari kode. Agar tidak merusak history dari proyek, kita akan membuat cabang baru dan bekerja pada cabang tersebut. Perintah untuk membuat cabang baru dan otomatis berpindah ke cabang tersebut ialah git checkout -b <nama-cabang>:

bert@LYNNSLENIA ~/Desktop/projects/symfony (master)
$ git checkout -b validation-indo-translation master
Switched to a new branch 'validation-indo-translation'

bert@LYNNSLENIA ~/Desktop/projects/symfony (validation-indo-translation)
$

Perhatikan bagaimana tulisan (master) telah berubah menjadi (validation-indo-translation) begitu perintah selesai dituliskan. Hal ini berarti kita telah berada pada cabang validation-indo-translation, dan dapat bekerja pada cabang tersebut dengan aman.

Catatan: Tidak apa-apa jika sampai titik ini anda belum mengerti mengenai git, dan kegunaannya. Pembahasan mengenai hal tersebut akan dilakukan lain waktu (atau anda dapat membaca dokumentasi yang diberikan sebelumnya). Inti dari pembahasan ialah kontribusi ke proyek open source, bukan pengunaan git.

Setelah memiliki cabang baru, lakukan perubahan atau penambahan kode yang ingin diberikan kepada proyek. Perubahan kode yang penulis lakukan dapat dilhat di sini dan di sini.

Langkah 4: Mengirimkan Kontribusi

Setelah perubahan kode dilakukan, simpan perubahan ke dalam git dengan perintah git commit:

bert@LYNNSLENIA ~/Desktop/projects/symfony (validation-indo-translation)
$ git commit -a
[validation-indo-translation 08f2631] [Validation] Improve Indonesian translatio
n.
 1 file changed, 37 insertions(+), 5 deletions(-)

Catatan: Jika terdapat tambahan berkas, terlebih dahulu harus dijalankan perintah git add, tetapi sekali lagi, detil pengunaan git tidak akan dibahas pada tulisan ini.

Setelah selesai melakukan commit, kita akan mengambil kode lagi dari pusat, untuk memastikan tidak terdapat konflik pada kontribusi kode kita. Konflik dapat terjadi jika dua atau lebih kontributor melakukan perubahan pada satu berkas, terutama jika perubahan dilakukan pada baris yang sama, terlepas dari apakah tujuan perubahan sama atau tidak. Perintah yang digunakan adalah git fetch dan git merge, pada cabang utama:

bert@LYNNSLENIA ~/Desktop/projects/symfony (validation-indo-translation)
$ git checkout master
Switched to branch 'master'

bert@LYNNSLENIA ~/Desktop/projects/symfony (master)
$ git fetch upstream
From git://github.com/symfony/symfony
 * [new branch]      2.0        -> upstream/2.0
 * [new branch]      2.1        -> upstream/2.1
 * [new branch]      console-autocomplete -> upstream/console-autocomplete
 * [new branch]      deprecated -> upstream/deprecated
 * [new branch]      master     -> upstream/master

bert@LYNNSLENIA ~/Desktop/projects/symfony (master)
$ git merge upstream/master
Already up-to-date.

Setelah memastikan tidak ada konflik, kita kemudian dapat kembali ke cabang validation-indo-translation dan menggabungkan cabang tersebut dengan cabang utama, sehingga kontribusi dapat dikirimkan kembali ke repositori symfony. Perintahnya yaitu git rebase:

bert@LYNNSLENIA ~/Desktop/projects/symfony (master)
$ git checkout validation-indo-translation
Switched to branch 'validation-indo-translation'

bert@LYNNSLENIA ~/Desktop/projects/symfony (validation-indo-translation)
$ git rebase master
Current branch validation-indo-translation is up to date.

Perubahan kemudian kita kirimkan ke repositori kita di Github terlebih dahulu:

bert@LYNNSLENIA ~/Desktop/projects/symfony (validation-indo-translation)
$ git push origin validation-indo-translation
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 1.19 KiB, done.
Total 9 (delta 6), reused 0 (delta 0)
To git@github.com:bertzzie/symfony.git
 * [new branch]      validation-indo-translation -> validation-indo-translation

Pastikan cabang telah masuk ke dalam repositori kita di Github denagn melihat pilihan cabang (harus ada pilihan validation-indo-translation):

Pilihan cabang

Langkah 5: Pull-Request pada Github

Selesai memasukkan kode ke repositori kita di Github, kita dapat mengirimkan pull-request kepada repositori pusat. Pull-request merupakan fitur yang memungkinkan kita memberitahukan kepada para pengembang di pusat bahwa kita memiliki perubahan yang ingin dikirimkan ke mereka. Tombol pull-request ada pada kiri atas repositori:

Tombol Pull Request

Setelah itu kita akan dibawa pada halaman pull-request. Pastikan bahwa cabang yang dipilih adalah cabang yang benar (jangan pedulikan pesan kesalahan pada gambar - pesan ini muncul karena penulis baru melakukan screen shot setelah kontribusi dilakukan):

Pull request

Setelah itu, isikan pesan yang ingin diberitahukan kepada pengembang di pusat (tidak ada gambar dari pandangan penulis karena kontribusi telah diterima, dan tidak dapat dilihat lagi :():

deskripsi pull request

dan kemudian tekan tombol “Send pull request untuk mengirimkan pull request:

send pull request

Setelah selesai mengirimkan pull-request, maka kita akan diberikan notifikasi jika pull-request kita telah diterima ataupun terdapat komentar pada pull-request tersebut (misalnya jika terdapat kesalahan kecil dalam kode). Gambar pada tahap ini tidak dapat ditampilkan karena penulis tidak mempersiapkan gambar (maaf :() dan kode penulis telah diterima, sehingga pull-request telah terhapus.

Jika penasaran dengan proses diskusinya, berikut adalah salah satu contoh pull-request yang masih dalam tahap diskusi. Jika kode kita diterima, maka terdapat notifikasi (”someone added a commit…“) seperti berikut. Status dari pull-request yang telah diterima maupun ditolak adalah “Closed”.

Penutup

Tulisan ini telah menjelaskan secara lengkap bagaimana berkontribusi dalam proyek open source. Sekali lagi, kontribusi dalam proyek open source akan memberikan keuntungan banyak kepada diri kita. Penambahan kemampuan teknis (kapan lagi kode kita di-review secara gratis oleh pengembang-pengembang hebat dan profesional luar negri?), penambahan nilai praktisi TI Indonesia di mata pengguna TI lokal maupun Internasional, peningkatan kemampuan komunikasi kita, serta banyak hal lainnya lagi.

Marilah kita bersama-sama berkontribusi kepada proyek open source yang ada, dan siapa tahu suatu hari nanti Indonesia memiliki Github-nya sendiri. *A man can dream!*s

comments powered by Disqus

Daftar Isi