わたしの名はフレイ 作家・デザイナー見習い
神々とともに生きる詩人 一等星シリウスの導きを信じて

BSD

カルフォルニア大学バークレー校によるBSD

BSDはBerkeley Software Distribution の略語で、1977-1995年に、カリフォルニア大学バークレー校のCSRGによって開発・配布されたソフトウェア群およびUNIX OS。

現在は、4.4BSD-Lite Release 2を基にしたFreeBSDNetBSDOpenBSDなどのBSDの子孫が開発・利用されている。

BSDの子孫のことをその名前から*BSDと呼ぶ。

Intel 386で動くBSDが長い間提供されなかったため、BSDIntel+IBM PC/AT互換機で使うことは長らく出来なかった。パソコンとネットワークなどの対応状況も要因の一部ではあるが、GNUというプロジェクトを生み出すきっかけになり、同時にGNU Hurdというマイクロカーネルがなかなか完成しなかったことから、Linuxカーネルの歴史は始まった。

大学やサーバの標準

特に、昔の工業大学などでは、大学の研究室などのOSはFreeBSDが使われていることが多かった。Linuxなどと機能的に遜色が無く、フリーなライセンスである、そして伝統的に良く使われてきたBSDの子孫であるというFreeBSDの特徴は、大学でUNIXを教えたり計算業務を行ったりするなどの用途にうってつけである。

また、BSDの「ネットワークに強いOS」という特徴は、Linuxなどが普及した今でも衰えていない。本当にハイエンドでたくさんの処理が必要なサーバーでは、LinuxよりもFreeBSDを使うこともある。たとえば、巨大掲示板2ちゃんねるのサーバーはFreeBSDで動いている。他にも、商用の組み込みシステムなどでは、BSDライセンスというソースコード公開の義務のないFreeBSDは良く用いられており、プレイステーションのOSにもFreeBSDが使われている。

BSDは「世界と関係のない」日本のシステム管理者にも人気で、「Linuxと機能的に遜色がないのに、なぜ*BSDは普及しないのか」と良く論議に挙がる。その理由は多くの場合、Red Hatのような強力な企業のスポンサーが居ないからであるとされる。また、GNUのような声高にフリーを宣言する活動家の集団も居ない。だが本当に、FreeBSDのネットワークや低レベル機能(ストレージなど)は、今でもLinuxより品質が高いことがある。だがLinuxと敵対関係にあるわけではなく、最近Linux開発者にOpenBSDが好きな人間が多い(特にsystemdが嫌いなど)ように、両者は協力し、高品質でフリーなOSのさらなる品質改善に努めている。

後日注記:特に、FreeBSDUNIXシステムとしてとても完成されている。コマンドラインシェルもきちんとtcshが動き、コマンドプログラムやデーモンも一通りそろっていて、大学でTeXgnuplotを教えるのにうってつけである。ネットワークシステムも構築しやすく、DuckDuckGoのようにIT企業のインフラにも多く導入されている。

Linuxと比べると、効率よりも安定している

LinuxFreeBSDを比べると、まず挙がるのは、「安定性」です。

FreeBSDは、Linuxのようにたくさんの機能をつめこみ、効率やスループレットを上げる、ということよりも、信頼性や安定性が高く、「本当に安定した正しい製品が必要な場合」に最適です。

Linuxには、なんでもかんでも機能がある代わり、システム全体のサイズが巨大になり、安定性や信頼性が欠けています。こうした場合に、FreeBSDは良い選択肢となります。

FreeBSDには、他のOSに未だ欠けている、先進的なネットワークやストレージの機能があります。ZFSも使えますし、WindowsTCP/IPの通信機能のコードはFreeBSDを基にしています。よって、ネットワークやストレージで、商用製品並みの「正しい基盤ソフトウェア」が必要であれば、FreeBSDを採用すると良いでしょう。BSDライセンスを採用しているほか、最近はGCCからClang/LLVMに移行したため、商用製品としてコードを使いたい場合に、派生ソフトウェアにGPLを継承しなくても良い、というライセンスは、商用製品の一部として組み込む場合に優れています。

その一方で、System V系UNIXではなくBSD系のUNIXでは、BSD系ならではの独自仕様がシステム構築の課題となります。シェルにCシェル系のtcshを使い、Portsやrc.confによるシステム管理をしなければなりません。Dockerはjailsにする必要がありますし、デフォルトのviはVimではなくnviです。UNIXコマンドのオプションや機能も違います。こうした場合にどれくらい対応できるUNIXエンジニアが居るかどうか、が課題となるでしょう。

後日注記:FreeBSDの強みとしてよく言われるのが、「たくさんのタスクを同時に効率的に処理できる」ということ。どんなにネットワーク負荷が高くなっても、FreeBSDは壊れない。きちんと安定して、多数のタスクをさばくことができる。

