Blog
C ile Modern Web Uygulaması Yazmak: 2026’da CGI’nin Dönüşü
1994’te CGI ile yazılan web uygulamaları, 2026’da hâlâ geçerli mi? Corey Prophitt, C ve CGI ile tamamen modern bir ticari ürün geliştirdi. İşte detaylar.
Hızlı Erişim Menüsü
CGI Neden Öldü (ve Neden Hâlâ Yaşıyor)?
1994’te dinamik bir web sitesi istiyorsanız C programı yazardınız, cgi-bin klasörüne bırakırdınız ve Apache’in her istek için fork yapmasına izin verirdiniz. 32 yıl sonra Corey Prophitt, aynı temel teknolojiyle ticari bir web ürünü piyasaya sürdü: marketyour.games.
Ürün tamamen modern: kullanıcı hesapları, içerik üreticileri için arama paneli, klasörleme, Stripe ile ödeme, Postmark ile e-posta. Progressive enhancement ile JavaScript bile gerekmiyor. Tek eski olan şey: nasıl yapıldığı ve nasıl servis edildiği.
Stack: BCHS (OpenBSD, C, httpd, SQLite)
- Framework yok. CGI ortam değişkenlerini okuyan ve cevap veren bir C programı yazıyorsunuz.
- Template motoru yok. HTML’i doğrudan C’den basıyorsunuz.
- Ayrı veritabanı sunucusu yok. SQLite C API’si ile dosyaya erişiyorsunuz.
- Konteyner yok. Statik linklenmiş tek binary, bir klasöre bırakılıyor.
Her istek yeni bir process başlatıyor. Yeni sürüm deploy etmek = tek dosyayı değiştirmek. Sunucu restart yok, downtime yok. Yeni istekler otomatik olarak yeni binary’yi kullanıyor.
Neden C ve CGI?
Temeller Framework’lerin Önüne Geçiyor
CGI 1.1 spesifikasyonu 2004’te yayınlandı ve o değişmedi. Öğrenilecek bir API yok. Tüm arayüz birkaç temel HTTP kavramı: request header’ları, HTTP method’ları, query string, body verisi. HTTP’i anlıyorsanız CGI’yi de anlıyorsunuz.
Tek Web Sunucusu, Tek İş Mantığı
Modern uygulamalarda nginx + uygulama sunucusu (Ruby, Python, Go, Rust) olur. CGI’de tek web sunucusu doğrudan business logic’inizi çağırır. Debug basit: programı shell’den çalıştırabilir, request’i pipe edebilir, gdb ile step atabilirsiniz. CGI, vendor’sız ve sürpriz faturasız serverless gibidir.
Minimal Supply Chain Riski
Otonom agent’lar ve haftalık paket repository saldırıları çağında, 3 bağımlılık (libcurl, libsodium, libcjson) ve SQLite ile çalışmak rahatlatıcı. libcjson tek C dosyası, SQLite amalgamation olarak gelir. Build birkaç saniye sürer, rebuild yarım saniyeden kısa.
Güvenlik: OpenBSD’nin Varsayılanları
OpenBSD pledge ve unveil ile C programını gerçekten güvenli hale getirmek için araçlar sunar. httpd varsayılan olarak chroot’tan servis eder, CGI binary kendi köşesinde sandbox’ta çalışır.
Static Asset’ler Nasıl Servis Ediliyor?
Geleneksel yöntem yerine, httpd’den tüm trafik CGI binary’ye yönlendirilir. Her asset executable’a compile edilir ve memory’den servis edilir.
Sonuç
CGI’nin 2004’te gerilemesi haklıydı ama 2026’da artık geçerli değil. Tek binary, tek SQLite dosyası, üç bağımlılık — ve her şey kafanızda tutabileceğiniz bir boyutta. Framework’lerin öğrenme maliyetini ve supply chain riskini düşününce, “eski” teknolojinin bazen en temiz çözüm olduğu ortaya çıkıyor.
Kaynak: A Modern Web App in C — Corey Prophitt (Hacker News, 350+ puan)