1 poin oleh GN⁺ 2025-10-05 | 2 komentar | Bagikan ke WhatsApp
  • 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

 
yangeok 2025-10-05

Komentarnya juga terlihat sangat unik,,

 
GN⁺ 2025-10-05
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 -free milik cobc

  • Orang 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" didefinisikan
    Dulu 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 call
  • Pernah 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

    • Di pekerjaan pertama saya, saya mendukung sistem manufaktur dalam COBOL dan sistem keuangan dalam Assembler
      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