FreeBSDの特徴

FreeBSDの特徴は、以下のようなものがある。

  • カーネルが堅牢
    • どれだけたくさんのタスクがあっても、不安定になることなく安定して動き続ける。
    • サーバOSとしてはLinuxの古くからの宿敵・ライバル。
  • ZFS
    • Sunが開発したCDDLライセンスの信頼性の高いファイルシステムZFSを標準で採用。
    • Linuxではライセンスの問題から使うことができない。
  • BSDライセンス
  • カーネル+ユーザーランド
    • FreeBSDでは、カーネルだけではなく、ユーザーランドのコマンドも同時に提供している。
    • アプリケーションのパッケージとしてはportsで対応。
    • きちんとOS一式すべてを提供しているため信頼性と利便性が高い。
  • インストール時点では最小限の環境
    • Ubuntuなどのように、インストール後に何でも使える環境にはなっていない。
    • 必要なソフトウェアを手動で自分自身で導入・設定・管理をする必要がある。
    • 逆に「UNIXのシステムを学ぶ」という点では優れている。
    • ユーザー必読の高品質なハンドブックなどもドキュメント化されており、勉強になる。
  • make worldできる
    • システム全体を完全にビルドし直すことができ、チューニングやカスタマイズが可能。
  • BSD系のシステム
    • BSD系のシステムの特徴として、シェルがCシェルであること、rc.confを使ったinit処理を行うことなどがある。

どちらかというと、Linuxがエンジニアやオタクだけではなく一般ユーザーまで大風呂敷を広げようとしているのに対し、「分かる人間だけに使ってほしい」という姿勢が見られる。一般ユーザー向けとしてはFuryBSD(PC-BSD・TrueOSに敬意を払うFreeBSDベースのデスクトップOS)、GhostBSD、MidnightBSDなどがあるが、むしろFreeBSDから自分の力でGUI環境を導入・設定した方が勉強になるだろう。

また、LinuxX.orgに代わるwaylandや、systemdなど、今までのUNIXの常識ややり方を積極的に変えようとするのに対し、*BSDの開発者はUNIX古来からの環境を守り続けているところがある。ただし、GCCに代わるClang/LLVMなどの採用は、「GNUコンポーネントの排除」という点で、BSDをよりBSDらしくさせている(GPLでライセンスされたコンポーネントをできるだけ含めない)。

またWindowsとの結びつきもあり、WindowsのWinsock2のベースはBSDTCP/IPスタックをTurbo Pascalで書き直したものである。

csh/tcsh

標準のシェルはBシェル系のBashではなく、Cシェル系のTcsh(あるいはcsh)である。これは、cshの作者であるビル・ジョイBSDの設立と深く関わっているためである。

LinuxmacOSで標準的なbashではないため、シェルスクリプトの記法などに相違点がある。csh由来の「使ってはならない記法」なども存在する。だが、BSDは長らくcshを標準にしてきたため、大学やUNIXエンジニアには「え、Cシェル使ってないの?」と言ってLinuxを嫌う方も居る。

独自の起動・終了の設計

SysV initを採用せず、独自の起動の仕組みを採用している。

rc.confを設定するBSDの起動処理の手法は、簡素で扱いやすい代わり、設定ファイルを書き間違えたり誤って消したりするとシステムが起動しなくなるという欠点を持っている。

portsとmake world

portsというパッケージ管理システムを使って、簡単にアプリケーションをビルド・インストール出来る。また、設定に基づいて全システムをmake worldでコンパイル出来る。

この仕組みは、LinuxではGentoo Linuxが良く似ている。

FreeBSDでは、ソースベースのパッケージ管理システムであるportsを使う。これは、makeを上手く活用したパッケージ管理システムで、ユーザーはmakeコマンドを使って簡単にパッケージをその場でビルドし、インストールできる。また、パッケージは常に最新に同期される。Gentoo Linux創始者のダニエル・ロビンズは、Gentoo Linuxを作る際にこの仕組みをLinuxに持ち帰ってPortageというソースベースのパッケージ管理システムを作った。

portsの設定は、Gentooと同様make.confに記載する。

jail

jailはOSレベルでの仮想化機構。Dockerのようなコンテナ型仮想化の始祖のようなもので、FreeBSDシステムを小さなサブのFreeBSDシステムにできる。

ZFS

Linuxではライセンス問題のおかげで使うことの出来ない、次世代のファイルシステムZFSを使うことが出来る。

NetBSDの特徴

NetBSDの特徴として、以下のようなものがある。

移植性の高いコードを書くことは、OSの設計を綺麗にする

