フォーク (ソフトウェア開発)

ソフトウェア開発における**フォーク**（）即ち**[[派生]]**とは、あるソフトウェアパッケージのソースコードから分岐して、別の独立したソフトウェアを開発することである。

自由ソフトウェアやオープンソースソフトウェアでは、ライセンス上、原作者の許可なしにフォークが可能である。

## ブランチング
多くのプロジェクトでは、バグ修正のみが行われる*安定版*（英: stable version）あるいは*リリース版*（英: release version）と、新機能を取り込む*開発版*（英: development version）とを別に用意している。これもフォークの一種である。このようなフォークは「ブランチ」と呼ばれるが、これは「フォーク」という言葉にネガティブなニュアンスがあるのと、この方法がソフトウェア工学における「ブランチ（英: branching）」に似ているためである。

## 自由ソフトウェア
自由ソフトウェアにおけるフォークの原因としては、目標の食い違いや個人的な対立などがある。フォークが発生した場合、開発グループがほぼ同じ内容のコードベースを使用するが、ソフトウェアの元々の名前とユーザーコミュニティについては、大抵の場合大きい方のグループ（または元々のアーキテクトの所属するグループ）が引き継ぐ。従って、フォークはソフトウェアの評判の点では不利益となる。分岐した開発チーム間の関係は、良好であったり（例：UbuntuとDebian）、対立していたり（例：X.Org ServerとXFree86、cdrtoolsとcdrkit、WebKitとBlink）、全く交流がなかったり（例：Linuxディストリビューションのほとんど）と様々である。

フォークは自由ソフトウェアによってもたらされる自由の一種であると考えることもできるが、開発の成果が重複する、利用者がどちらを使うべきか迷ってしまうなどの悪い点もある。各グループが協調してリソースを共有することも可能ではあるが、自由ソフトウェアライセンスではこの点について規定がなく、合意がとれた場合にしか行われない。そのため、開発作業は他のフォークとの差別化に重点を置いて行われることが多い。

1997年に公開された「*[[伽藍とバザール]]*http://www.catb.org/~esr/writings/cathedral-bazaar/homesteading/ar01s03.html」では、*"フォークの最も重要な特性とは、コードのやりとりのない競合プロジェクトを生み出し、潜在的な開発者コミュニティを分裂させてしまうことである"*としている。しかし、現在ではこの定義は一般的ではない。

場合によっては、フォークが元のプロジェクトに併合されたり、元のプロジェクトに置き代わったりすることもある。EGCS (the Experimental/Enhanced GNU Compiler System) は元々GCCからのフォークであったが、オリジナルのプロジェクトよりも活発に開発が行われ、最終的にはオフィシャルのGCCプロジェクトとしてお墨付を得るに至った。この効果を意図的に狙ったフォークもあり、例えばMozilla FirefoxはMozillaの非公式プロジェクトであったが、開発の中心はMozilla SuiteからすぐにFirefoxに移った。

## 問題点
ジャーゴンファイルではフォークの問題点が以下のように述べられている。:
:フォークは「良くないこと」であると考えられている。理由として、フォークの結果多くの開発の労力が浪費されるという点だけでなく、本家争い、引き継ぎ、設計の方向性などについて、後継となるグループ間で激しい口論が行われる点がある。フォークには強い社会的圧力がついてまわる。そのため、ハッカー伝承に残るほど大きなフォーク（例えばGNU EmacsとXEmacsの分裂、386BSDの3グループへの分裂、短命に終わったGCCとEGCSの分裂）は非常に少ない。

フォークの表明自体は簡単だが、そこには独立した開発とサポートを続けるに足る十分な取り組みが要求される。十分なリソースなしにフォークを行えば、プロジェクトはすぐに活動休止状態に陥ってしまう。例えば、GNOMEからフォークしたGoneMEはある程度の知名度を得たにもかかわらず、すぐに開発中止となってしまった。大きな成功を収めたフォークとしては例えば X.Org X11サーバが挙げられる。X.Orgは開発者とユーザからの広範に渡る支援を得て、Xの開発スピードを上げることができた。

