3 ポイント 投稿者 GN⁺ 2026-02-24 | 1件のコメント | WhatsAppで共有
  • サーバー配布とプロセス分離の問題の歴史をたどり、FreeBSD jails が現代のコンテナ概念を業界より10年早く実装していたことに光を当てる記事
  • 2000年にFreeBSD 4.0に導入された jails は chroot を拡張し、ファイルシステム・ネットワーク・プロセスの完全な分離をカーネルネイティブ機能として提供
  • Linuxは2008年のLXC、2013年のDockerを通じてコンテナに到達したが、その過程で namespace・cgroups・OCI など複雑な抽象化レイヤー が積み重なった
  • Dockerがうまく解決したのはアプリケーションのパッケージングと配布(shipping)の問題であり、jails は分離に優れる一方で ネイティブな配布標準が存在しない 点が弱み
  • 続編では jails ベースのインフラ構築、ZFSスナップショット、Ansibleによるプロビジョニングなど実運用の方法を扱う予定

初期のサーバー配布の問題

  • 数十年前、サーバーに何かを配布する標準的な方法は Total Commander、FileZilla、FAR Manager などで FTP経由で手動でファイルをコピー することであり、上級ユーザーは scprsync を使っていたが本質は同じだった
  • 1人で作業するプロジェクトではミスは大きな問題ではなかったが、数十件のクライアントプロジェクト を管理する場合は致命的だった
  • 一般的なバックエンド構成では、複数のWebサイトが同じ Apache Webサーバーのインスタンス を共有し、同じライフサイクルを持っていたため、Apacheが落ちるとすべて落ちた
  • トラフィック急増時に1つのサイトがすべてのリソースを消費すると、同じサーバー上の 他のサイトが静かに窒息する 問題が発生した
  • システム管理者はシェルスクリプトで自動化を試みたが、バージョン管理やロールバックのための 標準的な方法は存在せず、プロジェクトフォルダー名に連番やタイムスタンプを付ける慣行が使われていた

解決すべき2つの中核問題

  • 配布(Deployment): 安定したデリバリー、ヒューマンエラーの防止、バージョン管理とロールバックの実装、あらゆるビジネスケースをカバーする汎用ソリューションが必要
  • プロセス分離(Process Isolation): アプリとシステム間の相互保護、1つのアプリの要件が他のアプリを密かに壊す状況の防止、依存関係の衝突解決が必要
  • 配布問題を解決しようとする試みは、現代の CI/CDパイプライン、パッケージング標準、バージョン管理システムへと進化したが、分離問題の歴史は相対的にあまり知られていない

chroot から仮想マシンまで

  • 1979年にBell UNIXが導入した chroot は、プロセスに ファイルシステムの分離されたビュー を提供し、サブツリーの外へアクセスできなくする原始的だが有用なアイデアだった
    • 限界: 分離されるのはファイルシステムだけであり、ネットワーク・他のプロセス・システムリソースには依然として干渉でき、脱出も可能
  • 最初の本格的なエンタープライズ向けの答えは 仮想マシン(VM) で、VMwareが1990年代後半に主流化した
    • 各アプリケーションに完全に分離されたOS環境を提供したが、すべてのVMが完全なOSを含むため 相当なオーバーヘッド と分単位の起動時間というコストの問題があった

FreeBSD Jailsの誕生

  • 2000年、Windows ServerでもLinuxでもない FreeBSD で静かな革命が起きた
  • FreeBSDはLinuxとは根本的に異なる形で、Linuxがカーネルだけを提供し、GNUユーザーランド・パッケージエコシステム・ディストリビューションごとの選択肢が組み合わされるのに対し、FreeBSDはカーネル・ユーザーランド・基本ツール・ライブラリを1つの完全なOSとして 一緒に開発・バージョン管理・テストしている
  • この一貫した基盤の上に構築されたソリューションが jails であり、Poul-Henning Kamp と Robert Watson が発表し、FreeBSD 4.0(2000年3月)にネイティブなカーネル機能として搭載された
  • 各 jail は独自の ファイルシステムビュー、ネットワークスタック、プロセス空間 を持ち、ホストシステムは見えない
  • ホストカーネルを共有するため、ほぼゼロに近いオーバーヘッド とほぼ瞬時の起動時間を実現
  • FreeBSDは現在コンテナと呼ばれているものの 実用的実装を業界より10年早く 本番環境で達成していた

分離技術のタイムライン

  • 分離問題の実際の進化経路は、分離のない共有サーバー → 重いが分離された仮想マシン → 軽量で分離されたコンテナ だった
  • FreeBSDは2000年に第3段階へ到達し、Linuxは 2008年のLXC で到達、Dockerは2013年に登場した
  • Dockerが革命的だと称賛されていたとき、FreeBSD jails はすでに 13年間成熟し、実戦で検証済みの状態 だった

