未来を形作るテクノロジーの深掘り記事。

FreeBSD:過小評価されているサーバーOS

NetflixやWhatsApp、PlayStationを支えるFreeBSD。何でもLinuxに頼りがちな開発者がこのBSD系OSに注目すべき理由を解説します。

背の高いサーバーラックの間で、誰にも気づかれず立っている三叉の矛を持つ小さな赤い漫画風デーモン

Netflixで映画を観るとき、その動画データはFreeBSDのサーバーから届いているかもしれません。WhatsAppでメッセージを送れば、何年もFreeBSD上で動いてきたインフラを経由しています。PlayStation 4と5のOSはFreeBSDをベースにしています。主要ISPの基幹を担うJuniper Networksのルーターも、改変版のFreeBSDで動いています。多くの開発者が一度も使ったことのないOSですが、重要なインフラには意外なほど深く入り込んでいるのです。

Linuxはサーバー市場を圧倒的に支配しているので、多くの開発者は「Linux」と「サーバーOS」をほぼ同じ意味で使っています。しかしFreeBSDは、ネットワーク性能、ストレージの信頼性、ライセンスのシンプルさがエコシステムの広さより重視される領域で、Linuxより上手く役割を果たしてきたニッチを占めています。自分で使うことがなくても、FreeBSDがなぜ生き残り、どこで強みを発揮するのかを理解しておくのは役に立ちます。

設計思想の違い

Linuxはカーネルです。「Linuxというオペレーティングシステム」の実体は、カーネルに、GNU coreutils、systemd、glibcなど独立した数十のプロジェクトによるユーザーランドを組み合わせ、ディストリビューションがパッケージしたものです。ディストリビューションごとに、どのコンポーネントを含めるか、どう設定するかが異なります。UbuntuもAlpineも同じ「Linux」ですが、使い心地はまるで別のOSのように感じられます。

FreeBSDはオペレーティングシステムそのものです。カーネル、ユーザーランドのユーティリティ、コンパイラ、ドキュメント、ベースライブラリは、ひとつのまとまったプロジェクトとして開発されています。ベースシステム全体がまとめてバージョン管理され、テストされ、リリースされます。FreeBSDは「数百のFreeBSDディストリビューション」ではなく、ひとつだけです。選択肢は少ないものの、一貫性は高くなります。ベースシステムは内部の互換性が保証され、ドキュメントはどのFreeBSDインストールにも当てはまります。

これは実務上の意味を持ちます。Linuxで「ネットワークはどう設定するの?」と聞かれたら、NetworkManagerを使っているのか、systemd-networkdか、netplanか、ifupdownか、それ以外かによって答えが変わります。FreeBSDなら、いつでも/etc/rc.confです。どのFreeBSDインストールでも同じです。やり方が一つしかないので、ドキュメントの信頼性が高いのです。

FreeBSDが強い領域

ネットワーク。FreeBSDのネットワークスタックは伝説的な存在です。Netflixは、単一サーバーからTLS暗号化された動画を100 Gbpsで配信できることを理由にFreeBSDを選びました。ネットワークスタックは成熟し、最適化されていて、高性能なネットワークハードウェアのドライバーサポートも優れています。netmap(ゼロコピーのパケットI/O)や、RACK/BBRのTCP輻輳制御といった機能もよく統合されています。

ZFS。FreeBSDは、Solaris以外で初めてZFSをファーストクラスのファイルシステムとして出荷したOSであり、今でも最も統合の進んだZFS環境です。ZFSはチェックサムによるデータ整合性、透過的な圧縮、スナップショット、レプリケーション、自己修復を提供します。これらを全部そろえたファイルシステムは他にありません。LinuxではZFSはライセンス上の問題を抱えるサードパーティ製カーネルモジュールとして存在します。FreeBSDでは標準で組み込まれ、公式にサポートされています。

# ZFS on FreeBSD — built-in, first-class support
# Create a mirrored pool
zpool create tank mirror /dev/da0 /dev/da1
# Create a dataset with compression
zfs create -o compression=lz4 tank/data
# Take a snapshot (instant, copy-on-write)
zfs snapshot tank/data@before-migration
# Send a snapshot to another machine (incremental replication)
zfs send -i tank/data@yesterday tank/data@today | \
ssh backup-server zfs recv backup/data
# Roll back if something goes wrong
zfs rollback tank/data@before-migration
# Check data integrity (detects and repairs bit rot)
zpool scrub tank

Jails。FreeBSDのjailシステムは、Linuxコンテナより10年以上前からあります(jails: 2000年、Docker: 2013年)。jailはファイルシステム、ネットワークスタック、プロセスの名前空間を分離する強力なOSレベルの仮想化を提供します。VMより軽量で、Linuxコンテナよりも分離性が高く、コンテナランタイムを必要とせず簡単に設定できます。

