フォーク (英: fork)は、コンピュータのファイルシステムにおいてオブジェクトに結びつけられたメタデータである。ファイルシステムによっては、ファイルは一つかそれ以上のフォークを持つかもしれない。同様のファイルシステムの機能として拡張ファイル属性があるが、通常これのサイズに制限があるのに対し、フォークの場合は任意のサイズにすることができる。場合によってはデータのサイズより大きいかもしれない。マイクロソフトのプラットフォームでは、これは代替データストリーム (Alternate Data Stream、ADS)として知られている。
まずファイルシステムのフォークといえば、 AppleのHFSファイルシステムが挙げられる[1]。このHFSやオリジナルのMFSは、オブジェクトに数種類のフォーク(データフォーク、リソースフォーク、複数の名前付きフォーク)を持たせることを可能にした。
リソースフォークはメタデータを保存する目的で設計された。ここでのメタデータは、ファインダや、アプリケーションのメニューやダイアログボックスで使われるファイルアイコンのようなGUIで使われる[2] 。機能は非常に柔軟だったので、付加的な利用法が見いだされた。たとえば、ワードプロセッサ文書の内容と体裁を分割し、体裁情報の方はリソースフォークに保存する手法である。
HFS+のあまり目立たない機能に、従来のデータフォークとリソースフォークだけでなく、ユーザ定義の「名前付きフォーク」を任意の数だけ持たせるというものがある。Mac OS 8.1からMac OS 10.3.9ではアップルがこれを全くサポートしなかったので、この機能はほとんど未使用の状態であった。Mac OS 10.4からは拡張インライン属性をサポートする為に部分的な実装が行なわれた。
Mac OS X v10.4までは、OSに付属する古典的なUnixコマンド(tarなど)を使うユーザはデータ損失のリスクを負った。バージョン10.4まではファイルのリソースフォークを扱うためのユーティリティをアップデートしなかったからである[3]。
1985年よりNovell NetWare File System (NEFS) とその後継Novell Storage Services (NSS) はファイルのメターデータを保存する様々な方法を使うようにゼロから設計された。いくつかのメタデータはNovell Directory Services (NDS) に備わり、いくつかはディスク上のディレクトリ構造に保存され、いくつかはノベル用語で 'multiple data streams' と呼ばれるファイル自身に保存される。Multiple data streamsはマッキントッシュのクライアントが扱い、NetWareサーバが扱うことができる。
マイクロソフトのNTFSでは、フォークは代替データストリーム (Alternate Data Streams, ADS)として知られている[4]。1993年、マイクロソフトはNTFSファイルシステムを導入したWindows NTの最初のバージョンをリリースした。このファイルシステムでは、既にフォークをサポートしているOSとの互換性を保つために代替データストリームとして複数の名前付きフォークをサポートした。Windows 2000でマイクロソフトは作成者やタイトルといったファイル属性[5]やサムネイル画像[6]を保存するためにNTFSで代替データストリームを使うようになった。Windows XPのサービスパック2でマイクロソフトはAttachment Execution Service (AES)を導入した。これはファイルのダウンロード元の詳細を代替データストリームとして保存するものであり、ダウンロードファイルのリスクからユーザを保護する取り組みである[7]。
Windows NTはAPIでフォークを扱う機能をもつ。いくつかのコマンドラインツールはフォークを作成し、アクセスすることができる。しかし、Windows Explorerやdirなどのほとんどのプログラムはこれを無視する。Windows Explorerはフォークをコピーし、もしコピー先のファイルシステムがフォークをサポートしない場合は警告を出す。しかし主フォークのサイズだけを表示し、ファイルやフォルダのストリームは一覧表示しない。Windows VistaのDIRコマンドではフォークを一覧表示するオプションが追加された[8]。
ファイルシステムが異なるフォークをサポートする場合、アプリケーションはそれを意識すべきであり、またセキュリティのリスクが発生する。適切なshimなしにデータにアクセスすることが出来る古典的なソフトウェアは、これらの問題に対して根本的な原因となりうる。
もし異なるシステムユーティリティ(ディスク操作、アンチウイルスソフト、アーカイバ等)が異なるフォークを認識しなければ、以下のような問題が発生する。