要約

  • Kermitは1981年、学生や職員が大型機と普及し始めたマイクロコンピューターの間でファイルをやり取りする必要からColumbiaで生まれた。
  • 小さな確認応答付きパケットをシリアル回線に流し、文字、レコード、端末動作や交渉する機能の違いを両端で扱った。

Kermitの最初の転送実演では、同じDECSYSTEM-20の二つのシリアルポートをヌルモデムケーブルで結び、二つのKermit-20プログラムがファイルを交換した。Kermit Projectは後にこれを概念実証と説明した。同じコンピューターの中でコピーする方が簡単だからだ。数週間後、異なる機種間での転送が試された。一方はTOPS-20を動かすDEC-20、もう一方はCP/M-80を動かすIntertec Superbrain。プロセッサー、OS、ファイルの扱いが違う。課題は単にバイトを線に流すことではなかった。

Columbiaでは計算機を使う人々の環境が変わりつつあった。研究室や学部、家庭、学生寮にマイクロコンピューターが入り、必要なファイルやサービスは中央のタイムシェアリングシステムに残っていた。Frank da CruzとBill Catchingsが1983年にまとめた論文は、学生のアカウントが授業や学期ごとに割り当てられ、ディスク保存が長期には保証されなかったと記す。フロッピーディスクを備えた小型機は課題を手元に残せるが、そのためには主機と小型機の間で確実にファイルを移す手段が必要だった。これは一大学の設計課題を示す記録で、全大学に共通した状況を測ったものではない。

一般的な非同期シリアル回線は、ノイズや文字欠落、バッファーあふれ、搬送波の瞬断を防いでくれなかった。Kermitは転送をパケットに分け、それぞれをやり取りの一部として扱った。送信側はまずSend-Initパケットでパラメーターを示し、受信側も自分の条件を返す。ファイルヘッダーが名前を伝え、データパケットが内容を運ぶ。別のパケットがファイル終了と転送終了を示す。確認を受けて次へ進み、否定応答やタイムアウトがあれば同じパケットを送り直した。

基本動作は意図的に小さく保たれた。パケット番号は64を法として進み、両端はどの単位が確認されたかを把握し、会話の中で欠落や重複を検出できた。必須の一文字算術チェックは、壊れたパケットを見つける助けになる。現代の暗号学的チェックではなく、端末の向こう側にいる人を識別する仕組みでもない。一部の伝送エラーを見つけ、再送するための手掛かりだった。信頼性は線路ではなく送受信プログラムの協力から生まれた。

互換性の難題は回線より上にもあった。ASCII文字を交換できても、ファイルの意味が一致するとは限らない。DEC-20とCP/Mでは実行環境が異なり、IBMの大型機には別の制約があった。ファイルは単なるバイト列でなくレコードとして保存されることがあり、文字コードも違う。さらに端末は入力をエコーしたり行を折り返したり、大小文字を変換したり制御文字を処理したりする。回線を何も変更しない管として扱えば、受信側のディスクに書き込む前に内容が変わるおそれがあった。

Kermitは転送用の共通表現を定め、両端に明示的な変換を置いた。基本パケットは印字可能文字を使い、データ中の制御文字も印字できる列に変換できた。各プログラムがそれを自分のファイル形式へ戻す。プロトコルマニュアルが共有前提として挙げたのは、通常の非同期シリアル回線上のASCIIという狭い条件だった。コンピューター同士を同じにしたのではない。保存、文字コード、端末動作の差を越えて交換する限られた言語を作った。

実装が同じ機能を持っているとも限らなかった。1983年11月のマニュアルは、開発が分散していて組織的に一元管理されていないため、固定バージョンを全実装者に課せないと記している。基本機能と任意機能を分け、最初のパラメーター交換で能力を伝える。単純な実装も高度な実装と通信できることが設計目標だった。これは意図を表した説明であり、すべての組み合わせが相互運用できた証明ではない。

小さな核で開発は止まらなかった。後の版では長いパケット、より強いチェック、全二重のスライディングウィンドウが加わった。マニュアルは1985~86年のウィンドウ機能をThe Source Telecomputingのグループに帰している。確認応答を毎回待つ方式が遅延のある経路で時間を浪費する問題への対応だった。この機能は交渉され、対応しない受信側は基本方式を維持できた。後年の拡張を1981年の最初の転送に遡って当てはめてはならない。

プロジェクトの年表には、1984年にKermitのFTPサイトとARPANET上のInfo-Kermitメーリングリストが始まったとある。ネットワークはソフトウェアの配布や議論を助けたが、出発点の要求は身近なものだった。あるコンピューターから別の機種へファイルを運びたい。Kermitはインターネット標準ではなく、ネットワークプロトコルを置き換えもしなかった。シリアル回線で接続した異種システム間の転送を担い、後にはネットワーク接続も使えるようになった。

この歴史から分かるのは、接続と相互運用性が同じではないということだ。搬送波は端末同士を結んでもファイル形式を合わせない。パケットチェックは一部の損傷を見つけても送信者を認証しない。共通仕様は交換を可能にしても、全実装が全オプションを採用するとは限らない。Kermitはその継ぎ目を、実装可能な対話の形にした。

出典