thumb|2000年代に流行ったオープンソースソフトウェアのウェブサービス構成 LAMP thumb|2000代末のオープンソースOSを使った世界初のAndroidスマートフォン HTC G1 FOSSの歴史では、FOSS、すなわち自由ソフトウェアとオープンソースソフトウェアの歴史を、その背景・文化・運動・方法論・技術・影響などを踏まえつつ多面的に解説する。
ソフトウェアのソースコードを利用者が共有し、修正、再頒布する文化は、1950年代のコンピュータ上でソフトウェアが稼働するようになった頃から学術機関、研究機関の間で存在し、ソースコードとソフトウェアはパブリックドメインで共有されていた。1970年代以降、ソフトウェア開発は徐々に商業となり、ソフトウェアの頒布に制約を付与するプロプライエタリソフトウェア、ソースコードを非公開とするクローズドソースの文化ができあがった。1980年代以降、利用者がソフトウェアのソースコードを自由に利用できないことをストレスに感じた人たちは、自由ソフトウェアやオープンソースを定義して、ソースコードを利用者で共有することによるソフトウェアの発展を提唱した。2000年代前後のソースコードの共有文化が再度一般化した頃、オープンソースソフトウェアコミュニティ内での議論や、プロプライエタリソフトウェアを販売する企業から攻撃など、論争が活発となった。
コンピュータ以前の技術共有 技術情報の自由な共有という文化は、コンピュータのかなり以前から存在していた。例えば、初期の自動車開発では、1つの企業がの申請した2ストローク機関のガソリンエンジンの特許を持っていた。この特許によってこの企業は業界を独占し、他のメーカーはその要求を飲むか、さもなければ訴訟のリスクを負わねばならなかった。1911年、独立系の自動車メーカーに勤務するヘンリー・フォードはの特許無効の申し立てに成功した。その結果、ジョージ・セルデンの特許は事実上価値がなくなり、後にとなる新しい協会が結成された。新しい協会は、すべての米国自動車メーカー間でクロスライセンス契約を締結した。各社は技術を開発し特許を出願できるが、それらの技術は共有されており、第二次世界大戦に入った頃には、92件のフォード・モーターの特許と515件の他社の特許が費用も訴訟も伴わず共有されていた。
マシンバンドルのソフトウェア 1950年代のコンピュータはハードウェアとソフトウェアがバンドルされた大型のマシンであり、マシンベンダーは同ハードウェアで動作するソフトウェアを開発し、マシンとソースコードを利用者に提供していた。利用者は提供されたソースコードを修正して独自のソフトウェアを開発し、パブリックドメインとして共有していた。1960年代から1970年代にかけて、ソフトウェアの開発コストは肥大化し、マシンベンダーとは独立したソフトウェアベンダーによるソフトウェア開発とプロプライエタリソフトウェアの文化ができていった。
研究機関内でのコード共有 1950年代から1960年代のコンピュータでは、ハードウェア上で動作するオペレーティングシステム (OS) とソフトウェアはソースコードと実行ファイルをマシンに同梱する形で利用者に提供されていた。ソフトウェアは大学や研究所の研究者により開発され、パブリックドメインとして扱われていた。コンピュータは大学や研究機関が主な利用者であり、ソフトウェアはソースコードは一般に学術分野で長く確立された公開性と協力の原則の下で配布され、それ自体は商品として見られなかった。そのような組織での活動は、オープンソースソフトウェア分野で肯定的な意味で使われるハッカー文化と呼ばれる、開発の中心的な要素であった。この頃のソフトウェアは特定のハードウェアでしか動作させることはできなかったため、他者のハードウェアで実装されたものを自分のハードウェアで動かしたり、ソフトウェアのバグの修正や新しい機能の追加するために、人にとって可読性のあるソースコードはマシンで実行する機械語と共に頒布されていた。
thumb|right|A-0 Systemが動作するUNIVACの商用コンピュータ オープンソースソフトウェアの最初の事例は、1953年にレミントンランドのUNIVAC部門で開発され、ソースコードと共に利用者にリリースされたA-0 Systemと考えられている。利用者は修正や改善をUNIVACへフィードバックするよう求められた。その後、大半のIBMのメインフレームがソースコードと共に共有された。と呼ばれたIBM 701のユーザーグループ、と呼ばれたDECのユーザーグループは、ソフトウェアの共有体系を構築した。ゼネラルモーターズがオリジナルを開発したGM-NAA I/Oは、SHAREユーザーグループによってSHARE OSとしてIBM 709、IBM 7090へ移植された。
幾つかの大学のコンピュータ関係の研究室はコンピュータにインストールする全てのプログラムのソースコードのファイルを公開しなければならないポリシーを定めていた。1969年、ARPANETが構築され、このネットワークはソースコードの交換を簡略化した。1970年代にソースコードの公開と共に開発されたTeXやSPICEは2020年代まで長く使われ続けている。
マシンバンドルからの分離と商業化 1960年代より変化が訪れ、OSやプログラミング言語のコンパイラを始めとしたソフトウェアの開発コストはハードウェアに比べて劇的に増加した。ハードウェアにバンドルするソフトウェアのコストはハードウェアコストに含まれていたため、ソフトウェア業界の成長はハードウェアベンダーの製品と競合した。ハードウェアベンダーはソフトウェアの利益はないもののリースしたハードウェアにバンドルしたソフトウェアのサポートをするためソフトウェア製品のコストをハードウェア製品のコストに上乗せする必要があり、一方で自らのニーズに併せてソフトウェアを改善することができる顧客にとってはハードウェアベンダーのソフトウェア製品のコストをハードウェア製品のコストと一緒に束ねることは望んでいなかったpage 176。例えば、DECのPDP-11は標準のOSはDEC製のやRT-11であったが、マシンの利用者は自身の利用用途に併せてソビエト連邦製、AT&T製UNIXなど他社製OSを利用した。1969年1月17日に提出された米国政府とIBMの独占禁止法訴訟では、米国政府はバンドルされたソフトウェアが反競争的であると訴えた。
需要に併せてハードウェアにバンドルするソフトウェアは減り、一部のソフトウェアは引き続き無償でバンドル提供されていたが、制限付きライセンスでのみで提供、販売されるソフトウェアが増えていった。1970年代序盤、AT&TはUNIXの早期バージョンを開発し、行政機関と学術機関に無償で提供した。しかし、そのバージョンは再頒布や修正コードの頒布を認めておらず、オープンソースソフトウェアと呼ばれる条件を満たす物ではなかった。1979年、AT&Tは企業がUNIXシステムを利用してビジネスをする場合はUNIXの利用に有償ライセンスを課すことを決定し、システムパッチを有償ライセンスで販売するようになった。広い普及によりアーキテクチャを切り替えることは難しく、多くの学術機関の利用者はUNIX有償ライセンスを購入して利用を続けた。
1970年代以前のソフトウェアはパブリックドメインで共有されていたが、この頃よりクローズドソース、プロプライエタリソフトウェアが登場した。1974年には「コンピュータプログラムは、著作者の制作を具体化する範囲で、著作権の適切な主題である」と言及したApple Computer, Inc. v. Franklin Computer Corporation Puts the Byte Back into Copyright Protection for Computer Programs in Golden Gate University Law Review Volume 14, Issue 2, Article 3 by Jan L. Nussbaum (January 1984)Lemley, Menell, Merges and Samuelson. Software and Internet Law, p. 34.。加えて、1983年にCONTUはオブジェクトファイルに関するで「コンピュータプログラムは文学作品としての著作権を持ち、ソースコードを非公開とするクローズドソースのソフトウェアのビジネスモデルは有効である」と述べている。
1970年代末から1980年代初頭、コンピュータベンダーとソフトウェアベンダーはプログラム製品としてソフトウェアのビジネスモデルを構築し、ソフトウェアを商用製品として販売していった。ビル・ゲイツは1976年にOpen Letter to Hobbyistsというエッセイでマイクロソフトの製品であるAltair BAISCが愛好者の間でライセンス費を支払うこのとなく広く共有されていることを残念に思っていると述べた。IBMは1983年2月8日付の発表レターで、購入したソフトウェアのソースコードを配布しない、今で言うクローズドソース、という方針を打ち出した。コストの増加に伴い、一般傾向はプログラマが可読なソースコードは頒布せず、ソースコードをコンパイルして作られる実行形式の機械語だけを頒布するプロプライエタリソフトウェアとなっていった。
日常的に続いたハッキング 1980年代から1990年代、ソフトウェアは商業化し、クローズドソースであることが多かったが、後に「ホビイスト()」や「ハッカー()」と呼ばれる、ソースコードを他のプログラマやユーザーと無料で共有しようとしていた人たちがいた。彼らは書籍や独自のネットワークを通してソフトウェアのソースコードを共有して、他者の書いたソースコードを入手し、学習、利用した。
書籍を通したコード共有 インターネットが一般的に使われるようになる以前、1980年代以降に出版されていた、、、Byteなどのコンピュータ雑誌 "Byte magazine, the leading publication serving the homebrew market ..."、ベストセラーのBASIC Computer Gamesに代表されるコンピュータプログラミング本はソフトウェアのソースコードを掲載し、共有利用されていた。しかしながら、それらは依然としてコピーライトであり、Atari 8ビット・コンピュータのシステムソフトウェアの主要なコンポーネントは注釈付きのソースコードでマスマーケット本に掲載された。例えば、のソースコードの一部は『The Atari BASIC Source Book』に、のソースコードの一部は『Inside Atari DOS』に掲載されていた。
オンラインの共有コミュニティ 1980年代、ソースコードを伴うソフトウェアはBBSネットワークで共有されていた。これは時には必要なもので、BASICやその他の一部のインタプリタ言語はソースコードのみで頒布が可能であり、多くのものがフリーウェアだったからである。利用者がソースコードを収集し、その修正について議論の場を設けようとした場合、BBSはデファクトスタンダードなオープンシステムであった。
この分野で最も分かりやすく、最も多く利用されたBBSネットワークの一つにがBASICで最初に開発したがある。彼のソフトウェアを()し、モッド()を頒布する文化は、そのソフトウェアを最初にPascal、続いてC++に移植し、そのソースコードは登録ユーザーに共有され、ユーザーはモッドを共有し独自バージョンのソフトウェアをコンパイルする際に使われ、自身を大きく成長させた。
時を同じくして、1980年代序盤のUsenetとの出現はプログラミングコミュニティを繋ぎ、プログラマがソフトウェアを共有し、他者が書いたソフトウェアに貢献する更に単純な手法を提供した。
SHAREプログラムライブラリ 1955年に設立したユーザーグループは自由に利用できるソフトウェアを収集し、頒布していた。SHAREの最も古いドキュメント頒布物は1955年10月17日に遡り、『SHARE Program Library Agency』で磁気テープの情報とソフトウェアがまとめられていた。IBMがメインフレームのOSのソースコードとしてリリースしたものをDave Pitts' IBM 7090/7094 Page 、SHAREユーザーグループは小さなローカルの機能追加、修正をし、他の利用者と共有した。SHAREプログラムライブラリとそれが育んだ分散開発のプロセスは、オープンソースソフトウェアの主要な起源の1つとなった。
DECUS tapes 1980年代初頭、「DECUS tapes」と呼ばれたによるDEC製品利用者のために自由に利用できるソフトウェアを共有する世界的なシステムが存在した。DECUS tapesはソフトウェアの学習、修正を望む利用者が求めるソースコードを頒布した。DEC製のOSは一般にプロプライエタリソフトウェアだったが、TECOエディタ、テキストフォーマッタ、ファイルリストツールなどの利用者の利便性を上げるユーティリティツールはDECUS tapesで頒布されていた。それらのユーティリティパッケージはDECにも貢献しており、時には彼らの商用のOSの新しいリリースに投入された。DECUS tapesではコンパイラでさえ頒布され、例えばRatforやは研究者たちがFortranコードをgoto文を抑制する構造化プログラミングへ移行する手助けをした。1981年、DECUS tapesは、DECのVMS OSが動作する16ビットマシンのPDP-11シリーズ、32ビットマシンのVAXシリーズに、ローレンス・バークレー国立研究所のSoftware Tools Virtual Operating Systemを移植したことで革新的な存在となった。それはWindows上のCygwinに似ており、UNIXに互換性のある環境を提供した。
自由ソフトウェアの提唱
プロプライエタリソフトウェアの文化に強いストレスを感じた一人にリチャード・ストールマンがいた。リチャード・ストールマンはこのままでは最初に他者が書いたプログラムを学習、修正することができなくなり、それは非道徳的であると考えた。この文化に対抗する形で、1980年代中程からリチャード・ストールマンは、利用者の自由とコミュニティに敬意を払い、ソフトウェア利用者にソフトウェアを実行、複製、頒布、学習、改善する自由を提供する「自由ソフトウェア」()を提唱した。
コピーレフトの発明 リチャード・ストールマンは1980年代中頃に自由ソフトウェアを広く展開させるためコピーライト(著作権)の対象となる著作物の自由な状態を維持するための法的な仕組みとなる「コピーレフト」の概念を発案した。コピーレフトは利用者に、追加費用なく利用する権利、プログラムの完全なソースコードを入手する権利、ソースコードを学習、修正する権利などの多くの権利を与え、同時に成果物に同一の条件および追加の制限を加えない義務を要求した。成果物は他のプログラムの混合で構成されるため、下流の利用者は自身の成果物を独自の制約を加えたソフトウェア(プロプライエタリソフトウェア)に変えることはできず、コピーレフトのコモンズ(ローカル・コモンズ)に貢献するよう呼びかけられた。
コピーレフト (copyleft) という単語はコピーライト (copyright) の対義語として1970年代後半には存在していた (NB. Source code begins with the following six lines. "TINY BASIC FOR INTEL 8080; VERSION 1.0; BY LI-CHEN WANG; 10 JUNE, 1976; @COPYLEFT; ALL WRONGS RESERVED". The June date in the May issue is correct. The magazine was behind schedule, the June and July issues were combined to catch up.) (NB. The source code begins with the following nine lines: "TINY BASIC FOR INTEL 8080; VERSION 2.0; BY LI-CHEN WANG; MODIFIED AND TRANSLATED TO INTEL MNEMONICS; BY ROGER RAUSKOLB; 10 OCTOBER, 1976 ; @COPYLEFT; ALL WRONGS RESERVED")。リチャード・ストールマンがコピーレフトという語を気に入ったのは、1984年にドン・ホプキンスがリチャード・ストールマンに宛てて送った「」(コピーレフト―全ての権利は逆さにされている)というフレーズに由来する。この後、リチャード・ストールマンはコピーレフトという概念の発案と定義まで少々の時間をかけた。
GNUプロジェクトの開始 1982年にリチャード・ストールマンは自由ソフトウェアのみで構成された完全なOSを実装する「GNUプロジェクト」を開始した。GNUプロジェクトはEmacs、デバッガ、Yacc互換パーサー、リンカーの実装から始まり、多くのUNIXユーティリティソフトウェアを実装した。GNUプロジェクトの始動させた動機に、利用者にソースコードの提供がなされなかっために問題を解決できなかった厄介なプリンターの存在があった。
1985年、GNUプロジェクトの目的の概要と自由ソフトウェアの重要性を説いた「GNU宣言」を発表した。GNUプロジェクトの可能性とGNU宣言は、シンボリックス社が更新したMITのソースコードをベースにしたLISPマシンをMITが利用するケースにおいて、リチャード・ストールマンとシンボリックス社は合意することはできなかった。
1986年2月、リチャード・ストールマンは自由ソフトウェアの在り方を定義した「自由ソフトウェアの定義」を発表した。1986年の自由ソフトウェアの定義は2つの要点からなり、自由ソフトウェアの自由の意義と優位性についてシンプルな言葉で表した。自由ソフトウェアの定義は時代にあわせて逐次更新され、1996年に3条項からなる自由の定義とそれを補足する文章となり、1999年に第0条を追加した4条項となった。
GNUプロジェクトのライセンスは、1988年2月11日にコピーレフトの概念が初めてライセンスとして実装されたGNU EmacsのためのEmacs General Public Licenseに始まり、プロジェクト初期はソフトウェア個々にライセンスがリリースされていた。その後、1989年2月にコピーレフトを含めGNU General Public License (GNU GPL) が汎用ライセンスとしてリリースされた。続いて、1991年にGNU General Public License バージョン2、GNU Library General Public License バージョン2がリリースされた。同年、GNU Library General Public Licenseは位置付けを明確にするためGNU Lesser General Public License (GNU LGPL) に名称変更して微修正と共にバージョン2.1がリリースされた。
1989年、幾人かのGNUプロジェクトの開発者はシグナスソリューションズに異動した。GNUプロジェクトは、カーネルの開発は引き続き遅れていたが、1991年にカーネルを除いたほぼ全てのコンポーネントが完成し、Linuxカーネルと結合することで、ほぼ全てのソフトウェアが自由ソフトウェアでできたOSが完成した。
フリーソフトウェア財団の設立 リチャード・ストールマンは自由ソフトウェアの更なる促進を図るため、1985年にフリーソフトウェア財団を設立した。フリーソフトウェア財団は自由ソフトウェアを推進し、GNUプロジェクトを支援する非営利団体である。
1990年代中ほどまでのフリーソフトウェア財団はGNUプロジェクトの開発者の支援(雇用)が主な事業だった。1990年代中ほど以降は自由ソフトウェアの利用者の自由を啓蒙し、「自由」であるソフトウェアやファイルフォーマット、在り方を広める自由ソフトウェア運動を実施していった。また、GPL違反是正(特にコピーレフト違反是正)をソフトウェア開発者やソフトウェアベンダーに強く指導し、時にはライセンス違反の訴えを裁判で争った。
Unix系OSの成長
1980年代以降、AT&TのUNIXはクローズドソース、プロプライエタリソフトウェアとなったが、それまでに大学等で広く使われていたため、そのインタフェースをベースとしたOSがUnix系OSとして派生、誕生、成長していった。また、OSに加えて、Unix系OS上で動作するGUIアプリケーション、コンパイラやプログラミング言語も自由に利用できるソフトウェアとして開発、公開された。UNIX、DOS、Macintoshなどのプロプライエタリな環境を望まないユーザーにとって好ましいもので、ソフトウェアの利用者、開発者を拡大していった。
UNIX派生OS 1970年代末からカリフォルニア大学バークレー校でAT&TのUNIXのソースコードをベースとしたBerkeley Software Distribution (BSD) が開発された。1977年からビル・ジョイはVersion 6 Unixのアドオンの形でBSDの原形を開発し、1978年3月9日に1BSDをリリースした。この時の主なコンポーネントはPascalコンパイラとエディタであった。1979年5月にソフトウェアの更新版とviエディタ、C Shellを含む2BSDをリリースした。1979年にVAXの仮想記憶機能を利用し、UNIX/32V由来のユーティリティをまとめた完全なOSとして3BSDをリリースした。 3BSDに注目した国防高等研究計画局 (DARPA) は、バークレーの Computer Systems Research Group (CSRG) に資金提供することを決め、1980年にCSRGは3BSDに様々な改良を加えた4BSDをリリースした。その後、1980年代の間に4.xBSDが様々な修正、改良を加えリリースされた。
1980年代末、それまでのBSDの全バージョンでAT&TのプロプライエタリなUNIXのソースコードが含まれており、AT&Tのソフトウェアライセンスを必要としていたため、1989年6月にAT&Tのライセンスが不要なコードのみで構成されたNetworking Release 1 (Net/1) がリリースされた。Net/1リリース後、BSD開発者は、BSDのAT&Tとは無関係な部分をさらにNet/1と同じライセンスでリリースすることを提案し、1991年6月に自由に再配布可能なほぼ完全なOSであるNetworking Release 2(Net/2)をリリースした。Net/2はウィリアム・ジョリッツらによるフリーな386BSDプロジェクト(後にNetBSDとFreeBSDへ再派生)と (BSDi) のプロプライエタリなBSD/386プロジェクト(後にBSD/OSに改称)に派生した。1992年からの2年間、BSDiはSystem Vの著作権とUNIXの商標を所有するAT&TのUNIX Systems Laboratories (USL) との間でに見舞われ、訴訟が解決するまでNet/2の配布は差し止められて開発は停滞することとなった。
1980年代中ほどから1990年代序盤にかけて、以前はソースコードが共有されていたUNIXをベースとしたプロプライエタリなOSであるSCOのUnixWare、IBMのAIXなども開発されていた。UNIXの機能の権利の一部はSCOグループが保有し、後のSCO・Linux論争の要因となった。
独立系Unix系OS 1980年代、UNIXがクローズドソースとなり自由に利用できるOS(カーネル)が存在しなくなったため、UNIXのソースコードを源流とせず、しかしながらUNIXのインタフェースと互換性のあるカーネルの開発が始まった。
アムステルダム自由大学の教授アンドリュー・タネンバウムは1987年にソースコードが非公開となったAT&TのUNIXの代わりの教育用OS「MINIX」を著書『Operating Systems: Design and Implementation』の中で例として開発した。機能上の新しさはないが、マイクロカーネル構造を採用するなど、モダンな洗練が行われていた。元々はIBM PCをターゲットとして開発されたが、その後アタリ、Amiga、Macintosh、SPARCをはじめ、日本においてはNECのPC-9800シリーズにも移植された。
GNUプロジェクトは開発初期はMachをベースにマイクロカーネルを開発することを検討していたが、1987年にTRIXをベースにすることを検討し、最終的には1990年にBSD4.4をベースにしたGNU Hurdの開発を決定した。しかし、開発は遅々として進まず、リチャード・ストールマンは2010年にGNU Hurdは完成していないが重要なプロジェクトではなくなったと発言している。
Linuxの誕生と派生
リーナス・トーバルズによる「Linux」は1991年4月より開発が始まった。リーナス・トーバルズの当初の目的は、80386プロセッサを搭載した新しいパーソナルコンピュータ (PC) の機能を使いたいがための、自身が使用していたハードウェアとOSに依存しないプログラムの作成だった。リーナス・トーバルズは著書『Just for Fun』で、MINIXやGNU製カーネルが十分な機能を備えて完成していればカーネルを開発することはなかったが、それが必要だったからLinuxカーネルを開発したと述べている。1991年8月25日にUsenetのニュースグループ「comp.os.minix」へAm386、Am486互換機で動作するフリーなOSを作成したと報告し、利用者からのフィードバックを求めた。
リーナス・トーバルズはこのシステムをfree・freak・x (Unix) の混成語「Freax」として呼んでいた。Linus・Unixの混成語「Linux」という名前も考えていたが、最初はそれをあまりにも異例のものとして却下していた。1991年に、開発者支援のためのFTPサーバにファイルをアップロードする際、当時のFTPサーバ管理ボランティアのはFreaxは適当な名称ではないと考え、リーナス・トーバルズに相談なくLinuxの名称でファイルをアップロードした。ただし、後からリーナス・トーバルズは承諾している。1992年にモノリシックカーネルを採用したLinux開発者のリーナス・トーバルズとマイクロカーネルを採用したMINIX開発者のアンドリュー・タネンバウムは、ニュースグループ「comp.os.minix」でカーネルの在り方やその他多岐に渡り議論をしたAndrew Tanenbaum, Linus Torvalds and others: Linux is obsolete Usenet post, 29 January 1992。カーネルの在り方は一長一短であり良し悪しを明確に決着することなく、激論を交わしたものの両者は良好な関係でいる。
初期のLinuxは商用利用を禁じたプロプライエタリなライセンスであったが、1992年1月5日にリリースしたバージョン0.12のリリースノートでGPLへのライセンス変更の意向が宣言され、1992年12月にリリースしたバージョン0.99でGPLに変更されたz-archive of Linux version 0.99, kernel.org, December 1992。