FreeBSD
FreeBSD(フリービーエスディー)は、フリーでオープンソースのUnix風のオペレーティングシステム (OS) である。Research UnixをベースにしたBerkeley Software Distributionに由来しており、最初のバージョンは1993年にリリースされた。2005年には、FreeBSDは最も人気のあるオープンソースのBSDオペレーティングシステムとなり、単純に寛容にライセンスされたBSDシステムのインストール数の4分の3以上を占めていた。
FreeBSDはLinuxと似ているが、 範囲とライセンスに2つの大きな違いがある。すなわち、Linuxはカーネルとデバイスドライバのみを提供し、システムソフトウェアをサードパーティーに頼っているのに対し、FreeBSDはカーネル 、 デバイスドライバ 、 ユーザーランドユーティリティ、およびドキュメントといった完全なシステムを維持している。FreeBSDのソースコードは通常、寛容なBSDライセンスでリリースされており、Linuxで使われているコピーレフトのGPLとは対照的である。
FreeBSDプロジェクトには、ベースディストリビューションに含まれるすべてのソフトウェアを監督するセキュリティチームが含まれている。広範囲のサードパーティー製アプリケーションを追加するには、 pkgパッケージ管理システムやFreeBSD Portsを使ったり、ソースコードをコンパイルしたりしてインストールすることができる。
系譜的にはUNIX本流ともいえるOSであり、過去にはHotmailなどのサーバとして利用されていた実績を有するが、現在では多くがLinuxに置き換えられている。現在の利用状況に関しては、デスクトップOSのシェアは0.01%以下で計測不能であり、サーバOSのシェアは0.2%程度と、泡沫ともいえる厳しい状況が続いている。一方でNetflix社のようにFreeBSDサーバを積極的に活用し、1台あたり400Gbpsという規模のコンテンツ配信を行っているところもある。
FreeBSDの開発者達は、Webサイトにて安定していて高速・高性能でなおかつ安全、先進的な機能や多くのセキュリティ機能を提供していると語っていた。FreeBSD jail等の機能もレンタルサーバ等に適したシステムであるといえる。Linuxと異なりカーネルとユーザランドを含めて一つのOSであり、そしてOS側にGPLのものを含まないようにしていることも特徴の一つである。そして、堅牢性の高いBSDカーネルの設計が最大の特徴として認知されている。
カーネルの高負荷耐性が高く、負荷が増大しても安定して動作する特徴がある。何千ものユーザーからの同時アクセスにもすばやく応答する。
初期状態でツールが一通り揃っているLinuxと違い、ガイダンスに沿って普通にインストールした状態では最小の構成に留められており、CUIからしか操作を行えない。デスクトップ環境を揃えるにはソフトウェアのインストールと設定の作業は必須である。GUI経由の設定よりも手作業で設定ファイルを直接書き換えて設定する事が多く、若干UNIX熟練者向きであるとされる。しかし、サーバ向けとして見た場合には、このシンプルなOSの構成は安定性に大きく寄与していると言える。
ソースコードからコンパイルし直すことで、OS全体を特定のCPUに対して最適化する事が可能で、最新のLinuxが動作しないパソコンでも最新版のFreeBSDを実用的な速度で動作させることが可能である。
ISAバスの拡張カード等、旧世代ハードウェアのドライバが豊富に含まれており、最新機種のみならず、数世代以上前のコンピュータでも動作させることが可能である。ただし、性能面での制約はより厳しいものとなる
デスクトップ環境としてみた場合、2D限定あるいは3D機能の一部はX.Org Serverのドライバが多くのビデオカードに対応しており、LuminaのほかXfce、GNOME、KDE等のデスクトップ環境を使うことができる。フリーのドライバを使う限りでは多少の対応状況の違いはあるもののLinuxとほぼ同様の環境となる。NVIDIAのビデオカードであればメーカーのドライバがサポートされていてOpenGLで完全な3Dハードウェアアクセラレーションが動作する。
カーネルレベルでのLinuxバイナリ互換機能(カーネル2.6.16相当)や、アプリケーションレベルではWineによるWindows互換環境等を用いてネイティブでないソフトウェアも使うことができる。
1.5GBのハードドライブ空き容量
AMD Athlon 64、AMD Opteron、マルチコアのIntel XeonおよびIntel Core 2以降のプロセッサ
デスクトップ環境をインストールする場合は2GB - 4GBのRAMが必要
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によって考案されたもので、386BSDの最初の単語 "Three" をもじって "Free" にした命名である。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はビルド済みのバイナリをシステムにインストールする仕組みで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」というコマンドを用いる事で最小限の更新だけで済ませられる(あるいは同portsツリーにあるdevel/gitないしnet/gitupを用いてportsツリーを更新することも可能)。portsに登録されているソフトウェアが新バージョンへ更新した時に一時的にビルドできなくなるなどの問題が発生することもあるので、Perl等の重要なportsの更新時には1週間程度様子を見る必要がある。
portsに登録されているソフトウェアは2022年1月14日の時点で46,811種が登録されており日々増加している。そのメンテナンス状況はメンテナと呼ばれる管理者の能力や意欲に左右される面がある。そのため、常時メンテナンスされて高い品質を維持している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のRELEASE版及びSTABLE版、CURRENT版は、Gitを使ってソースコードレベルでOSのバージョン管理を行う。
ソースコードの管理は、当初はConcurrent Versions Systemが採用され、更新にはかつては「csup」というコマンドが用いられたが(csupはCVSupの主要な機能をC言語で再実装したものである。これは、CVSupがプログラム言語として一般的でないModula-3で実装されており、これが理由でcsupはベースシステムに含まれるがCVSupはportsから導入する)、cvsupによる配布は2013年2月一杯で終了した。以降2020年12月まではApache Subversionが用いられていたが、現在ではGitへ移行している。
/usr/src以下に展開されたソースコードをmakeすることにより、メジャーバージョンの更新も含めてOS全体のバージョンアップができる。
バイナリで配布されたRELEASE版に対しては「freebsd-update」というコマンドが用いられ定期的なセキュリティパッチ等のバージョンアップができる。GENERICカーネルであればカーネルのアップデートも可能である。通常はセキュリティパッチが入るとカーネルの名称に「p2」等とバージョンがつくがカーネル以外だけの更新の場合カーネル名称は変わらない。
FreeBSDのSTABLE版及びRELEASE版については、リリース後一定期間、セキュリティに関する問題が発生した場合に必要なアドバイザリ及びアップデートがリリースされる保証期間が設けられる。保証期間については以下の3つの区分が存在する。CURRENT版は開発版の扱いのため、セキュリティアップデートやアドバイザリは提供されない。
Early Adopter
CURRENT版から分岐した最初のRELEASE版に適用されるもの。ただし2012年現在適用例はない。保証期間はリリース後6ヶ月。
通常のRELEASE版でSTABLE版から分岐したものに適用されるもの。保証期間はリリース後1年。
原則として、メジャーバージョンに対して2番目以降のRELEASE版及びそれに対応するSTABLE版に適用されるもの。保証期間はリリース後2年。
ただし実際には、各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月末まで延長されている。このため、特にサーバ等で長期に運用する予定の機器では、保証期間の終了時期を踏まえたバージョン選択を行う必要がある。
現在、セキュリティアップデートなどがサポートされている安定リリース版、及び開発ブランチは以下の通りである。
RELEASE(リリース版):
FreeBSD 13.2-RELEASE(2023年4月11日)
FreeBSD 12.4-RELEASE(2022年12月5日)
STABLE(安定開発版):FreeBSD 13-STABLE
CURRENT(最新開発版):N/A
「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のプラットフォーム対応等のサポートといった注目度の高い機能を手広く先取りしていた。
バージョン5の最大のアーキテクチャに関する開発は、SMPを改善させる為に低レベルのカーネルロック機構を大きく変更させた点であった。これによって、ジャイアントロックからカーネルの大部分のリソースが開放された。複数のプロセスを同時にカーネルモードで実行できるようになった。
KSE(カーネルスケジュールエンティティ、"Kernel Scheduled Entities")は、1 個のプロセスが複数のカーネルレベルスレッドを持てるようにするための機構である。原理的にKSEと同様に"M:N" モデルを用いる、NetBSDに実装されたScheduler activationsに似ている。KSEは「5.3-RELEASE」から安定版の実装が始まり、「7.0-RELEASE」で1個のカーネルスレッドを1個のユーザーランドスレッドが占有して利用する1:1スレッドの実装に置き換えられるまでFreeBSDのデフォルトのスレッド機構だった。
Poul-Henning Kampの貢献によって作られた、ディスクI/O要求を変換するモジュール型フレームワークであるGEOM を実装することで、I/O層のブロック(記録単位)をかなり変更できる。GEOMは、ミラーリング (gmirror) と暗号化 (GBDEとGELI) などの機能の多くを簡単に作成可能とする。このGEOMの開発はDARPAによる支援を受けて作成されている。
「6.0-RELEASE」は2005年11月4日にリリースされた。バージョン6の最終版の「6.4-RELEASE」は2008年11月11日にリリースされた。これらのバージョンは、SMPと先進的なIEEE 802.11の機能性の更なる開発の他に下記のようなものがある。
VFSのマルチプロセッサセーフ (MPSAFE) が有効となり、ジャイアントロックが最小限まで減らされた。
libthrライブラリのlibc_rのデフォルトスタックサイズ が増やされ、パフォーマンス性を高めた。32ビットプラットフォームでは、メインスレッドはデフォルトで2MBのスタックを受け取り他のスレッドではデフォルトで1MBのスタックを受け取る。(64ビットプラットフォームでのデフォルト スタック サイズ は、それぞれ4MBと2MBとなる。)
TrustedBSDプロジェクトによって作成されBSDライセンスの下でリリースされたセキュリティイベントの監査用のOpenBSMと呼ばれる基本セキュリティモジュール (BSM) 監査の実装をした。これはAppleのオープンソースのDarwinに見出したBSM実装に基づいたものである。
その他、プリエンプティブカーネル(タスクの置き換え)とハードウェアパフォーマンス測定ドライバ (HWPMC) のサポート等が挙げられる。
「7.0-RELEASE」は2008年2月27日にリリースされた。バージョン7の最終版の「7.4-RELEASE」は2011年2月24日にリリースされた。
新機能は下記の通り多彩に渡る。
サン・マイクロシステムズのZFSの実験的な移植
jemalloc、Firefox3に移植された並列計算に最適化されたmalloc
GCC4.2.1、X.Org 7.3、KDE 3.5.8、GNOME2.20.2、BIND9.4.2。
ベンチマークは、LinuxだけでなくFreeBSDの以前のバージョンに比べても著しい速度の向上を示している。
「5.1-RELEASE」から実験的に実装されてきたULEスケジューラは、「7.0-RELEASE」の新版でカーネルの構築時にスケジューラを調整できるようになるなど大きく改良されていたが、依然「4BSDスケジューラ」と呼ばれる従来のスケジューラが標準で実装されていた。「7.1-RELEASE」では、AMD64/i386版で、標準でULEスケジューラが採用された。
システム情報取得機能「DTrace」
「7.1-RELEASE」よりDTraceが実装されてシステムのダイナミックな監視やトラブルシューティングが可能になった。「プローブ (probe)」と呼ばれるデータ観測ポイントに、dtraceコマンドを含む「DTraceコンシューマ」という情報所得するプログラムを使って情報を取得する。dtraceコマンドは「D」と呼ばれるC言語に似たスクリプト言語で記述することによって実行ができる。これにより、プローブからのデータを取り出したり集計することができる。
「7.2-RELEASE」では、jailというOSレベルでの仮想化機構が実装された。1つのJail仮想環境に対して複数のIPv4/v6アドレスを割り当てたり、IPアドレスを割り当てないで運用したりすることが可能になった。
「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を使用している。
Orbis OS
PlayStation 4のゲーム機用OSとして、「9.0-RELEASE」からSCEがフォークした「Orbis OS」と呼ばれるFreeBSD派生OSが使用されている。