1 puan yazan GN⁺ 2025-10-05 | 2 yorum | WhatsApp'ta paylaş
  • COBOL ile yazılmış minimal bir statik web sunucusu olup, GnuCOBOL kullanarak modern sistem programlamasının mümkün olduğunu gösteriyor
  • Geçerli dizindeki statik dosyaları sunma, MIME türünü otomatik algılama, HTTP durum kodlarını işleme (200/403/404/413), yol gezintisi saldırılarını engelleme, istek günlüğü yazdırma gibi özellikler sunuyor
  • Tek iş parçacıklı yapıda olduğundan aynı anda yalnızca bir isteği işleyebiliyor ve en fazla 64KB dosya boyutunu destekliyor
  • GnuCOBOL kurulu POSIX uyumlu ortamlarda (Linux/macOS/BSD) çalışıyor; make ile derlendikten sonra ./webserver komutuyla 8080 portunda çalıştırılabiliyor
  • COBOL diliyle yazılmış bir ağ programı örneği olarak, eski bir dille de modern bir web sunucusu gerçekleştirilebileceğini kanıtlayan bir proje

Proje özeti

  • Webbol, COBOL dili ve GnuCOBOL derleyicisi kullanılarak geliştirilmiş minimal bir statik web sunucusudur
  • Amaç, basit statik dosya sunumu sağlamak ve COBOL'un modern kullanımını kanıtlamaktır

Başlıca özellikler

  • Geçerli dizindeki statik dosyaları sunma
  • Yaygın dosya biçimleri için otomatik MIME türü algılama
  • HTTP durum kodları 200 (OK), 403 (Forbidden), 404 (Not Found), 413 (Payload Too Large) desteği
  • Dizin geçişi saldırılarını (../ vb.) önleme
  • Tüm HTTP başlıklarını içeren düzenli istek günlüğü kaydı
  • Kök yol istendiğinde varsayılan olarak index.html sunma

Sistem gereksinimleri

  • GnuCOBOL (cobc) derleyicisi gerekli
  • POSIX uyumlu bir işletim sistemi gerekli (Linux, macOS, BSD)
  • make aracı gerekli

Çalışma örneği ve erişim yöntemi

Yapı ve dosya bileşimi

  • Makefile: derleme yapılandırması
  • README.md: açıklama ve rehber dosyası
  • config.cpy, socket-defs.cpy, http-structs.cpy, file-structs.cpy: sunucu, soket, HTTP ve dosya işleme yapılarının tanımları
  • path-utils.cbl: yol doğrulama ve temizleme
  • mime-types.cbl: MIME türü belirleme mantığı
  • file-ops.cbl: dosya okuma işlemleri
  • http-handler.cbl: HTTP istek/yanıt işleme
  • webserver.cbl: ana sunucu programı

Desteklenen MIME türleri

  • HTML: text/html
  • CSS: text/css
  • JavaScript: application/javascript
  • JSON, XML, düz metin, PNG, JPEG, GIF, SVG, ICO, PDF vb.
  • Ek MIME türleri mime-types.cbl dosyasından eklenebilir

Güvenlik özellikleri

  • Dizin geçişini önleme: .. dizisi içeren istekleri engeller
  • Dizin erişim kısıtlaması: yalnızca geçerli dizin ve alt dizinlerindeki dosyaları sunar
  • Güvenli dosya işleme: dosya sistemine erişmeden önce yol doğrulama ve geçerlilik denetimi

Sınırlamalar

  • Tek iş parçacıklı temel: aynı anda yalnızca bir isteği işleyebilir
  • SSL/TLS (HTTPS) desteği yok
  • Azami dosya boyutu: 64KB
  • Yalnızca satır sıralı dosya yapısı (metin dosyaları) desteklenir
  • Önbellek, sıkıştırma, aralık istekleri vb. desteklenmez

2 yorum

 
yangeok 2025-10-05

