FreeBSD
FreeBSD（フリービーエスディー）は、Unix系のオープンソースのオペレーティングシステム (OS) である。SCOによるSingle UNIX Specificationの認証は受けていないものの、NetBSDやOpenBSDと同じく、AT&TのUNIXから派生したBSDの子孫に当たる。サーバ用途を志向しており、処理速度よりも安定動作に重きを置いている。近代的なオープンソースのBSDとしてはNetBSDに次いで古く、1993年12月に最初の公式リリースである1.0が公開された。
系譜的にはUNIX本流ともいえるOSであるが、利用状況という意味では、デスクトップOSのシェアは0.01%以下で計測不能とWindowsに惨敗、サーバOSのシェアは1%程度でLinuxに惨敗するなど、泡沫ともいえる状況にあり、辛酸をなめている。このことは、開発者の質・量両面での低下につながっており、多数のセキュリティ上の問題点が放置されていることが指摘され「死につつあるOS」と呼ばれるなど、その存在意義や将来的継続性にすら疑問を呈される事態に陥っている。
FreeBSDの開発者達は、Webサイトにて安定していて高速・高性能でなおかつ安全、先進的な機能や多くのセキュリティ機能を提供していると語っていた。FreeBSD jail等の機能もレンタルサーバ等に適したシステムであるといえる。Linuxと異なりカーネルとユーザランドを含めて一つのOSであり、そしてOS側にGPLのものを含まないようにしていることも特徴の一つである。そして、堅牢性の高いBSDカーネルの設計が最大の特徴として認知されている。1991年、ウィリアム・ジョリッツによって4.3BSD Net/2をベースとしたOS、386BSDが発表された。
しかし公開後の開発が停滞したため、386BSDのユーザらは「Unofficial 386BSD Patchkit」を製作し、バグの対応などを行っていた。その後386BSDは、ほぼ1年にわたって放っておかれ、やがてパッチキットの量は膨大になってしまった。
そこで、386BSDのユーザらは「386BSDの開発の手助けのため」、パッチキットを適用した状態の「クリーンナップ」スナップショットの製作プロジェクトを進めた。しかし、Jolitzがこのプロジェクトの受け入れを拒否したことにより、プロジェクトは路線変更を余儀なくされた。結局、パッチキットの最後の取りまとめ役であったNate Williams、Rod Grimes、ジョーダン・ハバードらは、自分達で新しいOSの開発を行う事を決意し、1993年にFreeBSDプロジェクトをスタートさせた。「FreeBSD」という名前はDavid Greenmanによって考案されたものである。1993年6月19日、ジョーダン・ハバード、Rod GrimesおよびDavid Greenmanは、FreeBSDの開発開始をアナウンスした。
FreeBSDは4.3BSD Net/2をベースに開発が行われ、1993年12月には最初のリリースであるFreeBSD 1.0が、そして、1994年5月にはFreeBSD 1.1がリリースされた。
しかしこの後、当時UNIXのソースコードの権利をもっていたノベルとカリフォルニア大学バークレー校との長期に渡った訴訟の和解が成立し、4.3BSD Net/2にUNIXのライセンスに抵触する部分があることが正式に認められた。そのため、FreeBSDはそのまま開発を続けることが不可能となり、1994年7月にリリースされたFreeBSD 1.1.5.1を最後に4.3BSD Net/2をベースにした開発を停止した。
FreeBSDプロジェクトは、UNIXのライセンスに抵触していないことが公式に宣言された4.4BSD-Liteを基にしてFreeBSDの開発を再開した。再開後の最初のリリースであるFreeBSD 2.0は1994年11月に発表され、その後、FreeBSDは順調に発展を続けている。
なお、X Window Systemについては、当初XFree86を標準として採用していたが、FreeBSD 5.3からはX.Orgを標準とするように移行した。
FreeBSDは系譜的にはUNIX本流ともいえるOSであるにもかかわらず、利用状況は芳しくない。デスクトップOSにおけるシェアは0.01%以下で計測不能、サーバOSにおけるシェアは1%程度と、泡沫ともいえる状況にあり、苦汁をなめている。このような関心の低さは、ボランティアで開発に加わる開発者の質・量両面での低下を招いており、セキュリティ上の問題点が修繕されないままで多数放置されていることが報告されている。
FreeBSDのパッケージ管理システムは、ビルド済みパッケージをインストールするpackage, pkg(8)とソースをビルドするスタイルのportsがある。OS以外でpackageのインストールしたものは原則として「/usr/local」以下と「/var/db/pkg」以下に入る。つまりOS部分とほぼ分離されているので明示的な管理やバックアップもしやすいが
基本的にライブラリを共用する発想で構成されているのでWindows等でアプリごとにライブラリを用意することに慣れている人には使い辛いと感じることもある。7系から8系等、メジャーバージョンアップの際には使用ライブラリの互換性がなくなるが一部（usbを使うものなど）を除いて「compat7x」を入れることにより動作する。
packageはビルド済みのバイナリをシステムにインストールする仕組みでportsからインストールされたものも含めてバージョンやファイル構成が記録される。
サーバは本家の他日本など各地にある。自分でもpackageを作る事が出来るので複数台同一環境のPCを管理している場合にも使うことができる。
単独のpackageの個別インストールもできるが、「pkg_add -r」コマンドで上位にあるpackageを指定することにより依存packageもインストールされる。しかしpackageとPCのPerl等依存ツールやライブラリのバージョンが異なる場合、手動で修正が必要である等の問題があったり、RELEASE版では最新のpackageを取得するために環境変数「PACKAGESITE」を指定しなくてはいけない他、Web上の情報では「FreeBSDはビルドするのが当たり前」という風潮がかつては多かったため新規インストール以外にはあまり使われないように見受けられる。基本的にはports更新後一週間後程度にはstable版に最新のpackageがアップロードされているようだ。packageのバージョンアップ用のサポートツールとしてpkg_replace等がある。
portsは半自動的にソースコードからpackageのビルド及びインストールを行う方法である。特殊なパッチを当てる当てないの選択肢ダイアログ等が表示される場合もあるが、基本的にはソースコードのダウンロードからコンパイル、package生成、packageインストールまでの一連の流れを自動的に行うことができる。
ただ、実際にはシェルスクリプトだけのものやフォント、NVIDIA等メーカー品バイナリやJava等ビルド不要のものも多い。packageに比べると作業領域を明示的に指定できる長所がある。
基本的には「/usr/ports」に置かれる。portsの最新情報への更新は「portsnap」というコマンドを用いる事で最小限の更新だけで済ませられる（あるいはcsupないしcvsupを用いてportsツリーを更新することも可能。csup/cvsupについては次項参照のこと）。portsに登録されているソフトウェアが新バージョンへ更新した時に一時的にビルドできなくなるなどの問題が発生することもあるので、Perl等の重要なportsの更新時には一定期間(1週間程度)様子を見る必要がある。
portsに登録されているソフトウェアは2013年1月3日の時点で24,000を超えるが日々増加している。そのメンテナンス状況はメンテナと呼ばれる管理者の能力や意欲に左右される面がある。そのため、常時メンテナンスされて高い品質を維持しているportsも多いが、逆にソースファイルのサイトが閉じていたり、ビルドできなかったりあるいは古いバージョンのまま放置されていたりするものがあるという問題点も指摘されている。
日本人メンテナの活動により、日本語環境に関するportsは他言語に比べ比較的良く整備されており、特に日本語版LaTeXは完全な環境が容易かつ安定してインストールできることは特徴的である。
無駄なportsを増やさないために「/etc/portsnap.conf」で使わないカテゴリを指定できるがあくまでディレクトリ単位でのカテゴリ指定しかできない。安直にメタポートと呼ばれるものをビルドしようとすると依存するものを全てビルドしてしまうのでファイル構成を把握したらベーシックなライブラリから更新するとストレージ使用効率が良い。
portsからインストールしたものは、たとえpackage生成を行わないように指定したとしても、packageからインストールしたものと同等に扱われる。サポートツールとしてpkg_replaceの他portmasterとruby依存のportupgrade等が使われる。pkg_addに起因するportの依存記述には問題がありしばしインストールの妨げになることがある。
pkg(8)は、FreeBSD用の次世代のパッケージ管理システム pkgng として開発されてきたものである。従来のバイナリベースパッケージ管理システムである package よりも、手軽なバイナリアップデート、リモートパッケージ検索、依存関係の管理等の機能が強化されている。pkgは、これまでのものとはパッケージのデータベースの管理方法が異なるため現時点ではFreeBSD 9.x までのバージョンでは、pkg(8)の使用がデフォルト設定にはなっておらず、手動で pkg 管理システムに移行しなければならない。FreeBSD 10.0Rからデフォルトのパッケージ管理システムとして採用されている。
FreeBSDでは安定版であるFreeBSD-RELEASEの他FreeBSD-CURRENTとFreeBSD-STABLEの2つの開発ブランチが存在する。
CURRENTはまさに最新のFreeBSDのバージョンの開発ブランチで、作業進行中のソースがならび、開発途上のソフトウェアや過渡的な機能などが含まれている。しかし、これがリリース版に採用されるとは限らない。
STABLEは主に開発が終わったCURRENT開発ブランチに対して、分枝されてリリース版(安定版)を作成する開発ブランチである。こちらに移ってからは全ての修正はこの開発ブランチで行われる。1つのバージョン系列の開発が終わるとこのブランチからも外れ、以後一定期間は必要に応じてセキュリティアップデート等の修正が行われる。修正はパッチをあてることで行われ、8.1-RELEASE-p2などと最後尾に修正が行われた回数（pはpatch levelのこと）が示される。
なお、いったんSTABLEとして扱われると、1つ上の開発バージョンがCURRENTとして扱われることになる。例外として、FreeBSD 5系では多くの改善や機能追加が行われたために、5.0〜5.2の間はリリース版が出ているのにも関わらずSTABLEとして扱われない状態が続いていたが、6.0がリリースされてからは元の体制に戻った。
FreeBSDのSTABLE版とCURRENT版は、subversionを使ってソースコードレベルでOSのバージョン管理を行う。
ソースコードの更新にはかつては「csup」というコマンドが用いられたが（csupはCVSupの主要な機能をC言語で再実装したものである。これは、CVSupがプログラム言語として一般的でないModula-3で実装されており、これが理由でcsupはベースシステムに含まれるがCVSupはportsから導入する）、cvsupによる配布は2013年2月一杯で終了し、以降はsubversionが用いられている。
codice_1以下に展開されたソースコードをmakeすることにより、メジャーバージョンの更新も含めてOS全体のバージョンアップができる。
バイナリで配布されたRELEASE版に対しては「freebsd-update」というコマンドが用いられ定期的なセキュリティパッチ等のバージョンアップができる。GENERICカーネルであればカーネルのアップデートも可能である。通常はセキュリティパッチが入るとカーネルの名称に「p2」等とバージョンがつくがカーネル以外だけの更新の場合カーネル名称は変わらない。
FreeBSDのSTABLE版及びRELEASE版については、リリース後一定期間、セキュリティに関する問題が発生した場合に必要なアドバイザリ及びアップデートがリリースされる保証期間が設けられる。保証期間については以下の3つの区分が存在する。なおCURRENT版についてはあくまで開発版という扱いのため、セキュリティアップデートやアドバイザリは提供されない。ただし実際には、各RELEASE版に対しNormal及びExtendedのどちらを選択するか、その時点でのRELEASE版のコード品質等を考慮して個別に定められることが多く、時には「古いRELEASEの方が新しいRELEASEよりも保証期間が長い」という逆転現象が起こることがある（例：8.1-RELEASEの保証期間が2012年7月末までなのに対し、8.2-RELEASEの保証期間は2012年2月末まで。また過去には7.1-RELEASEと7.2-RELEASEの間でも同様の逆転現象が発生した。ただし8.2-RELEASEの保守終了予定日は8.1-RELEASE同様2012年7月末まで延長されている）。このため、特にサーバ等で長期に運用する予定の機器では、保証期間の終了時期を踏まえたバージョン選択を行う必要がある。
現在、セキュリティアップデートなどがサポートされている安定リリース版、及び開発ブランチは以下の通りである。
「1.0-RELEASE」は、4.3BSD Net/2を基にして1993年11月に開発された。
4.3BSD Net/2にUNIXのライセンスに抵触する部分があるとして、1994年7月5日にリリースされた「1.1.5.1-RELEASE」を最後に4.3BSD Net/2を基にした開発を停止。
「2.0-RELEASE」はUNIXのライセンスに抵触していないことが公式に宣言された4.4BSD-Liteを基にして1994年11月22日に発表された。バージョン2の最終版の「2.2.8-RELEASE」は1998年11月29日に発表された。
「2.0-RELEASE」は、AT&T由来のUNIXソースコードの著作権者ノベルの法的請求権から(将来に渡って)公的に解放された最初のFreeBSDのバージョンである。また、インターネットサーバー拡大期の始まりにおいて、広く使われた最初のバージョンでもある。
「3.0-RELEASE」は1998年10月16日に発表された。バージョン3の最終版の「3.5-RELEASE」は2000年6月24日に発表された。
「3.0-RELEASE」はジャイアントロックを用いてSMPシステムをサポートできる最初のブランチである。「3.1-RELEASE」からはUSBをサポートし、「3.2-RELEASE」からギガビット・イーサネットカードをサポートした。
「4.0-RELEASE」は2000年3月13日に発表された。2005年1月25日に出た最終版の「4.11-RELEASE」は2007年1月31日までサポートされていた。
バージョン4は、その安定性を賞賛され、最初のインターネット・バブルの時期にプロバイダとホスティングサーバから好まれたオペレーティングシステムであり、Unix系では最も安定した高いパフォーマンスのオペレーティングシステムの一つと広く見なされている。バージョン4の新機能では、「4.1-RELEASE」より（後にNetBSDやOpenBSDのシステムの一部となる）kqueue(2)のシステムコールを導入した。
「5.0-RELEASE」は2003年1月14日にCURRENT(最新開発版)として発表された。バージョン5の最初の安定版のリリースは、2004年9月6日に発表された「5.3-RELEASE」である（「5.05-RELEASE」～「5.2.1-RELEASE」は「5-CURRENT」として一般ユーザの利用は勧められていなかった）。バージョン5の最終安定版は2006年5月25日に出た「5.5-RELEASE」であった。
バージョン5の最初のブランチとして登場した「5.0-RELEASE」は、先進的なマルチプロセッサとアプリケーションスレッディング、UltraSPARCとIA-64のプラットフォーム対応等のサポートといった注目度の高い機能を手広く先取りしていた。「6.0-RELEASE」は2005年11月4日にリリースされた。バージョン6の最終版の「6.4-RELEASE」は2008年11月11日にリリースされた。これらのバージョンは、SMPと先進的なIEEE 802.11の機能性の更なる開発の他に下記のようなものがある。
その他、プリエンプティブカーネル（タスクの置き換え）とハードウェアパフォーマンス測定ドライバ(HWPMC)のサポート等が挙げられる。
「7.0-RELEASE」は2008年2月27日にリリースされた。バージョン7の最終版の「7.4-RELEASE」は2011年2月24日にリリースされた。
新機能は下記の通り多彩に渡る。
ベンチマークは、LinuxだけでなくFreeBSDの以前のバージョンに比べても著しい速度の向上を示している。「4.0-RELEASE」より対応していたDEC Alphaアーキテクチャへの対応は、「7.0-RELEASE」より中止となった。
「8.0-RELEASE」は2009年11月25日にリリースされた。2009年8月にトランクからバージョン8はブランチした。バージョン8の最新版は「8.4-RELEASE」で2013年6月7日にリリースされた。
主な機能は、SuperPages対応、Xenの「ドメインU (domU)」への対応、ネットワークスタックの仮想化、スタックスマッシュプロテクション、新しいTTYレイヤへの置き換え、大幅に更新され、改善されたZFSへの対応、「8.2-RELEASE」で追加されたUSB3.0とそのホストコントローラの規格であるxHCIへの対応、IGMPv3を含むマルチキャストのアップデート、(「8.2-RELEASE」で追加された)インテルCPU対応のNFSv4とAESのアクセラレータを導入しているNFSのクライアント・サーバの書き換えである。
改良されたデバイスのmmap（）の拡張機能によって、x86-64プラットフォーム用の64ビットNVIDIAディスプレイドライバが実装可能となった。プラグイン対応の輻輳制御フレームワークと、Linuxのエミュレーション下で実行されるアプリケーションのシステム情報を取得するDTraceを使用可能とする機能は「8.3-RELEASE」で追加された。
「9.0-RELEASE」は2012年1月12日にリリースされた。「9.1-RELEASE」は2012年12月31日にリリースされた。「9.2-RELEASE」は2013年9月30日にリリースされた。「9.3-RELEASE」は2014年7月16日にリリースされた。
リリースの主な機能は、新しいインストーラ bsdinstall(8) の追加、UFSのFFS(Fast Filesystem)がsoftupdatesジャーナリングに対応、ZFSがバージョン28に更新、ユーザレベルDTraceの導入、NFSサブシステムが、NFSv3およびNFSv2に加えてNFSv4に対応した新しい実装に更新、ファイル保護機能Capsicumをカーネルでサポート、FreeBSD/powerpcでPlayStation 3をサポートなどである。
カーネルとベースシステムはClangを使用して構築することができるようになったが、「9.0-RELEASE」はまだデフォルトでGCC4.2を使用している。「10.0-RELEASE」は2014年1月20日にリリースされた。「10.1-RELEASE」は2014年11月14日にリリースされた。「10.2-RELEASE」は2015年8月13日にリリースされた。VirtIO (準仮想化)ドライバがKVMに対応、FUSEの実装などである。
「10.0-RELEASE」に実装されたBHyVe (BSDハイパーバイザ)は、まだ実験的なハイパーバイザであるが、仮想マシン内でゲストOSを稼働できる。仮想CPU数・ゲストメモリ・IOコネクティビティなどなどもコマンドラインパラメータで指定できる。
「10.3-RELEASE」より、UEFIシステムにおけるroot-on-ZFSインストールに対応した。
「11.0-RELEASE」は2016年10月10日にリリースされた。
FreeBSD 11は新しいサポートモデルの下で、少なくとも2021年9月30日までの5年間の長期サポートが行われるとしている。
FreeBSD 11.0-RELEASEのリリースエンジニアリングの終盤でOpenSSLの脆弱性が公開されたため、FreeBSDリリースエンジニアリングチームはこれを修正した「FreeBSD 11.0-RELEASE-p1」を新しくビルドして公開した。今回のリリース対象はこのパッチレベル1が対象となっている。アップグレードする際に「FreeBSD 11.0-RELEASE」がインストールされている場合、早期に「FreeBSD 11.0-RELEASE-p1」以降へアップグレードすることが望まれるとしている。
FreeBSD 11.1-RELEASEは予定通り2017年7月26日リリースされた。
「12.0-RELEASE」は2018年12月11日にリリースされた。
安定版ブランチ単位で5年間のサポートを提供することについてビジネスモデルを再評価する必要が出てきたとして、2019年3月31日まで新しいサポートモデルに関して意見を募るとしている。
掲載しているのはRELEASEのアナウンスがされたバージョンのみ。
※2006年4月1日には、エイプリルフールのネタとしてFreeBSD 2.2.9-RELEASEが発表されている。FreeBSDでは、2018年現在は対応アーキテクチャを「Tier 1～4」までの4段階で管理している。
最新のRELEASE版について、公式サイトにてインストールイメージが配布されているアーキテクチャ。いわゆる「フルサポートアーキテクチャ」であり、ドキュメントなどもまずはこの層に属するアーキテクチャ向けに整備される。開発・サポートプロジェクトが継続しているアーキテクチャ。公式サイトでインストールイメージも配布されているが、熟成度が低いとされて部分的なサポートのみとなっている。試験的に開発が行われているアーキテクチャ。開発状況によっては予告なくFreeBSDのソースツリーから外される可能性がある。完全にサポート外のアーキテクチャ。。FreeSBIEプロジェクトは、FreeBSDベースのLive CD環境を提供している。
FreeNASプロジェクトは、FreeBSDベースの、Webベースでの操作を可能としたNASファイルサーバ用OS環境を提供している。
NAS4Freeプロジェクトは、FreeNASプロジェクトから分離したNASファイルサーバ用OS環境プロジェクトである。
TrueOS(旧PC-BSD)プロジェクトは、FreeBSDをデスクトップ・サーバと両方に対応したディストリビューションを提供している。
HardenedBSDは、セキュリティ対策を拡充するため2014年にフォークしたディストリビューション。