- Server web statis minimal yang ditulis dengan COBOL, menunjukkan bahwa pemrograman sistem modern dapat dilakukan dengan GnuCOBOL
- Menyediakan fitur seperti menyajikan file statis dari direktori saat ini, deteksi otomatis tipe MIME, penanganan kode status HTTP (200/403/404/413), pemblokiran serangan path traversal, dan output log permintaan
- Berbasis single-thread, sehingga hanya dapat menangani satu permintaan pada satu waktu, dengan dukungan ukuran file maksimum 64KB
- Berjalan di lingkungan kompatibel POSIX (Linux/macOS/BSD) yang telah terpasang GnuCOBOL, dan dapat dijalankan di port 8080 dengan mengompilasi menggunakan
make lalu menjalankan perintah ./webserver
- Sebagai contoh program jaringan yang ditulis dalam COBOL, proyek ini membuktikan bahwa server web modern juga dapat diimplementasikan dengan bahasa legacy
Gambaran proyek
- Webbol adalah server web statis minimal yang dikembangkan menggunakan bahasa COBOL dan kompiler GnuCOBOL
- Tujuannya adalah menyediakan penyajian file statis sederhana dan membuktikan kegunaan COBOL dalam konteks modern
Fitur utama
- Menyajikan file statis dari direktori saat ini
- Deteksi otomatis tipe MIME untuk format file umum
- Mendukung kode status HTTP 200 (OK), 403 (Forbidden), 404 (Not Found), dan 413 (Payload Too Large)
- Mencegah serangan path traversal (
../ dan sejenisnya)
- Pencatatan log permintaan yang rapi termasuk seluruh header HTTP
- Menyajikan index.html secara default saat ada permintaan ke root path
Persyaratan sistem
- Memerlukan kompiler GnuCOBOL (cobc)
- Memerlukan sistem operasi yang kompatibel POSIX (Linux, macOS, BSD)
- Memerlukan alat
make
Contoh cara kerja dan akses
Struktur dan susunan file
- Makefile: pengaturan build
- README.md: file panduan penjelasan
- config.cpy, socket-defs.cpy, http-structs.cpy, file-structs.cpy: definisi struktur server, socket, HTTP, dan pemrosesan file
- path-utils.cbl: validasi dan pembersihan path
- mime-types.cbl: logika penentuan tipe MIME
- file-ops.cbl: operasi pembacaan file
- http-handler.cbl: pemrosesan permintaan/respons HTTP
- webserver.cbl: program server utama
Tipe MIME yang didukung
- HTML: text/html
- CSS: text/css
- JavaScript: application/javascript
- JSON, XML, Plain text, PNG, JPEG, GIF, SVG, ICO, PDF, dan lain-lain
- Tipe MIME tambahan dapat didaftarkan di file mime-types.cbl
Fitur keamanan
- Pencegahan path traversal: memblokir permintaan yang mengandung urutan
..
- Pembatasan akses direktori: hanya menyajikan file di direktori saat ini dan subdirektorinya
- Penanganan file yang aman: memvalidasi dan memeriksa path sebelum mengakses sistem file
Keterbatasan
- Berbasis single-thread: hanya dapat menangani satu permintaan pada satu waktu
- Tidak mendukung SSL/TLS (HTTPS)
- Ukuran file maksimum: 64KB
- Hanya mendukung konfigurasi file sequential line (file teks)
- Tidak mendukung cache, kompresi, range request, dan sejenisnya
2 komentar
Komentarnya juga terlihat sangat unik,,
Komentar Hacker News
Senang melihat mode format tetap COBOL benar-benar masih digunakan
COBOL memiliki dua mode: free format dan fixed format mode
Format tetap membagi berdasarkan kolom tertentu sebagai warisan dari era kartu punch
Kolom 1–6: nomor baris
Kolom 7: karakter indikator (misalnya
*untuk komentar, bisa dilihat di contoh kode)Kolom 8–11: penanda division khusus, kadang memakan lebih dari itu (contoh file)
Kolom 12–72: pernyataan COBOL yang sebenarnya
Kolom 73–80: bebas dipakai untuk hal seperti catatan programmer
Struktur ini jadi beban bagi developer dan tool modern, jadi mode format bebas lebih direkomendasikan
Tapi mode format tetap punya pesonanya sendiri, jadi kalau mau memakai COBOL di 2025, saya justru menyarankan menikmati nuansa lawasnya
Kolom 73–80 juga kadang dipakai untuk nomor urut agar kartu bisa disusun kembali dengan mesin sortir kalau tercecer
Kalau ingin merasakan seperti apa kartu COBOL, Anda bisa memilih kartu COBOL di tautan ini
Kalau ingin nuansa yang lebih lawas lagi, Anda bisa menulis program dulu di coding form lalu meminta asisten melakukan keypunch berdasarkan itu (contoh)
Fortran lama juga memakai struktur kolom tetap, hanya tata letak kolomnya yang berbeda
Kesamaannya adalah kolom 73–80 dibiarkan kosong untuk nomor urut penyortiran kartu dan sejenisnya
Saya sendiri belum pernah memakai kartu sungguhan, tapi karena kartu mudah jatuh atau tertukar urutannya, saya rasa nomor urut dan mesin sortir pasti sangat berguna
Bagian ini juga mengesankan bagi saya
Tapi saya merasa lucu karena di Makefile justru dipakai opsi
-freemilik cobcOrang sering berkata “gunakan alat terbaik untuk pekerjaan itu”, tapi tetap saja tidak memilih COBOL untuk COmmon Business Oriented probLems
Ini juga berlaku persis untuk MUMPS
Orang sering mengabaikan bahwa mereka sebenarnya bisa membuat pilihan yang hebat
Bukan sekadar tidak memilih COBOL, tapi bahkan tidak pernah benar-benar mempertimbangkannya
Saya penasaran kapan dan kenapa orang memakai ungkapan "alat terbaik untuk pekerjaan itu"
Perusahaan kami sudah berumur lebih dari 40–50 tahun
Sampai sekarang, 90% operasi bisnis masih berbasis COBOL
Staf operasional masih bekerja lewat layar biru yang dibuat dengan RM/COBOL dan RM/PANELS
Sampai tahun 2010-an pun kami masih menghasilkan HTML dengan COBOL, hanya saja tidak menerima request HTTP secara langsung
Sebagai gantinya, kami menaruh lapisan RPC di belakang Apache, yang mengubah request HTTP menjadi CGI lalu meneruskannya ke COBOL
Program COBOL mengirim string HTML ke antarmuka CGIRPC, dan hasilnya muncul sebagai halaman web di browser
Ini masih dipakai lewat layanan XML dan semacamnya untuk mendukung web app lama
Sejujurnya, proyek ini terasa jauh lebih keren daripada itu
Menarik melihat hampir setiap baris kode diberi komentar
Ini membuat saya berpikir ulang tentang anggapan bahwa "kode seharusnya menjadi dokumentasinya sendiri"
Anggapan itu berasumsi bahwa pembaca kode memang memahami bahasanya, dan bahwa dalam beberapa kasus kode memang bisa benar-benar "self-documenting"
Mungkin orang yang terbiasa dengan COBOL akan berkata COBOL juga bisa cukup self-documenting, tapi saya sendiri tidak yakin
Di commit git
d9a5e3e, ada keterangan "menambahkan komentar agar orang yang penasaran bisa memahami apa yang dilakukan setiap baris"Menurut saya, pernyataan "kode dibaca oleh orang yang tahu bahasanya" bergantung pada konteks
Kalau menulis kode sambil belajar sendiri atau untuk membantu orang lain belajar, menambahkan komentar di setiap baris tentang apa yang dilakukan memang terasa wajar
Sebaliknya, di lingkungan profesional, dengan asumsi tim cukup paham bahasanya, sering kali lebih baik mengelolanya secara struktural tanpa banyak komentar
Di bank, saya pernah mendengar orang bersikeras bahwa kode COBOL itu seperti bahasa alami dan karena itu self-documenting, dan saya nyaris tertawa waktu mendengarnya
Ini terdengar seperti bercanda, tapi saya benar-benar jadi penasaran dan ingin bertanya
Adakah yang paham soal jaminan terkait keamanan di COBOL?
Misalnya, apakah COBOL mengizinkan akses memori di luar batas, dan seperti apa risiko munculnya celah keamanan karena "kesalahan" seperti di C atau Rust?
Untuk akses memori di luar batas di COBOL, compiler modern biasanya akan mengeluarkan error, dan kalau sampai terkompilasi atau berjalan, hasilnya cenderung runtime error atau langsung crash
Namun, lewat fitur reference modification di COBOL, tetap ada kemungkinan untuk sengaja mereferensikan memori di luar batas data
Jadi tidak sepenuhnya aman, hanya saja banyak kesalahan dan penyalahgunaan tertangkap di tahap kompilasi, sehingga frekuensi kesalahan tak sengaja cukup menurun
Saat melihat http handler, saya juga bertanya-tanya hal yang sama
Kalau tidak ada spasi antara method dan path, rasanya mungkin saja terjadi buffer overrun
Saya belum mencobanya sendiri, tapi hal seperti itu sempat terpikir
Saya jadi ingin tahu lebih jauh apa yang dilakukan
CALL "socket"CALL adalah pemanggilan subprogram, tapi saya tidak tahu di mana
"socket"didefinisikanDulu saya juga pernah berpikir untuk membuat web server COBOL, tapi di FAQ GnuCOBOL saya hanya melihat bahwa itu bisa dilakukan lewat CGI, lalu tidak melanjutkannya (lihat FAQ)
Saya ingin melihat proyek ini lebih dalam
Rasanya benar-benar menarik
"socket"mungkin adalah pemanggilan system callPernah ada masa ketika COBOL dipakai sebagai backend untuk sebagian situs web pemerintah dan perusahaan
Situs-situs pada masa itu mudah dikenali dari bentuk khas HTML-nya yang dicetak dalam format lebar tetap 100 kolom
Saya tadinya berpikir saya bisa memrogram dalam bahasa apa pun, tapi setelah melihat proyek COBOL ini, Assembly malah terasa rapi dan elegan sebagai perbandingan
Jms Dnns! Proyek ini benar-benar karya hebat yang membuka cara berpikir
Dari pengalaman menangani tumpukan kode sumber setinggi puluhan sentimeter dalam kedua bahasa itu, COBOL jauh lebih mudah ditata di kepala saya
Mungkin ini berbeda untuk tiap orang
Proyek yang sangat keren
Kalau ada tips untuk mulai belajar COBOL, saya ingin mendengarnya
Ini berarti kita selangkah lebih dekat ke visi COBOL on Cogs
Lihat lebih lanjut di coboloncogs.org