1994年に動的なウェブサイトを作るということは、C言語のプログラムを書き、それをcgi-binディレクトリに置き、リクエストごとにApacheにforkさせることを意味していました。それから32年後、著者はほぼ同じ技術を使って商用のウェブ製品marketyour.gamesを公開しました。この製品には、ユーザーアカウント、コンテンツクリエイター向けの検索ダッシュボード、それらを整理するためのフォルダ、Stripeによる決済、Postmarkによるトランザクションメールが含まれています。プログレッシブエンハンスメントに従っており、JavaScriptは不要です。
スタックはBCHSと呼ばれ、OpenBSD、C、httpd、SQLiteで構成されています。フレームワーク、テンプレート言語、独立したデータベースサーバーはありません。C言語のプログラムはCGI環境変数を読み取り、HTMLを直接出力します。バイナリは静的リンクされ、1つのファイルを置き換えるだけでデプロイできるため、サーバーを再起動したりダウンタイムを発生させたりすることなく、新しいリクエストが新バージョンを使用します。OpenBSDのpledgeとunveilがプログラムの保護に役立ち、httpdはchroot環境から配信します。依存関係は、外向きリクエスト用のlibcurl、識別子・パスワードハッシュ・Stripe webhookの検証用のlibsodium、JSON解析用のlibcjsonに限られています。クリーンビルドは数秒で完了します。
著者はフレームワークよりもCGIの基礎的な仕組みを重視しています。2004年に公開された1.1仕様は変更されておらず、CGIを理解するにはHTTPを理解すれば十分です。CGIは言語やプラットフォームに依存せず、関心の分離を明確に保ちます。単一のウェブサーバーが、別のアプリケーションサーバーへリバースプロキシするのではなく、ビジネスロジックを直接呼び出します。アプリケーションは、シェルから実行でき、gdbでデバッグできる通常のプログラムです。
このアプローチはサプライチェーンのリスクも最小限に抑えます。近年のパッケージリポジトリへの攻撃を考えると、これは大きな利点です。依存関係が極めて少ないため、改ざんされたパッケージにさらされる危険性が低くなります。著者は、CGIの衰退は2004年当時には妥当だったものの、2026年の現在では成り立たず、モダンなウェブアプリケーションは実際にC言語で書けると主張しています。
出典: Hacker News · 要約:HeadlinesBriefing