フォーク 【fork】
概要
フォーク(fork)とは、分岐(する)、分岐点、枝分かれ(する)、分流、支流、先端が分かれた器具などの意味を持つ英単語。IT分野では何らかの分岐、枝分かれしたデータ構造や、プロジェクトなどが過去の記録や成果を複製して分裂することなどを指す。プロジェクトのフォーク
ソフトウェア開発プロジェクトなどで、ある時点までの成果物を元に新たなプロジェクトを立ち上げることをフォークという。
オープンソースソフトウェアの開発プロジェクトなどでよく行われるもので、分岐時点までのコードなどの資産を複製して、以降はこれを元に別のプロジェクトとして開発を進めていく。開発方針の相違などで元のプロジェクトのメンバーの一部が脱退して新たにプロジェクトを興すという事例が多い。
また、ソフトウェアのあるバージョンが完成した後、不具合の修正などのみを行って維持・管理していく「安定版」と、新バージョン開発のために機能追加などを積極的に行っていく「開発版」などに分岐してそれぞれ別々に管理する場合がある。これもフォークの一種と考えられるが、プロジェクト自体が分裂したわけではないため「ブランチ」(branch)など別の表現で表すことが多い。
プロセスのフォーク
コンピュータ上で実行されているプログラム(プロセス)が、自身の複製を作成して新たなプロセスとして起動することをフォークという。
LinuxなどのUNIX系OSでよく利用される仕組みで、同名のシステムコール「fork」を利用して実行される。元のプロセスを「親プロセス」(parent process)、新たに生成されたプロセスを「子プロセス」(child process)という。それぞれ別のPID(Process ID)が割り当てられ、区別される。
プロセスがフォークされた瞬間は親子で同じ処理を実行しているが、一般的にはその後、子プロセスは自身が子プロセスであることを認識して、親とは異なる処理を開始する。UNIX系OSでは起動時にカーネルが「init」(PIDは1番)というプロセスを生成し、これをフォークした新たなプロセスを生成する。
ファイルシステムのフォーク
ストレージ装置に設けられたファイルシステムの中で、ファイルに記録されるデータ本体と、ファイルについての様々な情報(メタデータ)をそれぞれ記録し、対応付けて管理する仕組みをフォークという。
米アップル(Apple)社のMac OS/Mac OS X/macOSで用いられるファイルシステム(HFSなど)では、ファイルのデータ本体を「データフォーク」、メタデータを「リソースフォーク」として管理している。リソースフォークにはファイル形式、アイコン画像などを格納できる。
Windowsのファイルシステム(NTFS)でも似た仕組みがあるが、データ本体を「メインデータストリーム」、メタデータを「代替データストリーム」(ADS:Alternative Data Stream)と呼び、フォークではなくストリーム(steam)の語を用いる。
ブロックチェーンのフォーク
仮想通貨などの管理に用いられるブロックチェーンでは、データ形式や処理方式の変更などに伴い、チェーンの連鎖が複数に枝分かれする現象のことをフォークという。
このうち、すでに記録済みの過去のデータと互換性を維持し、半数以上の参加者が賛同した方に収束していく一時的な分岐を「ソフトフォーク」、過去のデータとは互換性がなく既存のチェーンから新しいチェーンが完全に分離し別々に運営されるようになる永続的な分岐を「ハードフォーク」という。