Linuxが勝利した理由

  • 技術的優位性はエコシステム戦争での勝利を保証しなかった
  • Linuxは 迅速な意思決定、GPLライセンスのバイラル効果、Red HatとIBMの強力なエンタープライズ支援 によって勝利した
  • その後、Google、Facebook、Amazon が大規模データセンター向けのツールを開発し、業界全体の方向性を定めた
  • Linuxは「商用ライセンスを買えない人のための無料OS」から 「サーバー向けの唯一の選択肢」 へと変貌した

Linuxコンテナエコシステムの複雑さ

  • Linuxエンジニアたちは分離と配布の問題を解決するため、namespace、cgroups、seccomp などのカーネルプリミティブを構築し、その上に LXC(2008)→ OCI/runc(2015)→ Docker/Podman(2013/2018)→ Docker Hub など 複雑な抽象化レイヤー を積み上げた
  • その結果、クラウドベースでベンダーロックインされたインフラのための 過剰にエンジニアリングされたリーキーアブストラクションの塊 が形成された
  • 今日では、大規模システムでアプリケーションを運用するには Docker でコンテナ化し、Kubernetes でオーケストレーションすることが 暗黙のデフォルト として定着しており、複数の選択肢の1つではなく当然の選択として提示されている

Dockerの貢献とJailsの弱点

  • Dockerがうまく解決したのは shippingの問題 だった。アプリケーションをすべての依存関係とともにパッケージ化し、レジストリを通じて配布し、どのマシンでも同じように動かせる 汎用標準 を提供した
  • OCIイメージフォーマット が実質的な業界標準として定着した
  • Jailsは分離問題を見事に解決する一方で、shipping に対する ネイティブなソリューションが存在せず、これが Docker エコシステムに比べて jails エコシステムが未成熟に感じられる主な理由となっている
  • コミュニティもこのギャップを認識しており、一部のツール(cbsd、bastille、pot、appjail など)が現代のコンテナエコシステムを模倣しようとしており、FreeBSDネイティブのプリミティブを活用する 別のアプローチ も存在する

続編予告

  • 次のパートでは、FreeBSDベースのインフラの簡潔さと優雅さ、jails の基礎からその動作原理、jailマネージャーによるボイラープレート削減、Ansibleを使ったプロビジョニングと配布ZFSスナップショット の強力さ、そしてこれらすべてを組み合わせて Hypha のための堅牢でスケーラブルなインフラを構築する方法を扱う予定

