
ソフトウェア開発において、フォークとは既存のコードベースを複製して作成され、一般的にはその後オリジナルとは独立して変更されるコードベースのことです。フォークから構築されたソフトウェアは、最初は元のコードから構築されたソフトウェアと同じ動作をしますが、ソースコードがますます変更されるにつれて、結果として得られるソフトウェアはオリジナルと比較してますます異なる動作をする傾向があります。フォークはブランチの一種ですが、一般的にはフォークされたファイルをリポジトリではなく、オリジナルとは別に保存します。コードベースをフォークする理由には、ユーザーの好み、元のソフトウェアの開発の停滞または中止、開発者コミュニティの分裂などがあります。 [ 1 ]著作権法では明示的な許可なしにプロプライエタリソフトウェア( Unixなど)をフォークすることは禁止されていますが、定義上、フリーソフトウェアやオープンソースソフトウェアは許可なしにフォークすることができます。
「フォーク」という言葉は、14世紀にはすでに「枝分かれする、別々の道を進む」という意味で使われていました。[ 2 ]
ソフトウェア開発の文脈では、フォークは、ソースコード管理システムの文脈で、1980年という早い時期にエリック・オールマンによって改訂管理ブランチを作成するという意味で使用されました。[ 3 ]
ブランチを作成すると、プログラムのバージョンが「分岐」します。
この用語は、議論のトピックを移動するためのサブグループを作成するプロセスを指すため、1983年までにUsenetで使用されていました。 [ 4 ]
Lucid Emacs (現在のXEmacs ) (1991 年) やBerkeley Software Distributions (BSD) (1993 ~ 1994 年)の起源の頃には、コミュニティの分裂という意味でforkが使われていたことは知られていないが、 Russ Nelson は1993 年にこの意味でshattering という用語を使用した( John Gilmoreに帰属させている)。[ 5 ] 1995 年に、fork はXEmacs の分裂を説明するために使用され、[ 6 ] 1996 年までにはGNUプロジェクトで暗黙の了解となっている用法であった。[ 7 ]
この言葉は、実行中のプロセスを2 つに分割するfork() システムコールにも同様に使われます。通常、これは、異なるタスクを並行して実行できるようにするためです。[ 8 ]
フリーソフトウェア定義とオープンソース定義の両方によれば、フリーソフトウェアとオープンソースソフトウェアは、現在そのソフトウェアを開発、管理、または配布している者の事前の承認なしに合法的にフォークすることができます。[ 9 ]
変更を加えたバージョンのコピーを他者に配布する自由(自由3)。これにより、コミュニティ全体があなたの変更の恩恵を受ける機会を得ることができます。そのためには、ソースコードへのアクセスが前提条件となります。
3. 派生作品: ライセンスは、改変および派生作品を許可し、それらを元のソフトウェアのライセンスと同じ条件で配布することを許可する必要があります。
フリーソフトウェアでは、フォークは目標の違いや性格の衝突による分裂から生じることが多い。フォークでは、両者ともほぼ同一のコードベースを前提とするが、通常はより大きなグループ、またはウェブサイトを管理している者だけが、元の完全な名前と関連するユーザーコミュニティを保持する。したがって、フォークには評判の低下が伴う。[ 9 ]異なるチーム間の関係は、友好的である場合もあれば、非常に険悪な場合もある。一方、友好的なフォークまたはソフトフォークは、競争を意図せず、最終的には元のものと統合することを望むフォークである。
エリック・S・レイモンドは、エッセイ「ノオスフィアの開拓」[ 12 ]の中で、「フォークの最も重要な特徴は、後にコードを交換できない競合プロジェクトを生み出し、潜在的な開発者コミュニティを分裂させることである」と述べています。彼は「ジャーゴンファイル」で次のように述べています。[ 13 ]
フォークは、将来的に多くの労力が無駄になるというだけでなく、後継グループ間で正当性、継承、設計の方向性といった問題で激しい争いや対立が生じる傾向があるため、悪いものと見なされています。フォークに対しては深刻な社会的圧力が存在します。そのため、大規模なフォーク(Gnu-EmacsとXEmacsの分裂、386BSDグループが3つの娘プロジェクトに分裂したこと、短命に終わったGCCとEGCSの分裂など)は非常に稀で、ハッカーの間では個別に語り継がれるほどです。
デイビッド・A・ウィーラーは[ 9 ]フォークの4つの可能な結果を例を挙げて指摘している。
MySQLのMariaDBフォークの作成者であるMichael Widenius は、2026 年に、元のプロジェクトとの関係に基づいてフォークを分類することを提案しました。[ 14 ]彼は、政治的、再設計、または開発上の理由で元の所有者または開発チームによって作成された内部フォークと、外部グループによって作成された外部フォークを区別し、外部フォークを元のものからの乖離の増加によって 4 種類に分類しました。[ 14 ]
ウィデニウスはこれらを固定された特性ではなく、フォークが通過する可能性のある段階として提示し、連続する MariaDB バージョンをそれぞれの段階に順番に配置し、停滞したオリジナルに対応して作成されたフォークは遅かれ早かれ独立するか、オリジナルとともに衰退するかのどちらかになると主張している。[ 14 ]
分散型バージョン管理(DVCS) ツールは、「フォーク」という用語の感情的な意味合いを抑えた使用を普及させ、「ブランチ」との区別を曖昧にしてきました。[ 15 ] MercurialやGitなどの DVCS では、プロジェクトに貢献する通常の方法は、まずメインリポジトリとは独立したリポジトリの個人ブランチを作成し、後で変更を統合するように求めることです。GitHub 、Bitbucket、Launchpadなどのサイトは、独立したブランチを明示的にサポートする無料の DVCS ホスティングを提供しており、ソースコードリポジトリをフォークする際の技術的、社会的、金銭的な障壁が大幅に軽減されています。GitHub は、プロジェクトへの貢献方法としてこの方法を「フォーク」と呼んでいます。
BSDライセンスはフォークがプロプライエタリ ソフトウェアになることを許可しており、コピーレフトの支持者は、商業的インセンティブによってプロプライエタリ化がほぼ不可避になると主張しています。(ただし、コピーレフト ライセンスは、コントリビューターライセンス契約の形式でプロプライエタリライセンスとのデュアル ライセンスによって回避できます。)例としては、 macOS (プロプライエタリNeXTSTEPとオープンソースFreeBSDに基づく)、CedegaとCrossOver ( Wineのプロプライエタリ フォークですが、CrossOver は Wine を追跡し、かなり貢献しています)、EnterpriseDB( Oracle との互換性機能を追加したPostgreSQLのフォーク[ 16 ])、独自の ESM ストレージ システムを備えた Supported PostgreSQL [ 17 ]、Netezza [ 18 ]の PostgreSQL のプロプライエタリで拡張性の高い派生版などがあります。これらのベンダーの中には、コミュニティ プロジェクトに変更を還元するものもあれば、変更を独自の競争優位性として保持するものもあります。
フォークでは、元のソフトウェアが 3.0、4.0、5.0 などの別のバージョンであっても、0.0.1、0.1、1.0 などのプログラムの初期バージョンに通常使用される番号からバージョン番号を再開することがよくあります。フォークされたソフトウェアが元のプロジェクトのドロップイン代替として設計されている場合は例外となることがあります。たとえば、MySQL用のMariaDB [ 19 ]やOpenOffice.org用のLibreOfficeなどです。
独自ソフトウェアの場合、著作権は通常、個々のソフトウェア開発者ではなく、雇用企業が保有します。そのため、所有者がウィンドウ版とコマンドライン版など2つ以上のバージョンを開発する必要がある場合、あるいはIBM PC互換機とMacintoshコンピュータ用のワードプロセッサのように異なるオペレーティングシステム向けのバージョンを開発する必要がある場合、独自コードはより一般的にフォークされます。一般的に、このような内部フォークは、プラットフォーム間で同じ外観、操作感、データ形式、動作を実現することに重点が置かれ、一方のプラットフォームに慣れているユーザーが他方のプラットフォームでも生産性を維持したり、作成したドキュメントを共有したりできるようにします。これはほぼ常に、より大きな市場シェアを獲得し、フォークによって発生する追加の開発コストを回収するための経済的な判断です。
この種のものではない注目すべき独自のフォークは、多くの種類の独自のUnixである。これらはほぼすべてライセンスに基づいて AT&T Unix から派生し、すべて「Unix」と呼ばれているが、相互に互換性がなくなってきている。[ 20 ] Unix 戦争を参照 。
フォークはオープン開発モデルの自然な一部であり、GitHub がほぼすべてのページに「自分のコピーをフォークする」ボタンを貼り付けていることからも有名です。また、Nyman, Linus (2015). Understanding Code Forking in Open Source Software (PhD). Hanken School of Economics. p. 57. hdl : 10138/153135も参照。
実務家はこれまでフォークをかなり狭義に定義していたが、[...]現在ではこの用語ははるかに広く使われているようだ。従来はブランチ、新しいディストリビューション、コードの断片化、擬似フォークなどと呼ばれていたアクションも、今では一部の開発者によってフォークと呼ばれることがある。これはGitHubによるフォークという用語の広い定義と使用に少なからず起因しているようだ。