要約

  • 1994年12月のRFC 1740は、MacintoshファイルをMIMEで送る形式を記した。AppleSingleは内容と属性を一つのバイト列にまとめ、AppleDoubleはMac固有の情報とデータフォークを分ける。
  • 多くのファイルで推奨されたmultipart/appledoubleは、資源などを収めるapplication/applefile部品と、データ自体に適したMIME型を付けた部品から成る。

封筒を開ける人は同じ道具を持っていない

別の機種から見れば、ファイルはひと続きのデータに見えることが多い。昔のMacintoshでは、データフォークのほかにリソースフォークがあった。後者にはプログラムの断片やアイコン画像、属性が入る場合がある。Finderが保管する情報も付いて回る。写真そのものだけ欲しい人と、Mac上で元のファイルの姿まで戻したい人に、同じ「添付しました」で済ませるには荷物が複雑だった。

Patrik Faltstrom、Dave Crocker、Erik E. Fairは、RFC 1521のMIMEを使って荷造りを考えた。MIMEなら一通の本文を複数の部品に分け、部品ごとに種類を示せる。画像は画像として、Mac固有の情報はそのための部品として運べばよい。受け手の種類に合わせてメールを二度書くのではなく、同じ封筒を開く順番を選べるようにした。

AppleSingleは丸ごと一箱に詰める方法だった。ファイルの内容と属性を連続したバイト列にし、application/applefileとして送る。箱の中身は揃う。しかしMac以外の受け手がデータだけ欲しいときも、まずAppleSingleの箱を解かなければならない。外側の種類が教えるのは箱の方式であり、写真なのか別のデータなのかは一段奥にある。

AppleDoubleは箱に仕切りを設けた。ヘッダー側にはリソースフォークとデスクトップ情報、もう一方にはデータフォークを入れる。外側はmultipart/appledoubleで、下位の部品はちょうど二つ。ヘッダーはapplication/applefile、データは内容に合った型を付ける。RFCの例はimage/gifで、適切な登録型がないときはapplication/octet-streamを使う。別機種の人はデータ部をそのまま扱える。Macは両方を使ってファイルの情報を取り戻せる。

すべてのMacファイルに二つの箱が要るわけではない。よく知られたMIME型を持ち、リソースフォークが空またはごく軽い文書は普通のMIME部品で送れる。データフォーク自体が存在しない文書にはAppleSingleを用いる。残る多くのケース、とりわけ資源側が重要な場合やデータに一般的な型がない場合に、AppleDoubleが推奨された。ファイルの中身を見て包み方を変える、気の利いた郵便局である。

古いメールの制約も封筒の端に残る。AppleSingleのバイナリ列やAppleDoubleのバイナリヘッダーは、通る経路によって転送用の符号化が必要になる。RFCは制限の厳しい経路でも通しやすいBase64を最も安全な選択とした。添付名を示すnameパラメーターも勧めたが、MIMEから継いだ構文では七ビットのUS-ASCIIに限られた。ファイルの二股は守れても、荷札の文字にはまだ狭い欄しかなかった。

AppleDoubleの仕事は、Mac独自の構造を全員に覚えさせることではない。一般的なデータには一般的なMIME型を付け、Macに必要な部分は隣に残す。受け手は同じメールから、自分の道具で使える部品を取り出す。ファイルを平らに潰す代わりに、取り出し口を二つ設けたわけだ。

この仕様の面白さは地味な仕分けにある。メールの添付ボタンは一つでも、添付されるものの内部は一枚岩とは限らない。RFC 1740は写真を写真として見せ、写真と一緒に来たMacの道具箱も置いていった。一通の封筒が、ようやく両方の荷物を扱えるようになった。