NetBSDでは、とにかくたくさんのPortに対応している(NetBSDの場合のPortsはCPUの対応アーキテクチャのことで、FreeBSDとは意味が異なる。"port"という言葉はUNIX界で乱用されまくっているので注意すること)。特定のマシンや環境に依存しない移植性の高いコードを書くことは、コードやOSの設計を綺麗にする。NetBSDのコードは美しい。

Of course it runs NetBSD.

NetBSDの開発者は、NetBSDが動きそうなコンピュータ・ハードウェアがあれば、すぐに移植する。これは、「NetBSDが動かないコンピュータなど存在しない」ということを表している。もっと言えば、「NetBSDが動かないコンピュータなど、コンピュータにあらず」といった感じである。

ホームページでも、"PowerPC, Alpha, SPARC, MIPS, SH3, ARM, amd64, i386, m68k, VAX: Of course it runs NetBSD."などと言われている。

後日注記:実際のところ、ここに羅列したよりも多く、NetBSDは58以上のアーキテクチャに対応している。これはOSとしてはありえない数である。また、同じプログラムをこれだけのアーキテクチャで基本的に編集なしで動かすことができる。同時にオープンソースであるため、組み込み開発者にはとても魅力的である。カーネルだけではなくlibcやユーザーランドも開発している。

pkgsrc

ちなみにNetBSDにもFreeBSDPortsと同じソースベースのパッケージ管理システムはあるが、これはpkgsrcと呼ばれる。

OpenBSD

OpenBSDは、*BSDの中ではテオ・デ・ラート氏(Theo de Raadt)が率いる*BSDとして有名で、セキュリティに力を入れていることで知られる。

OpenBSDは、「正しい思想」と「先制的なセキュリティ」で知られる。BSDライセンスを「正しいOSのフリーなライセンス」とし、ライセンスに妥協しない。また、セキュリティホールが絶対に生まれないように、徹底的にコードを検査して、書き直している。そのため、デフォルトの状態でのリモートセキュリティホールは、現在まで2件しか発生していない。

LibreSSL(OpenSSL), OpenSSHなど

OpenBSDはLibreSSL(昔はOpenSSLだった)やOpenSSHなど、さまざまなセキュリティ関係のプロジェクトを主導している。

また、OpenBSDの本拠地は暗号の輸出制限のないカナダに置かれている。

バグが無い

OpenBSDには、とにかくバグがない。バグはセキュリティホールの一番の近道であるため、バグができるだけないように、何度も何度も入念にコードを書き直している。バグのないコードを書く、ということは、正しいコードを書く、ということである。よって、OpenBSDは「最も正しいコード」である。

ただし、これはカーネルや標準のコマンドや初期状態で設定されているプログラムに限る。ApacheX11のようなものは初期状態では入っておらず、自分でインストールして設定しなければならない。だが、これは逆に、「ユーザーが自分のシステムをきちんと把握する」という意味で優れている。標準で動くサービスも最低限しかなく、Portも空いていない。Red Hatのような、何でも初心者向けに自動で設定してくれるGUIインストーラすら動かない。だが、このことは、「ユーザーが自分でした設定のことをきちんと把握して管理する」という意味では優れていると言える。

また、もともとNetBSDから派生したため移植性が優れているOpenBSDは、「新しいアーキテクチャへの移植によってコードが洗練されセキュリティの向上につながってきた」として、別の観点から移植性を重視している。

きっかけは子供のケンカ

OpenBSDNetBSDから分派したプロジェクトである。これを、「セキュリティの高い別のOSを作るために分岐した」と言われることが多いが、実際は子供のケンカである。NetBSDの開発者であったテオ・デ・ラート氏(Theo de Raadt)が、NetBSDのプロジェクト関係者とケンカし、追い出された結果、OpenBSDが始まった。

FreeBSDNetBSDは、悪魔のデーモン君がマスコットになっているが、これはUNIXシステムのデーモン(daemon)を表している。だが、OpenBSDではハリセンボンあるいはフグのような、面白い劇画調のキャラクターになっている。それだけではない。このフグは歌を歌う。OpenBSDの主要なリリースが行なわれた時は、フグの新曲が発表される。OpenBSDのリリースとともに新しい歌も「OpenBSDの一部として」リリースされるのである。

先制的なセキュリティ

僕は、先制的なセキュリティは最高の理想のひとつだと思う。Linuxも他のBSDも、機能や移植性や安定性は重視するものの、セキュリティホールが毎月・毎週のように見つかっている。

これでは、安心してOSを使うことすらできない。

OpenBSDでは、セキュリティホールが絶対に生まれないように、何度も入念にコードを書きなおす。今までOpenBSDで発生したデフォルトのセキュリティホールは二件だけである。

Bitrig

BitrigはOpenBSDからの派生OS。OpenBSDが保守的なのに比べて、LLVMをサポートするなど先進的なアーキテクチャで知られる。また、GNUのツールはTexinfoのみとなっている。