Menelusuri perjalanan wget dari awal mula sebagai Geturl yang ditulis Hrvoje Niksic pada 1996 hingga menjadi standar de-facto downloader non-interaktif selama lebih dari 25 tahun, serta memahami masalah nyata yang dipecahkannya di dunia DevOps.

Setelah di episode 0 kita menyiapkan environment — memastikan GNU Wget 1.25.x terinstall dan terverifikasi — pada episode ini kita akan menarik napas sejenak dari hands-on dan memahami mengapa wget ada. Sejarah dan latar belakang sebuah tool mungkin terasa tidak penting, padahal justru di sanalah letak alasan mengapa desainnya seperti sekarang.
Mengapa harus memahami sejarah wget? Karena wget bukan proyek yang lahir dari ruang rapat perusahaan, melainkan dari sebuah kebutuhan nyata yang sangat sederhana di tahun 1996. Memahami asal-usulnya akan menjelaskan banyak keputusan desain — mengapa wget dirancang non-interaktif, mengapa ia unggul di recursive download dan mirroring, dan mengapa hingga hari ini ia masih menjadi pilihan pertama jutaan sysadmin dan engineer DevOps.
Cerita wget dimulai di tangan seorang pengembang bernama Hrvoje Niksic. Pada tahun 1996, saat belajar di Zagreb, Hrvoje membutuhkan cara untuk men-download file dari web secara otomatis — tanpa harus membuka browser satu per satu. Saat itu, tidak ada tool yang praktis untuk tugas sederhana tersebut. Maka, seperti kebiasaan engineer yang baik, ia menulis tool kecilnya sendiri dan menamainya Geturl — persis seperti namanya: tool untuk get (mengambil) lewat URL.
Geturl tumbuh dengan cepat. Nama wget — singkatan dari World Wide Web + get — diadopsi tak lama kemudian, dan pada tahun 1998 wget resmi menjadi bagian dari proyek GNU. Sejak saat itu namanya lengkap: GNU Wget. Dua keputusan di awal inilah yang menjadi fondasi desain wget: bisa dijalankan tanpa interaksi dan bisa mengambil banyak file secara berulang.
Note
Jangan tertukar: Geturl (1996) adalah nama awal tool tersebut, dan wget adalah nama yang dipakai sampai hari ini. Berbeda dengan curl yang lahir dari proyek sampingan IRC client, wget lahir dari kebutuhan download web murni — itulah kenapa kekuatan utamanya ada di recursive download dan mirroring, bukan di request API.
Hal yang membingungkan banyak orang: saat ini ada dua program wget yang beredar — wget klasik dan Wget2. Keduanya berbagi nama, tapi ditulis ulang dengan cara yang berbeda.
Wget 1.x adalah garis keturunan yang sudah berumur lebih dari 25 tahun dan menjadi default di hampir semua distro Linux. Ia dikelola dengan fokus pada stabilitas dan kompatibilitas — script wget yang kalian tulis hari ini akan tetap berjalan di versi tahun depan. Versi terkininya adalah 1.25.x, dan inilah yang menjadi basis seluruh series ini.
Wget2 adalah penulisan ulang total yang sedang dikembangkan aktif. Inti mesinnya dipisahkan ke dalam sebuah library bernama libwget — mirip dengan hubungan curl dan libcurl. Wget2 membawa dukungan protokol modern seperti HTTP/2, kecepatan jauh lebih tinggi karena koneksi paralel, dan pemrosesan yang lebih hemat sumber daya. Sayangnya, kematangannya belum menyamai wget 1.x, sehingga kebanyakan sistem masih mengandalkan wget klasik.
wget --versionKalau wget2 --version belum terinstall, jangan khawatir — series ini memakai wget 1.25.x, dan kalian bisa memastikannya dengan wget --version. Setelah kalian menguasai wget 1.x, pindah ke Wget2 terasa natural karena opsi-opsinya dirancang sedekat mungkin.
Inti masalah yang dipecahkan wget sangat sederhana untuk diucapkan, tetapi sulit dikerjakan dengan baik: men-download banyak file dari web secara otomatis, tanpa interaksi manusia, dan tetap andal.
| Skenario | Mengapa Wget |
|---|---|
| Recursive download | Mengambil satu halaman beserta seluruh link dan aset di dalamnya dengan satu perintah |
| Mirroring website | Menyalin seluruh situs ke disk lokal atau server lain untuk backup |
| Timestamping | Hanya men-download file yang berubah sejak download terakhir — hemat bandwidth |
| Batch download | Men-download puluhan URL sekaligus dari sebuah daftar file |
| Scripting & otomasi | Non-interaktif, punya exit code, berjalan sempurna di cron, CI/CD, dan server tanpa GUI |
Bayangkan wget sebagai kurir yang bekerja tanpa lelah: dia tidak butuh dimandikan, tidak butuh disuruh ulang, tidak butuh layar, dan bisa bekerja di tengah malam lewat cron. Di sinilah wget unggul — sesuatu yang tidak bisa dilakukan browser GUI, karena browser butuh sesi interaktif dan manusia.
Semua skenario di atas berbagi satu persyaratan yang sama: harus berjalan tanpa kehadiran manusia. Download yang terjadwal, backup malam hari, sinkronisasi aset di pipeline — semuanya berjalan ketika tidak ada yang menatap layar. Di sinilah wget membuktikan nilainya.
#!/usr/bin/env bash
wget -c -i urls.txt -P /backup/docs || exit 1
echo "Backup selesai"Script di atas — yang nanti kalian pahami penuh di episode 4 dan 5 — sudah cukup untuk dijadwalkan lewat cron. Tanpa wget, tugas semacam ini harus dilakukan manual: membuka browser, mengunduh, memindahkan file, lalu mengulang lagi. Dengan wget, satu baris perintah menggantikan puluhan klik yang rentan salah dan tidak mungkin dijalankan otomatis.
Note
Perhatikan pola || exit 1 pada script di atas. Itu adalah cara membaca exit code wget: jika wget gagal (keluar dengan kode selain 0), script langsung berhenti dengan status gagal. Bahasa exit code inilah yang akan kita bedah tuntas di episode 2 — karena itu kunci agar wget bisa dipakai sebagai komponen script yang andal.
Pertanyaan paling sering diajukan setelah orang mengenal kedua tool ini: "bukankah curl sudah bisa men-download? Kenapa masih ada wget?" Jawabannya: keduanya punya kekuatan berbeda.
| Aspek | Wget | Curl |
|---|---|---|
| Kekuatan utama | Recursive download & mirroring | Fleksibilitas request API |
| Output default | Menulis file ke disk | Menampilkan body ke layar |
| Recursive crawling | Built-in (-r, -m) | Tidak ada |
| Resume & retry | -c, --tries, --continue | Ada, tapi lebih manual |
| Request custom (method, JSON, header) | Terbatas | Sangat lengkap |
| Protokol | HTTP, HTTPS, FTP | Puluhan protokol |
Analogi sederhananya: curl adalah penyiar serbaguna yang bisa mengirim pesan apa pun ke server — cocok untuk testing API dan request presisi. wget adalah truk ekspedisi yang dirancang untuk mengangkut banyak barang — cocok untuk download massal, mirroring, dan otomasi. Di dunia kerja, kalian akan memakai keduanya; di series ini kita fokus ke truk ekspedisinya.
Tip
Aturan praktis yang banyak dipakai tim DevOps: gunakan curl saat kalian berbicara dengan API (mengirim method, header, body JSON), dan gunakan wget saat kalian men-download atau memirror (file besar, banyak file, download terjadwal). Keduanya bisa dipanggil dari script yang sama tanpa konflik.
| Tahun | Tonggak |
|---|---|
| 1996 | Hrvoje Niksic menulis Geturl untuk kebutuhan download web |
| 1998 | Wget resmi menjadi bagian dari proyek GNU |
| 2000-an | Wget 1.x menjadi default downloader di mayoritas distro Linux |
| 2025 | Rilis 1.25.0; Wget2 terus dikembangkan sebagai penerus modern |
| 2026 | Wget 1.25.x stabil, dipakai di jutaan server dan pipeline otomasi |
Pada episode 1 ini, kalian telah menelusuri perjalanan wget dari sebuah kebutuhan sederhana pada 1996 — Geturl — hingga menjadi standar de-facto downloader non-interaktif yang berusia lebih dari 25 tahun. Kalian juga memahami dua garis keturunan wget (1.x yang stabil dan Wget2 yang modern), masalah nyata yang dipecahkannya, serta perbedaan fundamental dengan curl.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya, kita akan membedah konsep dasar dan arsitektur utama wget — model non-interaktif yang menjadi jiwanya, alur lengkap dari URL hingga file tersimpan di disk, peran file konfigurasi wgetrc, bahasa exit code, serta cara mengendalikan log dan output. Sampai jumpa di episode 2!