Yorumlar da bayağı ilginç görünüyor,,

 
GN⁺ 2025-10-05
Hacker News yorumları
  • COBOL'un sabit biçim modunun gerçekten kullanıldığını görmek hoşuma gitti
    COBOL'da iki mod var: serbest biçim (free mode) ve sabit biçim (fixed format mode)
    Sabit biçim, delikli kart döneminin mirası olarak belirli sütunlara göre ayrılır

    • 1–6. sütunlar: satır numarası

      1. sütun: gösterge karakteri (ör. * yorum anlamına gelir, örnek kodda görülebilir)
    • 8–11. sütunlar: özel division işaretleyicisi, bazen daha fazla alan kaplar (örnek dosya)

    • 12–72. sütunlar: asıl COBOL ifadeleri

    • 73–80. sütunlar: programcı notları vb. için serbest kullanım
      Bu yapı günümüz geliştiricileri ve araçları için yük oluşturduğundan serbest biçim modu tavsiye ediliyor
      Ama sabit biçim modunun kendine özgü bir cazibesi de var; 2025'te COBOL kullanacaksanız tam eski usul hissin tadını çıkarmanızı öneririm

    • 73–80. sütunlar, kartlar dağıldığında sıralama makinesiyle yeniden dizilebilsin diye sıra numarası yazmak için de kullanılırdı
      COBOL kartlarının havasını hissetmek isterseniz bu bağlantıda COBOL kartlarını seçebilirsiniz
      Daha da eski usul bir deneyim isterseniz önce programı bir kodlama formuna yazıp sonra bir asistanın bunu delikli karta işlemesi gibi de yapabilirsiniz (örnek)

    • Eski Fortran da sabit sütun yapısı kullanıyordu, sadece sütun düzeni farklıydı
      Ortak nokta, 73–80. sütunların kart sıralama için sıra numarası vb. amacıyla boş bırakılmasıydı
      Ben gerçek kart hiç kullanmadım ama kartları düşürmek ya da sıralarını karıştırmak çok kolay olduğundan sıra numaraları ve sıralayıcıların inanılmaz faydalı olduğunu düşünüyorum

    • Bu kısım benim de dikkatimi çekti
      Ama Makefile'da cobc için -free seçeneğinin kullanılması da ilginçti

  • İnsanlar "iş için en iyi aracı kullan" diyor ama konu COmmon Business Oriented probLems olduğunda nedense COBOL'u seçmiyorlar

    • Aynısı MUMPS için de geçerli
      İnsanlar kendilerinin de harika bir seçim olabileceğini gözden kaçırıyor

    • Asıl mesele COBOL'u seçmemeleri değil, onu hiç değerlendirmemeleri

    • "İş için en iyi araç" sözünün ne zaman ve neden kullanıldığını merak ediyorum

  • Şirketimiz 40–50 yıldan daha eski
    Bugün bile iş operasyonlarımızın %90'ı COBOL tabanlı
    Saha çalışanları hâlâ RM/COBOL ve RM/PANELS ile yapılmış mavi ekranlarda çalışıyor
    2010'lara kadar COBOL ile HTML üretiyorduk ama HTTP isteklerini doğrudan almıyorduk
    Bunun yerine Apache arkasına bir RPC katmanı koyup HTTP isteklerini CGI'a çevirerek COBOL'a iletiyorduk
    COBOL programı HTML dizelerini CGIRPC arayüzüne gönderiyor, sonuç da tarayıcıda web sayfası olarak görünüyordu
    Hâlâ XML servisleri vb. yoluyla bunu mevcut web uygulamalarını desteklemek için kullanıyoruz
    Dürüst olmak gerekirse bu proje bundan çok daha havalı bir deneyim

  • Kodun neredeyse her satırında yorum olması ilginç geldi
    Bu, "kod kendi kendini belgelendirmeli" sözünün varsayımlarını yeniden düşündürüyor
    Bunun altında, kodu okuyan kişinin dili bildiği ve bazı durumlarda kodun gerçekten "self-documenting" olabildiği varsayımı yatıyor
    Muhtemelen COBOL'a alışkın olanlar COBOL'un da gayet self-documenting olabileceğini söyler ama ben emin değilim

    • Git commit d9a5e3e içinde, "merak edenlerin her satırın ne yaptığını anlayabilmesi için yorumlar eklendi" ifadesi görülebiliyor

    • "Kodu dili bilen biri okur" sözü bence bağlama göre değişir
      Kendi başına ya da başkaları için öğrenirken yazılan kodda her satırın ne yaptığını açıklayan yorumlar eklemek doğal geliyor
      Buna karşılık profesyonel ortamda ekibin dili iyi bildiği varsayımıyla, genelde yorum yerine yapısal olarak düzenli kod tutmak daha iyi bir tercih olabilir

    • Bankalarda COBOL kodunun zaten doğal dil gibi olduğu için self-documenting olduğunu iddia eden insanlara rastladım; bunu duyunca neredeyse gülecektim

  • Bu galiba şaka ama gerçekten merak ettim ve soru bırakıyorum
    COBOL'daki güvenlik garantileri konusunda bilgili biri var mı?
    Mesela COBOL bellek sınırlarının dışına erişime izin verir mi, C veya Rust'taki gibi bir "hata" yüzünden güvenlik açığı oluşma riski nasıldır öğrenmek isterim

    • COBOL'da bellek sınırı aşımı modern derleyicilerde hata verir; derlenir ya da çalışırsa da çalışma zamanı hatası ya da doğrudan çökme yaşanır
      Ancak COBOL'un reference modification özelliğiyle veri sınırlarının dışındaki belleğe kasıtlı olarak başvurmak mümkün olabilir
      Yani tamamen güvenli değil ama derleme aşamasında pek çok hata ve yanlış kullanım yakalandığı için kazara hata yapma olasılığı epey düşüyor

    • http handler'a bakarken ben de aynısını düşündüm
      Metot ile yol arasında boşluk eksikse buffer overrun olabilir gibi geldi
      Kendim çalıştırmadım ama aklıma gelen kaygı buydu

  • CALL "socket" tam olarak ne yapıyor, daha fazlasını merak ettim
    CALL bir alt program çağrısı ama "socket"ın nerede tanımlandığını bilmiyorum
    Daha önce ben de bir COBOL web sunucusu yapmayı düşünmüştüm ama GnuCOBOL FAQ'da yalnızca CGI ile mümkün olduğuna dair kısmı görüp ilerleyememiştim (FAQ bağlantısı)
    Bu projeye daha derin bakmak istiyorum
    Gerçekten çok ilgi çekici görünüyor

    • "socket" bir sistem çağrısı çağrısı olabilir
  • COBOL'un bazı devlet kurumları ve şirket web sitelerinin arka ucunda kullanıldığı bir dönem vardı
    O dönemin siteleri, HTML'nin 100 sütunluk sabit genişlikte bir biçimde üretilmesinden kolayca ayırt edilebiliyordu

  • Her dili programlayabileceğimi sanıyordum ama bu COBOL projesini görünce Assembly bile daha temiz ve zarif geliyor
    Jms Dnns! Bu proje gerçekten düşünce ufkunu genişleten harika bir iş

    • İlk işimde üretim sistemleri COBOL ile, finans sistemleri ise Assembler ile destekleniyordu
      Her iki dilde de onlarca santimetre yüksekliğinde kaynak kod yığınlarıyla çalışmış biri olarak, COBOL tarafını zihnimde düzenlemek çok daha kolaydı
      Bu kişiden kişiye değişebilir elbette
  • Gerçekten harika bir proje
    COBOL'a giriş için tavsiyesi olan varsa duymak isterim

  • Artık COBOL on Cogs vizyonuna bir adım daha yaklaşılmış oldu
    Daha fazlası için coboloncogs.org adresine bakabilirsiniz