以下はにわか勉強なので、間違い・不足な点はご指摘いただけるとたすかります ]

・SpeedyCGIの動作原理

SpeedyCGIは、フロントエンド部とバックエンドエンジンに分かれています。
フロントエンドは、ApacheモジュールまたはCGIプログラム(/usr/local/bin/speedy)として呼ばれます。

フロントエンドはバックエンドエンジンがいなければ起動し、Perlプログラムをプロセス間通信で
バックエンドエンジンに渡します。

バックエンドエンジンはPerlプログラムを*実行前に*コンパイルし、できた中間コードをメモリ上に展開し、
それを実行します。

つまり、Perlをインタプリタで実行せず、コンパイル後のバイナリを実行するようになるため、
その分実行が高速になります(効果1)。

その後、デフォルトではバックエンドエンジン側の処理が終わっても、
コンパイル後のバイナリコードは開放されることなくバックエンドプロセスのメモリ上に残り、
次に同じプログラムのリクエストをフロントエンドから受けた場合、
cgiプログラムが更新されていなければ
(ここで本体cgiの時間をチェックし、更新されていれば自動的に再読み込み&再コンパイル)、
同じバイナリコードを、そのまま再利用します。

つまりデフォルトでは、2回目以降はバックエンドエンジンの再起動なし、
再コンパイルなしでそのままバイナリコードが動きます。
ということで、動作がとても高速になります(効果2)。

しかし、この場合Perl側でコードの再利用(主に変数関連)を考慮した、
行儀の良いコードを書く必要があるため、
場合によっては、Perlプログラム側を行儀の良い形に書き直す必要が出てきます。

で、bbs.cgiは残念ながらこれに該当したため、デフォルトの状態では動かなかった。

(続く)