
ソフトウェア開発において、フォークとは既存のコードベースを複製して作成され、一般的にはその後オリジナルとは独立して変更されるコードベースのことである。フォークから構築されたソフトウェアは、最初はオリジナルコードから構築されたソフトウェアと同一の動作をするが、ソースコードが次第に変更されるにつれて、結果として得られるソフトウェアはオリジナルと比較してますます異なる動作をする傾向がある。フォークは分岐の一形態だが、一般的にはフォークされたファイルをリポジトリではなくオリジナルとは別に保存する。コードベースをフォークする理由としては、ユーザーの好み、オリジナルソフトウェアの開発の停滞または中止、開発者コミュニティ内の分裂などがある。 [ 1 ]プロプライエタリソフトウェア( Unixなど)を明示的な許可なしにフォークすることは著作権法で禁止されているが、フリーソフトウェアやオープンソースソフトウェアは定義上、許可なくフォークできる。
語源
フォークという言葉は、14世紀にはすでに「枝分かれする、別々の道を行く」という意味で使われていました。[ 2 ]
ソフトウェア開発の文脈では、フォークは、1980年代にエリック・オールマンによってソースコード管理システムの文脈で、リビジョン管理ブランチを作成するという意味で使用されていました。[ 3 ]
ブランチを作成すると、プログラムのバージョンが「フォーク」されます。
この用語は1983年までにUsenetで使用され、議論のトピックを移動するためのサブグループを作成するプロセスを指していました。[ 4 ]
Lucid Emacs(現XEmacs)(1991年)やBerkeley Software Distributions(BSD)(1993-1994年)の誕生当初に、コミュニティの分裂の意味で「フォーク」が使われたという記録はないが、ラス・ネルソンは1993年にこの意味で「粉砕」という言葉を使った(ジョン・ギルモアの発言として)。[ 5 ] 1995年には、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つの可能な結果を例とともに指摘している:
- フォークの終焉。これはこれまでで最も一般的なケースです。フォークを宣言するのは簡単ですが、独立した開発とサポートを継続するにはかなりの労力がかかります。
- フォークの再マージ (例: egcs がGNU コンパイラ コレクションの新しいバージョンとして「承認」される)
- オリジナルの消滅 (例: X.Org Server が成功し、XFree86が消滅)
- 通常は差別化を伴う成功した分岐 (例: OpenBSDとNetBSD )
分散リビジョン管理(DVCS)ツールは、「フォーク」という用語のより感情的でない用法を普及させ、「ブランチ」との区別を曖昧にしています。[ 14 ] MercurialやGitなどのDVCSでは、プロジェクトに貢献する通常の方法は、まずメインリポジトリから独立したリポジトリの個人用ブランチを作成し、後で自分の変更をそのブランチに統合することです。GitHub 、Bitbucket、Launchpadなどのサイトは、独立したブランチを明示的にサポートする無料のDVCSホスティングを提供しているため、ソースコードリポジトリをフォークする際の技術的、社会的、および金銭的な障壁は大幅に軽減されており、GitHubはプロジェクトへのこの貢献方法を表す用語として「フォーク」を使用しています。
フォークされたソフトウェアは、元のソフトウェアが3.0、4.0、5.0といったバージョンであっても、プログラムの初期バージョンに通常使用される0.0.1、0.1、1.0といった番号からバージョン番号を振り直すことがよくあります。ただし、フォークされたソフトウェアが元のプロジェクトの代替として設計されている場合は例外となることがあります。例えば、 MySQLのMariaDB [ 15 ]やOpenOffice.orgのLibreOfficeなどが挙げられます。
BSDライセンスはフォークがプロプライエタリなソフトウェアになることを許可しており、コピーレフト支持者は商業的インセンティブによってプロプライエタリ化がほぼ不可避になると主張する。(ただし、コピーレフト ライセンスは、貢献者ライセンス契約の形でプロプライエタリな許諾とのデュアル ライセンスによって回避できる。) 例としては、 macOS (プロプライエタリのNeXTSTEPとオープンソースのFreeBSDに基づく)、CedegaとCrossOver ( Wineのプロプライエタリ フォークだが、CrossOver は Wine を追跡し、大きく貢献している)、EnterpriseDB ( PostgreSQLのフォークで、Oracle 互換機能を追加[ 16 ] )、プロプライエタリ ESM ストレージ システムを備えた PostgreSQL [ 17 ] 、 Netezza の[ 18 ]プロプライエタリで拡張性の高い PostgreSQL 派生製品などがあげられる。これらのベンダーの中には、コミュニティ プロジェクトに変更を還元するものもあれば、変更を自社の競争上の優位性として保持するものもある。
プロプライエタリソフトウェアのフォーク
プロプライエタリソフトウェアでは、著作権は通常、個々のソフトウェア開発者ではなく、採用企業が保有します。そのため、プロプライエタリコードは、所有者がウィンドウ版とコマンドライン版など2つ以上のバージョンを開発する必要がある場合、またはIBM PC互換機とMacintoshコンピュータ用のワードプロセッサなど、異なるオペレーティングシステム用のバージョンを開発する必要がある場合に、フォークされるのが一般的です。一般的に、このような内部フォークでは、一方のプラットフォームに慣れたユーザーがもう一方のプラットフォームでも生産性を維持したり、作成したドキュメントを共有したりできるように、プラットフォーム間で同じ外観、操作性、データ形式、動作を実現することに重点が置かれます。これはほとんどの場合、より大きな市場シェアを獲得し、フォークによって発生した関連する追加開発コストを回収するための経済的な決定です。
この種のものではない注目すべきプロプライエタリフォークは、プロプライエタリUnixの多くの変種である。ほとんどすべてがライセンスに基づいてAT&T Unixから派生しており、すべて「Unix」と呼ばれているが、相互に互換性がますますなくなってきている。[ 19 ] Unix戦争を参照 。
参照
- カスタムソフトウェア – 特定の組織または他のユーザー向けに特別に開発されたソフトウェア
- ダウンストリーム(ソフトウェア開発) – コンピュータサイエンスの概念
- 重複コード – コンピュータソースコードの繰り返し部分
- グループ意思決定 – 意思決定科学のサブセット
- ソフトウェアフォークのリスト
- モッディング – エンドユーザーによる製品のカスタマイズ
- モジュラープログラミング – コードをモジュールに整理する
- パーソナライゼーション – テクノロジーを活用して個人間の違いに対応する
- ROMハッキング - ビデオゲームの編集技術
- 送信元ポート – オペレーティングシステム内の通信エンドポイントリダイレクト先の簡単な説明を表示するページ
- チームの有効性 - チームが目標や目的を達成する能力
参考文献
- ^「分裂」という言葉は、その意味合いから、一般的に使われている。例えば、
- 「Lemacs/FSFmacs分裂」Wayback Machineで2009年11月30日にアーカイブ(Jamie Zawinski、2000年)
- 「KOfficeの分裂の背後」 2013年7月6日アーカイブ、Wayback Machineにて(ジョー・ブロックマイヤー、Linux Weekly News、2010年12月14日)
- 「著作権譲渡 – 一度痛い目に遭ったら二度と近づかない」 2012年3月30日アーカイブ、 Wayback Machine (Richard Hillesley, H-Online , 2010-08-06)
- 「フォークは機能です」 2012年2月29日アーカイブ、 Wayback Machine ( Anil Dash、2010年9月10日)
- 「ソフトウェア大分裂」 2012年1月6日アーカイブ、 Wayback Machine ( Glyn Moody、Linux Journal、2006年9月28日)
- 「フォークするかしないか: Ubuntu と Debian からの教訓」Wayback Machineに 2012 年 2 月 26 日にアーカイブ( Benjamin Mako Hill、2005 年)。
- ^ Online Etymology Dictionaryの「fork」の項目は2012年5月25日にWayback Machineにアーカイブされています。
- ^ Allman, Eric.「ソースコード管理システム入門」Wayback Machine Project Ingresに2014年11月6日アーカイブ、カリフォルニア大学バークレー校、1980年。
- ^誰か「net.philosophy」をフォークしてくれませんか?(ジョン・ギルモア、net.misc、1983年1月18日)
- ^粉砕 — 良いことか悪いことか? (ラッセル・ネルソン、gnu.misc.discuss、1993年10月1日)
- ^ Re: Hey Franz: 32K Windows は最悪だ!!!!! (Bill Dubuque, cu.cs.macl.info, 1995 年 9 月 21 日)
- ^ Lignux? (Marcus G. Daniels, gnu.misc.discuss, 1996年6月7日)
- ^「フォークという用語は、オペレーティングシステムのPOSIX標準に由来しています。プロセスが自身のコピーを生成するために使用するシステムコールはfork()と呼ばれます。」 Robles, Gregorio; González-Barahona, Jesús M. (2012).ソフトウェアフォークに関する包括的研究:日付、理由、結果(PDF) . OSS 2012 第8回国際オープンソースシステム会議. doi : 10.1007/978-3-642-33442-9_1 . 2013年12月2日時点のオリジナルからアーカイブ( PDF) . 2012年10月20日閲覧。
- ^ a b cなぜオープンソースソフトウェア/フリーソフトウェア(OSS/FS、FLOSS、FOSS)なのか?数字を見てみよう!:フォークArchived 5 April 2006 at the Wayback Machine (David A. Wheeler)
- ^リチャード・ストールマン「フリーソフトウェアの定義」フリーソフトウェア財団。2013年10月14日時点のオリジナルよりアーカイブ。 2013年10月15日閲覧。
- ^ 「オープンソースの定義」。オープンソース・イニシアティブ。2006年7月7日。2013年10月15日時点のオリジナルよりアーカイブ。 2013年10月15日閲覧。
- ^ Raymond, Eric S. (2002年8月15日). 「Promiscuous Theory, Puritan Practice」 . catb.org . 2006年10月6日時点のオリジナルよりアーカイブ。
- ^フォークされたアーカイブ2011年11月8日Wayback Machine ( Jargon File )、最初にv4.2.2に追加されましたアーカイブ2012年1月14日Wayback Machine、2000年8月20日)
- ^例えば、ウィリス、ネイサン (2015年1月15日). 「Node.jsの「オープンガバナンス」フォーク」 . LWN.net . 2015年4月21日時点のオリジナルからのアーカイブ。 2015年1月15日閲覧。
フォークはオープン開発モデルの自然な一部であり、GitHubではほぼすべてのページに「独自のコピーをフォーク」ボタンが配置されていることで有名です。
また、Nyman, Linus (2015). Understanding Code Forking in Open Source Software (PhD). Hanken School of Economics. p. 57. hdl : 10138/153135も参照のこと。実務家はこれまでフォークをかなり狭義に定義していましたが、[...] 現在ではこの用語ははるかに広義に使用されているようです。従来はブランチ、新しいディストリビューション、コードの断片化、疑似フォークなどと呼ばれていた動作が、今では一部の開発者によってフォークと呼ばれることもあります。これは、GitHubによるフォークという用語の広義な定義と使用に少なからず起因していると思われます。
- ^プロジェクトをフォークしました。バージョン番号はどこから始まるのでしょうか? 2011年8月26日アーカイブWayback Machine
- ^ EnterpriseDB 2006年11月13日アーカイブ、 Wayback Machine
- ^ Fujitsu Supported PostgreSQL Archived 20 August 2006 at the Wayback Machine
- ^ Netezzaアーカイブ2006年11月13日Wayback Machine
- ^フォークへの恐怖アーカイブ2012年12月17日Wayback Machine –リック・モーエンによるフリーソフトウェアプロジェクトにおけるフォークに関するエッセイ
外部リンク
- ミートボールWikiの「フォークする権利」
- フォークを考察する博士論文:(Nyman, 2015)Wayback Machineに2023年7月16日アーカイブ「オープンソースソフトウェアにおけるコードフォークの理解 - コードフォーク、それがオープンソースソフトウェアに与える影響、そして開発者によるコードフォークの捉え方と実践方法」