1件のコメント

 
GN⁺ 2026-02-24
Hacker Newsのコメント
  • 技術的優位性だけではエコシステム戦争には勝てなかった
    90年代半ば、Linuxは素早い意思決定、GPLライセンスの拡散性、Red HatとIBMの企業支援のおかげで成長した
    私は1994年にLinuxをインストールしたが、FreeBSDコミュニティでは私の3,500ドルのPCは「たいしたことない」と見なされた
    IDEインターフェースにバグがあったが、Linuxは数日で回避策を出し、BSD側はSCSI機器を買えと言うだけだった
    当時大学生だった私はお金がなく、結局Linuxが現実的な選択だった
    後になってFreeBSDをまた使ってみたが、すでにLinuxが私に必要なことをすべて満たしていた
    関連するバグは CMD640のWiki記事 にまとまっている

    • 私もFreeBSDファンだが、Linuxとの機能的収斂はかなり進んだと感じる
      それでもFreeBSDはシステムの一貫性がより高く、サウンドやイベントAPIのような中核コンポーネントが安定して維持されている点が気に入っている
      最新ハードウェアのドライバー対応は依然としてLinuxのほうが上だが、FreeBSDがあまりに「Linux化」しないでほしい
    • 今どきBSDを使う人の多くは、単に慣れているから使うか、あるいは反骨精神で使っていることが多い
      実際、現代の*nixならどちらでもほとんど何でもできる。今では性能より嗜好と慣れの問題だ
    • Linuxは初期に商業的な関心を集め、ハードウェア対応が爆発的に良くなった
      一方BSDはAT&Tとの訴訟のため企業に敬遠され、その間にLinuxが市場を支配した
      今でもFreeBSDを擁護する文章は出てくるが、90年代に固まった流れを覆すのは難しい
    • BSD陣営が私のPCを笑ったという話には笑ってしまう
      それでもハードウェア対応には今でも改善の余地が大きいと思う
    • 1992年から1994年の間、BSDが訴訟の脅威にさらされているあいだにLinuxが成長した
  • この記事は興味深かった
    Linuxのnamespaces, cgroups, seccompのようなカーネルプリミティブが最終的に複雑な抽象化エコシステムを生んだ、という評価には同意しない
    Linuxが成功したから複雑になったのであって、設計が失敗していたからではない
    もしBSDが主流だったとしても、同じように「過剰設計」なエコシステムが生まれていただろう

    • FreeBSDはハッカー文化よりエンジニアリング中心の考え方が強い
      コンテナは結局軽量VMにすぎないので、むしろ本物のVMを使うほうがよいと思う
    • BSDユーティリティとGNUユーティリティを比べると、スタイルの違いははっきりしている
      Dockerが人気なのは再利用性とエコシステムのおかげであって、セキュリティ分離のためではなかった
  • FreeBSDのjailはシンプルでエレガントだが、LinuxのOCIコンテナのほうがはるかに使いやすい
    コンテナはカーネルの独立した機能ではなく、複数の名前空間、マウント、プロセス分離を組み合わせた幻想だ
    Linuxの設計は意図的なものであり、cgroupsやseccompはコンテナ以外にもsystemdやflatpakなどで広く使われている

    • FreeBSDは今でもネットワーク機器やストレージコントローラのような分野で強みがある
      「家畜 vs ペット」の哲学はVMやオーケストレーションのレベルで適用できる
    • Linuxコンテナは作成と起動速度がFreeBSD jailよりずっと速い
      jailsのほうが優れているという話は現実感がない
  • Dockerが勝った理由は技術的な分離ではなくエコシステムだった
    Dockerfile、public registry、composeのようなツールのおかげで、30秒で実行可能な環境を作れた
    FreeBSD jailは技術的には優れていたが、参入障壁が高かった
    最近ではコンテナスタックの複雑さから、シンプルなjailやVMへ戻ろうとする動きも見られる

    • FreeBSDは市場シェアが0.1%程度なので、「勝つ」ことはできなかった
      しかし競争というより、それぞれ役割が違うだけだ
    • Dockerのクライアント/サーバー構造のおかげで、Docker Desktopのような統合環境が可能になった
      FreeBSDにはこうした概念がなく、イメージシステムも不足している
    • 私はDocker ComposeやSwarmだけでも十分シンプルだと感じる
      FreeBSDがDockerのようにUXとエコシステムに投資していれば、ユーザー層は数倍に増えていただろう
    • 原文でも「エコシステム」という言葉が何度も強調されている
  • 2005年ごろ、会社全体をFreeBSD上で動かして運用していた
    しかし時間がたつにつれて、Linuxが個人用途でも業務でもすべてを支配するようになった
    今ではDockerも十分悪くなく、戻る論理的な理由がない

    • 2000年代初頭のFreeBSD 4はネットワークとストレージ性能が卓越していた
      しかしマルチコアCPU時代への対応が遅れ、LinuxやWindowsに押された
      今では性能は回復したが、ドライバー不足と開発者数の限界のため、依然として不利だ
      私はGPUやCUDAが必要なところではLinuxを、安定したサーバーにはFreeBSDを使っている
    • 私も似た立場だ。Linuxの投資規模があまりに大きく、欠点が埋もれてしまう
      FreeBSDのUXのほうが一貫しているが、現実的にはLinuxが「幸福な道筋」になってしまった
    • サトシがなぜWindowsを使っていたのかはいまだに疑問だ
  • FreeBSDを紹介する記事はいつでも歓迎だ

  • FreeBSDが2000年にjailを導入したが、LinuxにはすでにOpenVZやVServerのような類似技術があった

    • Virtuozzoは非公開だったため普及が遅く、Linux-VServerはWebホスティングにしか焦点を当てておらず主流になれなかった
      結局2000年代後半にLXCが登場して、「FreeBSDが先行していた」という認識が生まれた
  • コンテナとVMの分離実装方式を技術的に説明した記事があるのか気になる
    単に「同じカーネルだから弱い」というレベルではなく、実際の実装の詳細を知りたい

  • 最近はsystemd-oomdのような機能のせいで、FreeBSDに戻りたいと思うことがある
    昔はターミナルで複数のプロセスを立ち上げたままログを残しつつ開発していたが、
    今ではsystemdがcgroup単位でプロセスを丸ごと殺すため、作業が消えてしまう
    こうした非互換なシステム変更は開発フローを壊し、プロセス分離のために毎回systemd-runやDockerを使わなければならない状況がもどかしい

  • Linux成功の核心はGPLの伝播性ネットワーク効果だった
    ユーザーがLinuxを標準と見なすようになり、ハードウェアメーカーも自然にLinux向けドライバーを出すようになった
    カーネルの柔軟性のおかげで、オープンソースのドライバーエコシステムは爆発的に成長した