## プロプライエタリソフトウェア
通常、プロプライエタリソフトウェア の著作権は個々の開発者ではなく雇用者側の組織が保持する。従って、例えば経営者が複数のバージョン（GUIバージョンとコマンドラインバージョンや、複数のオペレーティングシステム用のバージョン、例えばワープロソフトのIBM PC互換機バージョンとMacintoshバージョンなど）を開発しようとした場合など、プロプライエタリなコードではフォークがより発生しやすい。一般的に、これらの内部的なフォークでは、ルックアンドフィール・データフォーマット・ソフトウェアの振る舞いなどをできる限り同じにすることに力が向けられている。これは、一つのバージョンに精通したユーザが別のバージョンでも高い生産性を発揮したり、作成したドキュメントを複数バージョン間で共有したりできるための配慮である。多くの場合、このようなフォークはマーケットシェアの拡大を目的に行われるため、フォークによって発生した開発コストに対する見返りも得られる（ように計画して行われる）。

上記のケースに該当しないフォークとしては、各種のプロプライエタリなUnixが上げられる。これらは全てAT&T Unixから派生しており、全て “Unix” と呼ばれてはいるが、どれも相互互換性を失う方向へ進んでいる。UNIX戦争も参照のこと。

BSDライセンスではフォークしたバージョンがプロプライエタリソフトウェアとなることが許されている。商業的な理由がある場合、ソフトウェアのプロプライエタリ化はほぼ避けられないという意見もある。プロプライエタリなフォークの例としては EnterpriseDB （Oracle互換の機能を備えたPostgreSQLのフォーク）、プロプライエタリなESMストレージシステムと組み合わせて使われる Fujitsu Supported PostgreSQL、Netezza による PostgreSQL の高スケーラビリティ版が挙げられる。これらのベンダーは変更点を本家のプロジェクト側に提供する場合もあるが、競合製品に対する優位性を保つために提供しない場合もある。

## その他の有名なフォーク
* ほとんどのLinuxディストリビューションは他のディストリビューションからの派生であり、その多くはDebian、Red Hat、Slackwareのどれかを起源とする。ディストリビューションの内容のほとんどが自由ソフトウェアであるため、個々のディストリビューションを使いやすくするためのアイデアやソフトウェアを自由に交換できる。また、マージ（例えばUnited LinuxやMandriva）が起こることは稀である。
* Pretty Good Privacyは、アメリカ合衆国からの暗号の輸出規制のため、アメリカ国外でフォークが行われた。
*ゲームNetHackには変種が数多くあり、例えばSlash'EMが挙げられる。また、NetHack自身もHackからのフォークである。
*OpenBSDはテオ・デ・ラートによるNetBSDからのフォークである。
*OpenSSHはSSHからのフォークである。このフォークはSSH 2.xのライセンスがプロプライエタリソフトウェア（ソースコードの参照は可能であった）となったことが原因で、自由ソフトウェアライセンスの元でリリースされた最後のバージョンであるSSH 1.xからフォークが行われた。数ヶ月後には、事実上全てのLinuxディストリビューション、各種BSD、および商用のUNIXのいくつかにおいて、SSHからOpenSSHへの置き換えが行われた。
* DragonFly BSDはFreeBSD 4.8からのフォークである。長きに渡りFreeBSDの開発を行ってきたMatt Dillonによるもので、FreeBSD 5の技術的な方向性に関する意見の相違が原因であった。
* AdempiereはCompiere 2.5.3bからのフォークであり、コミュニティによるメンテナンスが行われている。このフォークはCompiere Inc.の商業的・技術的な方向性に関する意見の相違が原因であった。
* iDempiereはAdempiere 3.6.1からのフォークであり、コミュニティによるメンテナンスが行われている。このフォークはAdempiere Inc.の株式会社のメンバーの間の差異によるものでした。
* NeoOfficeはOpenOffice.orgからのフォークであるが、互換性のないライセンス（LGPLではなくGPL）を使用している。このフォークはライセンスおよびOpenOffice.orgをMac OS Xへ移植する方法についての意見の相違が原因であった。

## 参考文献

* Fear of forking - Rick Moen による、自由ソフトウェアのフォークに関するエッセイ
* Forking (David A. Wheeler)
* Meatball Wiki内のRight to Fork

## 関連項目
* 派生
* Linuxディストリビューション
* FreeBSDディストリビューション