要約

  • Danny CohenはIEN 137で、ビッグエンディアンとリトルエンディアンの双方が一貫した体系になり得ると示した。障害は、共有面で順序や単位が暗黙のままになるときに起きる。
  • 長く残った解決策は、一方の全面勝利ではなく境界管理である。形式ごとに公開表現を固定し、端点で変換し、その変換を検証できる原データと版を保つ。

正しい四バイトが誤った値になる

障害調査の画面に四つのバイトが並んでいる。送信側は先頭を最上位として読み、受信側は反対側から重みを付ける。転送中に一ビットも変わっていない。それでも、二つの実装は異なる長さや識別子を得る。どちらも自分の計算機の作法には忠実であるため、ログだけを見ても意味は確定しない。

Danny Cohenは1980年4月1日付のInternet Experiment Note 137で、この問題を「聖戦」から和平へ導く形で解剖した。Swiftの物語にある卵の割り方になぞらえ、Big-EndianとLittle-Endianという名を与えた機知が有名だ。しかし本文の効き目は、単一に見える「順序」を分解した点にある。ビット、バイト、ワード、メモリー配置、送信方向は、それぞれ別の決定である。

一台の計算機の中なら、決定は私的でよい。ネットワークは、設計思想も製造時期も違う装置を結ぶ。メモリー上の都合を符号化せずに外へ出せば、実装詳細が相手への無言の要求になる。オクテット列は届いても、送り手が持っていた値は届かない。

「何バイトずつ見るか」が隠れた仕様になる

IEN 137がいう一貫した順序では、ビット、バイト、ワードと境界をまたいでも進む向きが変わらない。同じ列を異なる大きさで区切って眺めても、一部だけが反転することはない。区切りは表示上の選択であり、意味を復元するための秘密情報ではない。

これに対して混成した順序では、バイト内のビットは右へ、ワード内のバイトは左へ、といった具合に規則が切り替わる。この場合、「どの大きさを一単位としていたか」まで共有しなければならない。チャンク幅が、記録されていないプロトコルフィールドへ変わってしまう。

Cohenは、ARPA Internetのデータグラムでは一貫したビッグエンディアンの前提が用いられ、異なる単位で眺めても混乱を生まなかったと述べる。これは歴史上の重要な選択だが、ビッグエンディアンの論理的優越を意味しない。IENの結論はむしろ、どちらを選ぶかより、同じ一つを選ぶことの方が重要だという和平案である。

「ネットワークバイトオーダー」は、CPUに対する評価ではなく、外へ出る瞬間の契約と考えるべきだ。リトルエンディアンのホストは内部を変える必要がない。送信時に共通表現へ移し、受信時に戻せばよい。境界で仕事を引き受けるからこそ、内部設計の自由が保たれる。

PNGとDEFLATEは逆を選び、どちらも成功した

後年の二つの仕様を並べると、この点が鮮明になる。RFC 2083はPNGの複数バイト整数をネットワーク順、つまり最上位バイト先頭と定める。一方、RFC 1951のDEFLATEは複数バイト量を最下位バイトから格納し、ビットの詰め方も別途細かく定義する。

選択は反対でも、双方の形式は異なる機械で読める。PNGのデコーダーがホスト固有の順序に置き換えたり、DEFLATEのデコーダーが一般的なネットワーク慣行を理由に並べ替えたりしないからだ。互換性を生むのは方向そのものではなく、方向を形式の一部として公表したことだ。

ここから、メモリー構造をそのまま送る危うさも分かる。コンパイラーのパディング、アラインメント、整数幅、ホスト順は公開意味ではない。長寿命の形式は、幅と位置と順序を機械から独立して定める。エンコーダーとデコーダーは単なる便利関数ではなく、私的表現と公共表現を往復する検問所である。

例外には適用範囲が要る

RFC 1071はInternet checksumについて、計算をどちらのバイト順で行っても、入れ替わった結果を正しく扱えばよいという性質を説明する。これは、その加算に固有の限定的な不変性である。ヘッダーの長さや識別子、任意のペイロードまで順序非依存になるわけではない。

安全な最適化は例外を囲い込む。対象の演算を名指しし、非対称なテストベクトルを持ち、境界を出る前に正準表現へ戻す。「バイト順は関係ない」という前半だけが口伝になると、古いデータを前にして、意図的な交換と不具合を区別できなくなる。

選択肢を一つ増やすと、試験対象は二つになる

Chris Newmanは1999年、ネットワークバイトオーダーを扱う個人Internet-Draftで実運用上の問題を論じた。この文書は失効しており、IETF標準としての正式な地位はない。ここで使えるのは後世の観察だけである。実行時に順序を選べる設計は、同じプロトコルやメディアタイプに二つの変種を作る。双方を独立に試験すべきだが、片方が放置されがちだという指摘だ。

交渉フラグ一つの背後には、二本の解析経路、二組の異常入力、版の組み合わせ、署名時に選択を固定する仕組み、推測に頼らない調査道具が必要になる。初期の柔軟性は、長期の保守債務になり得る。

既存形式やハードウェア境界、コピー回避の要件から、複数順序が合理的な場合はある。Cohenの方法はそれを禁じない。選択を明示し、適用範囲を狭くし、変換の記録を残すよう求める。問題は多様性ではなく、名札を失った多様性である。

比喩を残した人物

Internet Hall of Fameは、Danny Cohenがコンピューター分野でBig EndianとLittle Endianという語を生み出したことに加え、初期のパケット動画とパケット音声にも取り組んだと紹介する。USCの追悼記事は、Information Sciences Instituteでの長い研究歴を伝える。リアルタイム通信を扱ってきた人にとって、表現の食い違いは言葉遊びではない。独立した二つのシステムが会話を続けられるかどうかの条件だった。

風刺が問題を記憶に残し、その下にある境界の約束が解決を残した。内部は違っていてよい。公共の接点だけは、推測を要求してはならない。

情報源