FreeBSD

歴史

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のパッケージ管理システムは、ビルド済みパッケージをインストールするpackage, pkg(8)とソースをビルドするスタイルのportsがある。OS以外でpackageのインストールしたものは原則として「/usr/local」以下と「/var/db/pkg」以下に入る。つまりOS部分とほぼ分離されているので明示的な管理やバックアップもしやすいが
基本的にライブラリを共用する発想で構成されているのでWindows等でアプリごとにライブラリを用意することに慣れている人には使い辛いと感じることもある。7系から8系等、メジャーバージョンアップの際には使用ライブラリの互換性がなくなるが一部（usbを使うものなど）を除いて「compat7x」を入れることにより動作する。

package

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

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

pkg(8)は、FreeBSD用の次世代のパッケージ管理システム pkgng として開発されてきたものである。従来のバイナリベースパッケージ管理システムである package よりも、手軽なバイナリアップデート、リモートパッケージ検索、依存関係の管理等の機能が強化されている。pkgは、これまでのものとはパッケージのデータベースの管理方法が異なるため現時点ではFreeBSD 9.x までのバージョンでは、pkg(8)の使用がデフォルト設定にはなっておらず、手動で pkg 管理システムに移行しなければならない。FreeBSD 10.0Rからデフォルトのパッケージ管理システムとして採用されている。

OSのバージョン

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が用いられている。
/usr/src以下に展開されたソースコードをmakeすることにより、メジャーバージョンの更新も含めてOS全体のバージョンアップができる。
バイナリで配布されたRELEASE版に対しては「freebsd-update」というコマンドが用いられ定期的なセキュリティパッチ等のバージョンアップができる。GENERICカーネルであればカーネルのアップデートも可能である。通常はセキュリティパッチが入るとカーネルの名称に「p2」等とバージョンがつくがカーネル以外だけの更新の場合カーネル名称は変わらない。

FreeBSD 1

「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を基にした開発を停止。

FreeBSD 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のバージョンである。また、インターネットサーバー拡大期の始まりにおいて、広く使われた最初のバージョンでもある。

FreeBSD 3

「3.0-RELEASE」は1998年10月16日に発表された。バージョン3の最終版の「3.5-RELEASE」は2000年6月24日に発表された。
「3.0-RELEASE」はジャイアントロックを用いてSMPシステムをサポートできる最初のブランチである。「3.1-RELEASE」からはUSBをサポートし、「3.2-RELEASE」からギガビット・イーサネットカードをサポートした。

FreeBSD 4

「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)のシステムコールを導入した。

FreeBSD 8

「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」で追加された。

FreeBSD 12

「12.0-RELEASE」は2018年12月11日にリリースされた。
安定版ブランチ単位で5年間のサポートを提供することについてビジネスモデルを再評価する必要が出てきたとして、2019年3月31日まで新しいサポートモデルに関して意見を募るとしている。

対応アーキテクチャ

FreeBSDでは、2018年現在は対応アーキテクチャを「Tier 1～4」までの4段階で管理している。

Tier 4

完全にサポート外のアーキテクチャ。。

FreeSBIEプロジェクト

FreeSBIEプロジェクトは、FreeBSDベースのLive CD環境を提供している。

FreeNASプロジェクト

FreeNASプロジェクトは、FreeBSDベースの、Webベースでの操作を可能としたNASファイルサーバ用OS環境を提供している。

XigmaNAS(旧 NAS4Free)プロジェクト

XigmaNASプロジェクトは、FreeNASプロジェクトから分離したNASファイルサーバ用OS環境プロジェクトである。

TrueOS（旧PC-BSD）プロジェクト

TrueOS(旧PC-BSD)プロジェクトは、FreeBSDをデスクトップ・サーバと両方に対応したディストリビューションを提供している。

HardendBSD プロジェクト

HardenedBSDは、セキュリティ対策を拡充するため2014年にフォークしたディストリビューション。