NetBSD について

NetBSD について

NetBSD は、Unix ライクな OS です。

最新のリリースは、NetBSD-9.0です。開発版は、NetBSD-current と呼ばれており、日々更新されています。

NetBSD の由来と始まり

BSD」の部分は、BSD (Berkeley Software Distribution) から派生したものであることを表し、「Net」の部分は、インターネットを介した開発体制や配布形態であることに由来しています。

1992年にリリースされた 386BSD 0.1 が作者によるメンテナンスが行われない状態が続き、ユーザらが独自にバグ修正を行った patchkit が非公式なものとして作成され続けるという状況に対して、386BSD の熱心なユーザが集まって新たに開始したプロジェクトの一つが NetBSD でした。

NetBSD は、386BSD 0.1 に patchkit 0.2.2 を加えたところからスタートし、最初のリリースである NetBSD 0.8 は1993年4月にリリースされました (リリースノート) 。この時はまだ、i386 アーキテクチャのみの対応でした。

その後、Berkeley Networking Release 2 と 386BSD 0.1 をベースに 680×0系 Macintosh で動作するように移植された MacBSD が NetBSD にマージされ、法的に制限のなくなった 4.4BSD-Lite と Berkeley Networking Release 2 をベースに作り直された NetBSD 1.0 が1994年10月にリリースされました (リリースノート)。NetBSD 1.0 から mac68k をはじめとする複数のアーキテクチャに公式に対応しています。

興味のある方は、以下の話が参考になります。

バークレー版 Unix の20年: Marshall Kirk McKusick
386BSD や 4.4BSD-Lite までの BSD の歴史が分かります。

The future of NetBSD: Charles M. Hannum (日本語訳: NetBSDの将来)
内容はややネガティブな面もありますが、歴史については参考になります。

Kernel としての NetBSD

NetBSD は幅広いプラットフォームで動作するという特徴がありますが、他の Unix にはない進んだ実装もいくつかあります。

UVM
NetBSD 1.4 以降から Chuck Cranor により設計された UVM という新しい仮想メモリシステムが実装されています。UVM は 4.4BSD で使われていた BSD VM システム (カーネギーメロン大で開発されていた Mach OS のために書かれた仮想メモリシステムを修正したもの) の完全な書き換えとなっており、BSD VM システムからのパフォーマンスの改良や仮想メモリベースのデータ移動メカニズムが加えられ性能が向上しています。(Chuck Cranar の論文: “The UVM Virtual Memory System“)

UBC
UBC (Unified Buffer Cache) は、ファイルシステムと仮想メモリシステムとの間でファイルデータのキャッシュを統合したシステムで Chuck Silvers によリ書かれたものです。UBC は NetBSD 1.6 以降から実装されています。UBC により、多くのメモリを通常のファイルデータのキャッシュに用いることができ、結果としてファイルシステムの入出力が速くなります。(Chuck Silvers の論文: “UBC: An Efficient Unified I/O and Memory Caching Subsystem for NetBSD“)

Native threads
Nathan Williams を中心に、Scheduler Activation による native なスレッドシステムが NetBSD 2.0から実装されました。Scheduler Activation は、N 個のユーザーランドスレッドを M 個のカーネルスレッドに割り当てる効率的な方法 (N:M 実装) であり、並行性に関する N:1 実装の問題と、スケーラビリティが得がたい 1:1 実装の問題を両方とも回避するものでした。
(Nathan Williams の論文: “An Implementation of Scheduler Activations on the NetBSD Operating System“)

NetBSD 5.0 以降は、マルチコアやマルチCPUの装置が増えてきたことに伴い、新しい MP の仕組み (newlock2) が導入され、1:1モデルの実装となりましたが、MP の性能は向上されました。(NetBSD 5.0: benchmarks and an introduction)

Distribution としての NetBSD

init
NetBSD には Linux のようなランレベルの概念はなく、/etc/rc.conf の設定だけで起動させたいデーモンの設定できます。現在の rc.d システム は、NetBSD 1.5 以降から実装されてます。(Luke Mewburn の論文: “The Design and Implementation of the NetBSD rc.d system“)

シェル
NetBSD で用意されているシェルは /bin/sh, /bin/csh, /bin/ksh で、NetBSD 4.0 以降はデフォルトは /bin/sh です。
NetBSD の /bin/sh は ash (Almquist Shell) から派生したもので、今では bash のような emacs 風のキー操作での行編集や TAB による補完も使えます。

メールサーバ
NetBSD 1.5 から標準の MTA として Sendmail と Postfix が用意されています。

WWWサーバ
軽量の bozotic HTTP server が標準で usr/libexec/httpd として用意されています。