- 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
Yorumlar da bayağı ilginç görünüyor,,
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ı
*yorum anlamına gelir, örnek kodda görülebilir)8–11. sütunlar: özel
divisioniş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
cobciçin-freeseç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
CGIRPCarayüzüne gönderiyor, sonuç da tarayıcıda web sayfası olarak görünüyorduHâ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
d9a5e3eiç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 olabilirYani 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ümMetot 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 ettimCALLbir alt program çağrısı ama"socket"ın nerede tanımlandığını bilmiyorumDaha ö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ı olabilirCOBOL'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ş
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