ライセンス。FreeBSDはBSDライセンスを採用しており、ソースコードの公開を義務づけずに商用利用できます。だからSonyはPlayStationのOSをオープンソースにせずにFreeBSDをベースにできましたし、Netflixも独自のネットワークスタックの最適化を公開せずに改変版FreeBSDを出荷できています。法律上やビジネス上の理由からGPLのコードを使えない企業は、この柔軟性のためにFreeBSDを選ぶことがよくあります。

Linuxが強い領域

FreeBSDの利点はLinuxの強みを打ち消すものではありません。FreeBSDの弱点についても正直に触れておく価値があります。

ハードウェアサポート。Linuxは、特にGPU、WiFiアダプター、Bluetooth、新しいノートPCなどのコンシューマー向けハードウェアで、はるかに優れたサポートを持っています。ドライバーのエコシステムの規模がFreeBSDとは桁違いです。主要ベンダーの最新サーバーハードウェアで動かすなら、FreeBSDのサポートは通常問題ありません。汎用機やデスクトップ向けハードウェアで動かすなら、ドライバーの欠落にぶつかるでしょう。

コンテナのエコシステム。Docker、Kubernetes、そしてクラウドネイティブのスタック全体はLinuxを前提にしています。FreeBSDにはjailがあり(分離性の点では優れているとも言えます)、しかしオーケストレーションツール、コンテナレジストリ、CI/CDパイプラインといったエコシステムはLinuxコンテナを前提にしています。FreeBSD上でKubernetesクラスターを動かすことは技術的には可能ですが、実際には非常に苦労します。

クラウドサポート。AWS、GCP、AzureはいずれもFreeBSDをVMイメージとして提供していますが、標準のツール、ドキュメント、マネージドサービスはLinuxを前提にしています。どのクラウド環境でも、一番摩擦の少ない道はLinuxです。

知名度と採用。FreeBSDの経験を持つ開発者を見つけるのは、Linux開発者を探すより難しいです。多くのコンピューターサイエンスの課程はLinuxを教えますし、多くのDevOpsツールもLinuxを前提にしています。FreeBSDを選ぶということは、チームを馴染みのないプラットフォームで教育し直すことを意味します。

Netflixの事例

NetflixのOpen Connect CDNは、FreeBSDの成功事例の代表格です。Netflixはピーク時に米国のインターネットトラフィックのおよそ3分の1を配信しており、それをISPのネットワーク内に直接設置したFreeBSDベースのアプライアンスから行っています。

NetflixがFreeBSDを選んだのには具体的な技術的理由があります。当時、ネットワークスタックはLinuxより高スループットのTLS処理に優れていましたし、ZFSは整合性保証付きの信頼できるローカルストレージを提供しました。さらにBSDライセンスにより、オープンソースの義務を負わずにOSをカスタマイズできました。とはいえ、改良の多くはFreeBSDに還元されています。それでも、ライセンスによってその選択肢が与えられていたのです。

Open Connectのサーバーは驚くべき効率を達成しています。FreeBSDベースのアプライアンス1台が、汎用ハードウェアで400 Gbpsの動画を配信できます。主な最適化、つまりTLSオフロード付きのsendfile()、kqueueベースのイベント処理、積極的なTCPチューニングは、FreeBSDで生まれたか、FreeBSDで先に磨かれた機能です。

FreeBSDを使うべきか?

ほとんどの開発者やプロジェクトにとっては、答えはノーです。Linuxのエコシステムの優位性は無視できないほど大きいからです。Docker、Kubernetes、ほとんどのCI/CDシステム、ほとんどのクラウドサービス、ほとんどの監視ツールは、Linuxで最も良く動きます。現実的な選択は、ツールのサポートが最も充実しているものです。

ただし、FreeBSDが本当に最良の選択になる具体的なユースケースもあります。

  • ネットワーク負荷の高いワークロード。CDN、プロキシ、ロードバランサー、あるいは大量のネットワークトラフィックを扱うシステムを構築するなら、FreeBSDのネットワークスタックは検討する価値があります。
  • ストレージサーバー。ZFSの機能(チェックサム、スナップショット、レプリケーション、圧縮)が重要なら、FreeBSDは最良のZFS環境を提供します。
  • 組み込み/アプライアンス製品。OSをベースにした製品を出荷し、GPLの義務を負いたくないなら、商用利用にはBSDライセンスの方がシンプルです。
  • Unixの基礎を学ぶ。FreeBSDのドキュメント(FreeBSD Handbook)は、これまで書かれたOSのドキュメントの中でも最良のものの一つです。Unixシステムがどう動くのかを基礎から理解したいなら、FreeBSDは優れた学習環境です。

FreeBSDがデスクトップ、コンテナ、クラウドでLinuxに取って代わることはないでしょう。ただ、その必要もありません。FreeBSDは、特定のワークロードにとって重要な技術的強みを持つ、まとまりがよく設計の確かなUnix OSとして、価値あるニッチを占めています。大半の開発者がLinux以外を考えない今の状況で、FreeBSDの存在を知り、その強みを理解していることは、より良いインフラの判断につながる視点になるはずです。