Columbia AppleTalk Package

Columbia AppleTalk Package (CAP) は、UNIX及びUnix系オペレーティングシステム (OS) でAppleTalkを実装するソフトウェアである。または、このソフトで用いられたことに由来するファイル名のエンコーディング方法のことでもある。
ソフトウェア.
CAPは、UNIX及びUnix系OSでAppleTalkを実装するオープンソースのソフトウェアである。コロンビア大学にて開発されていたが、現在はサポートを停止している。
UNIX機にCAPをインストールすることでMacintoshのファイルサーバやプリントサーバとして利用できた。
また、UNIX側にtimelord、Macintosh側にtardisというソフトをインストールすることで、UNIX機を時刻同期サーバとすることができた。これらのソフト名は英国のテレビドラマ「ドクター・フー」に由来する。
CAPはAppleTalkの主要なプロトコル、DDP、RTMP、NBP、ZIP、ATP、PAP、ASP、AFPを実装していた。一般的なUNIX機はRS-422ポートを持たずイーサネットポートのみであったため、イーサネット上のAppleTalk、すなわちEtherTalkを実装していた。また、EtherTalkが使えないOSの場合には、IP上でAppleTalkをカプセル化するIPTalkが使えた。
後期にはAFP over TCPのためのパッチも公開された。これはAppleTalkを使わずにTCP/IP上でファイル共有を行なうものである。
CAPはmacOS登場以前にサポートを停止しているため、AFP 2.x迄しか使えない。同等の機能を提供するnetatalkは現在もサポートを続行しており、AFP 3.xを使う事が出来る。
CAPエンコーディング.
Mac OS 9迄のMac OSでは、ファイル名の文字コードは各言語版で別々に扱われていた。英語版ではMacRoman、日本語版ではMacJapanese、韓国語版ではMacKoreanといった具合である。これらはUNIX上のファイルシステムで用いている文字コードとは同一ではない。そこで、CAPでは8ビットの文字を「:」+「16進数」という形式にエンコードした。
ただし、現在のWindows、Mac OS、UNIXではファイル名にUnicode (UTF-16、UTF-8)が使われる事が多くなったため、CAPエンコーディングは不要になりつつある。
エンコーディング方法.
例えば、MacRomanにおける「ä」（aウムラウト）の文字コードは16進数で0x8aなので、「:8a」にエンコードされる。
2バイトの文字コードであるMacJapaneseでは、1バイト目と2バイト目がそれぞれ別に扱われる。「人」の文字コードは16進数で0x90 0x6cである。1バイト目は8ビットなので「:90」にエンコードされる。2バイト目は7ビットなのでエンコードされず、ASCIIの「l」になる。結果として「:90l」になる。
このエンコード方法は、CAPがサポートを停止した現在でも、様々な場面で利用されている。
sambaの実装.
samba 2.xでは、CAPとHEXが利用出来た。前者は文字通りCAP互換のエンコーディングである。後者のHEXは2バイト目も必ず16進数にするエンコーディングである。すなわちCP932の「人」は「:90:6c」となる。
samba 3.xではCAPのみをサポートし、HEXはサポートしない。HEXをサポートするためのパッチならば存在する。
netatalkの実装.
netatalk 1.xはCAPをサポートした。つまりsamba 2.xとnetatalk 1.xでファイル名を共通に扱う事が出来た。ただしCP932とMacJapaneseとの間で異なる機種依存文字は共通に扱う事が出来ない。
netatalk 2.xでは、1.xとの互換を保つためにCAPを扱う事が出来る。しかし実装が追い付かず、実際にはCAPではなくHEXエンコーディングになってしまっているため、2バイト文字ではnetatalk 1.xと互換性がない。
カーネルでの実装.
Linuxでhfs.oやhfs.koと呼ばれるカーネルモジュールを用いるとHFSのファイルシステムをマウントすることが出来る。このときファイル名はCAP形式となる。つまり、これをsambaやnetatalk 1.xで公開すれば、Microsoft WindowsやMac OSからファイル名を正常に扱うことが出来る。
外部リンク.
CAPはサポートを停止したものの、現在も以下のftpサイトから入手可能である。