NetBSD の特徴
以下に掲げる特徴は、いずれも、 単一のソースツリーから構築される基本システムで実現されているものです。
NetBSD について
ネットワーキング
移植性および対応プラットフォーム
ストレージ
- ハードウェアおよびソフトウェア RAID
- 高性能 PCI IDE
- SCSIPI サブシステム - SCSI と ATAPI の結合
- 64 ビットファイルシステム
- 大容量 IDE ディスク
- 高性能と信頼性をもたらす、FFS 上の Soft Updates
- 多くの種類のファイルシステム
- ユーザー空間ファイルシステムへの対応
- DVD ROM と RAM
- ディスクの暗号化
その他の特徴
- パッケージシステム (アプリケーション)
- 機種独立のドライバーの枠組み
- 機種独立のオーディオの枠組み
- カーネルデバッグ
- OS エミュレーション
- USB (Universal serial bus)
- その他のデバイス対応
- UVM 仮想メモリーシステム
- cardbus
- wscons 機種独立コンソール
- 64 ビットクリーン
- 実行不可スタックおよびヒープ
- カーネル認証の枠組み (kauth)
NetBSD について
きれいな設計 (トップ)
NetBSD は、きれいな設計とうまく構成された解決に注力しています。 これにより、NetBSD の「刺激的な」機能への対応は、 確かに他のシステムより遅れるかもしれません。 しかし、コードの品質よりも機能を重視する他のシステムでは、 コード管理上の問題や矛盾が増えていきますが、 NetBSD のコードベースは、時間がたつにつれ管理しやすくなり、 より強靭なものにさえなるのです。
NetBSD は、単一のソースツリーをもとに 幅広い範囲のハードウェアプラットフォームに対応し、 すべてのプラットフォームで同時にリリースをしており、 また、メディアへの露出や商用の支援が不足しているにもかかわらず、 多くのユーザーや経験を積んだ開発者を魅了し続けています -- これらはすべて、コードの品質への配慮のたまものです。
BSD ライセンス (トップ)
NetBSD は、GNU の toolchain (コンパイラー、アセンブラーなど) や、 その他にもいくらか GNU のツールを使ってはいますが、 完全なカーネルと基本的なユーザーランドユーティリティーは BSD ライセンスのもとで配布されています。このため、企業が NetBSD をもとに製品を開発する際、(GPL のように) その成果を公共に供する必要はありません。NetBSD プロジェクトでは、 企業や個人がおこなった変更点をソースツリーに還元していただきたいとは思いますが、 彼らがしたいようにする権利を尊重します。
全ソースを公開 (トップ)
NetBSD ではすべてのソース (ソースコードと全 CVS リポジトリーの両方) を公開しています。すべてが単一のソースツリーに含まれるため、 常に全ファイルの各バージョンにアクセス可能です。NetBSD は CVS リポジトリーを公開した最初の BSD ではありません。しかし、 USL との和解日以前のすべてのリビジョンを捨てたりせず、 すべてのファイルを細心に検査して USL に汚染されたコードを含むリビジョンのみをすべて削除した、 という点では唯一のものなのです。
セキュリティー (トップ)
NetBSD は、(bugtraq などの) 公開された討論の場で セキュリティーバグの報告がもっとも少ないものになっています。 誇張抜きで、私たちはセキュリティーの価値を信じています。 私たちは手動でのコード監査をおこなったり、 toolchain を拡張して検査機能を追加したりしています。 カーネルデータの取得は、伝統的な Unix の kmem アクセス (これはシステム全体への無制限のアクセスが必要であり、 しばしば穴をつかれています) とは異なり、 sysctl にもとづく手法に調整されています。
成熟と安定 (トップ)
BSD のコードベースは 80 年代の UC バークレーにまで遡ることができ、 当時からずっと一般に公開され吟味されてきました。 NetBSD はこの伝統を受け継ぎ、というかさらに熱心に、 きれいな設計と見かけだおしではない機能の推進に取り組んでいます。 NetBSD は NASA の Numerical Aerospace Simulation facility で使われていますが、これには理由があります。 NASA の主なプラットフォームは大量の RAM とディスク容量 (テラバイト以上) を持つ Alpha システムであり、NASA では、 各プロジェクトの構築基盤として使える、良質で安定したコードベースを必要としているからです。 NetBSD は、 y2k 声明を出した最初のフリー OS でもあります。 さらなる成功例については、 私たちの感謝状をご覧ください。
誇張なし (トップ)
おそらく、NetBSD で得られない唯一のものは、メディアの誇大広告です。 そのようなものをお望みなら、別のものをあたってください。
ネットワーキング
パケットフィルタリングとネットワークアドレス変換 (NAT) (トップ)
NetBSD にはカーネル内パケットフィルタリングエンジンが附属しており、 インターフェース、プロトコル、ポート、tos、ttl、送信元、宛先、 その他多くの条件に基づいてトラフィックのフィルタリングができます。 カーネルに内蔵することで、高い性能が得られます。
ネットワークアドレス変換によって、ローカルネットワークのマシンが、 内部向けにはあるアドレスの集合を使い、外部向けには別のアドレスの集合 (単一の IP アドレスにもできます) を使うようにできます。 これはセキュリティーや単に利便性の理由で使えますし、また、 FTP の透過プロキシーを含んでいます。これもまた、高性能を得るために すべてカーネルに内蔵されています。
IPv6 (トップ)
NetBSD は、最先端の標準である IPv6 の実装を提供したフリー OS として最初のものであり、私たちは KAME プロジェクトと共に、仕様の変更を追うための作業を続けています。 NetBSD は、IPv6 上の NFS にクライアントとサーバー双方で対応したフリー OS として最初のものでもあります。
ネットワークファイルシステム (NFS) (トップ)
NetBSD では、NFS クライアントおよびサーバーにカーネル内蔵で完全対応しており、 NFS2 および NFS3 プロトコルのいずれでも、 他のシステムとの相互運用が可能です。これは NFS を介したスワッピングも含んだ話であり、 また、スワップパーティションのサイズには一切制限がありません。 クライアント側のファイル作成は不可分な操作として適切に処理されます ─これは、このロックのないシステムでは不確実になるものです。
広範囲かつ強靭なネットワーキング (トップ)
NetBSD は、以下のような種類のネットワークに対応しています。
ARCnet に対応する過程で ARP サブシステムは書き換えられ、 イーサネット依存性をなくし、より一般的に適用可能になりました。
NetBSD はまた、以下のネットワークプロトコルにも対応しています。
NetBSD にはまた、 bootparamd(8), bootpd(8), dhcpd(8), ftpd(8), identd(8), mopd(8), named(8), postfix(1), rarpd(8), rbootd(8), sshd(8), tftpd(8), xntpd(8) をはじめとする、 tcp wrappers 対応を適切に組み込んだ標準的なネットワーキングデーモンが多く附属しています。
無線ネットワーク (トップ)
NetBSD は、IEEE 802.11 にもとづく多くの無線ネットワークデバイスに対応しています。 an(4), ath(4), atu(4), atw(4), awi(4), cnw(4), ral(4), ray(4), rtw(4), rum(4), wi(4), wpi(4), zyd(4) をご覧ください。
移植性および対応プラットフォーム
複数プラットフォーム対応 (トップ)
NetBSD は、古いアーキテクチャーに対応し続けていますが、Alpha、 PowerPC、 PC システムの最新のハイエンドハードウェアの性能を引き出せるよう設計されています。 これはすべて、単一のソースツリーをもとに実現されていますが、 正しい設計ときれいなコードを重視しているからこそ可能なことです。 また、これにより、 NetBSD は、 mips, ARM, Super-H にもとづくハンドヘルド Windows CE デバイスといった新しいマシンや組み込みプラットフォームへ移植をするための、 理想的なコードベースとなっています。
組み込みシステム上の NetBSD (トップ)
NetBSD オペレーティングシステムは高い移植性を持っていますが、 対応ハードウェアプラットフォームの多くは組み込みアプリケーションに適したものです。 詳細は組み込みシステム上の NetBSD の説明をご覧ください。
ストレージ
ハードウェアおよびソフトウェア RAID (トップ)
多くの標準的な SCSI RAID デバイスのほか、 NetBSD は RAIDframe によって、各種 RAID コントローラーと 完全なソフトウェア RAID 0, 1, 4, 5, 6 システムに対応しています。 (より 詳しく)
高性能 PCI IDE (トップ)
最近の PCI IDE コントローラーの多くは、高速な DMA 転送に対応しています。 NetBSD は、「そのままの状態で」この性能を引き出すことができる 数少ないシステムのひとつです。 NetBSD のきれいな設計のおかげで、alpha, i386, macppc, sparc64 で、 同じドライバーと機能が使えるようになっています。
SCSIPI サブシステム - SCSI と ATAPI の結合 (トップ)
NetBSD は、統合された SCSIPI サブシステムを実装しています。
統合することでコードの重複をなくし、また、多くのデバイスについて、
ユーザーランドの SCSI と ATAPI のインターフェースを共通化することができます。
この直接の成果として、ATAPI CD-R ユニットが使えるようになった時には、
sysutils/cdrtools
のような既存のツールは、
何も修正しなくても、 ATAPI CD-R で使うことができたのです。
64 ビットファイルシステム (トップ)
NetBSD は 1994 年 10 月の 1.0 リリース以降、 64 ビットのファイルシステムを含んでいます。 NetBSD の berkeley fast filesystem では、 64 ビットと 32 ビットのマシンのいずれも、容量の上限が 4TB (4096GB) となっています。 ファイルやユーザーのファイル quota もまた、テラバイト単位まで到達できます。 多くの他のシステムでは、 32 ビットマシンでのファイルの大きさの上限は 4GB です。
ffs は、2^31 までのフラグメントブロックを持つことができます ─このため、ファイルシステムの容量の上限は、 フラグメントの容量によって変わります。
フラグメントの容量 | ファイルシステムの容量の上限 |
---|---|
512 bytes | 1 TB |
1kB | 2 TB |
2kB | 4 TB |
大容量 IDE ディスク (トップ)
NetBSD は、34GB を超えるサイズの IDE ディスクに完全に対応しており、 8GB を超える部分からのブートも (BIOS が対応していれば) 可能です。 NetBSD 1.6 からは、137GB を超える容量を持つディスクにアクセスするために 48 ビットの論理ブロックアドレス (ATA-6 拡張アドレッシング) を使うこともできます。
高性能と信頼性をもたらす、FFS 上の Soft Updates (トップ)
Soft Updates は、非同期書き込みに近いディスク性能を得るために、 メタデータ喪失の危険を冒すことなく、 メタデータの書き込み順序を変えることができます。 これは、 FFS ファイルシステムの性能を大幅に改善します。 (より 詳しく)
多くの種類のファイルシステム (トップ)
NetBSD は多くの異なるファイルシステムを利用・処理することができ、 データ交換とバイナリー互換いずれの面でも便利です。 また、オプションで、システムは、 逆のバイトオーダーで書き込まれているファイルシステムをマウントすることもできます。 他のいくつかのシステムとは異なり、NetBSD はメタデータに書き込み順序をもうけます。 これにより、fsync(2) は、電源が切れても (たとえ ext2fs であっても) 重要なデータを消失しないですみます。
- ffs (Berkeley Fast File System, バークレー高速ファイルシステム) - soft updates を含んだ最新の 64 ビット FFS と、一部のベンダー (SunOS, Ultrix など) で使われている古い 32 ビット FFS の両方。
- lfs (Log-structured File System, ログ構造化ファイルシステム) - LFS は、間にヘッドの走査が入って速度を落とされることがなく、 非同期のファイル作成と高速なファイル書き込みを安全におこなうことや、 クラッシュ後の復旧をほぼ瞬時におこなうことができるよう設計されています。 これは、IRIX の XFS, Reiserfs, Microsoft の NTFS, IBM の JFS, や Netware および Unixware の類似のファイルシステムと同様の、 より完全なログ構造化の形態である、「ジャーナル」ファイルシステムです (より詳しく)。
- tmpfs (効率的な メモリーファイルシステム)
- iso9660 (標準的な CD のファイルシステム、 Rockridge および Joliet 拡張に対応).
- msdosfs (Windows, MS-DOS, Atari TOS) - 長いファイル名、FAT32 および VFAT を含む。
- ntfs (Windows NT のネイティブのファイルシステム)
- ext2fs (Linux の拡張ファイルシステム).
- ados (AmigaDOS のファイルシステム).
- filecorefs (Acorn RISC OS のファイルシステム).
NetBSD は、以下のような多様な仮想ファイルシステムにも対応しています。
- kernfs - カーネル情報へのアクセス
- nullfs - ループバックマウント用
- portal - portal デーモンファイルシステム
- procfs - プロセス情報へのアクセス
- umapfs - uid と gid の自動変換
- unionfs - あるディレクトリーを、 その内容と重複しない部分はマウント前のディレクトリーが見える形でマウントする。 CD-ROM の上に書き込み可能なファイルシステムをマウントするために使うことができる。
ユーザー空間ファイルシステムへの対応 (トップ)
NetBSD は、バージョン 4.0 から、 ユーザー空間のサーバーとしてファイルシステムを作成するための puffs(3) の枠組を提供しています。これは、 テストが楽になるよう新しいファイルシステムの開発をユーザー空間でおこなったり、 ユーザー空間の機能を (SSH ファイルシステムのような) ファイルシステムという形にするなど、無数の可能性を持っています。 NetBSD 5.0 には FUSE 的なインターフェースを提供する refuse ライブラリーが含まれます。 refuse を使うと、 多くの FUSE ファイルシステムを puffs(3) の上で動かすことができます。
puffs と refuse についてのさらなる情報は、 “ ユーザー空間内ファイルシステム”のページにあります。
DVD ROM と RAM (トップ)
NetBSD は、現在のところ、大容量 DVD ドライブに対して、 DVD 共通のファイルシステムからのデータの読み込みに対応しています。
ディスクの暗号化 (トップ)
NetBSD では、cgd(4) ドライバーを介することで、 透過的にディスクを暗号化することができます。cgd(4) は、他のブロックデバイスの上層で、 物理的なディスクパーティションや vnd(4) 疑似デバイスのような、 論理的なデバイスとして働きます。 cgd(4) は現在、AES, 3DES, Blowfish 暗号に CBC モードで対応しています。
広範にわたって書かれた cgd(4) の導入は、 NetBSD Guide 内に あります。
その他の特徴
パッケージシステム (アプリケーション) (トップ)
NetBSD パッケージコレクション (pkgsrc)
を使って、多くのサードパーティー製アプリケーションの
ソースやバイナリーを、簡単にインストールできます。
これには、meta-pkgs/kde3
,
meta-pkgs/gnome
,
www/firefox
,
www/apache2
,
lang/perl5
,
net/samba
,
misc/openoffice
,
graphics/gimp
などなど、あらゆるものが含まれています。
以下のような機能があります:
- ローカルおよびリモートのバイナリーパッケージの容易なインストール。 他のパッケージが必要な場合、それらもすべて自動的にダウンロードできます。
- ソースからの構築とバイナリーパッケージのインストールのいずれでも、 固定された依存とワイルドカード依存を扱えます。
- バイナリーやソースの再配布ができないツールについても、 インストールの自動化が可能です。
- パッケージシステムの基盤は、 個々のパッケージを構築するために必要な情報を、 他のパッケージシステムより短時間で簡単に保守できるよう設計されています。
- "pristine source" の思想に従い、 変更点をパッケージの作者に還元することと同様に、 ローカルのパッチや第三者製のパッチを組み入れることも容易におこなうことができます。
- Imakefile, GNU autoconf ……など、 多くのソース配布に共通な内部構造への対応が組み込まれています。 これにより、パッケージごとに特有の複雑な構築ルールの必要性を減らしています。
pkgsrc は FreeBSD の 'ports' システムをもとにしていますが、 大幅に拡張されています。
機種独立のドライバーの枠組み (トップ)
チップセットドライバーとバスに付随するコードとのきれいな分離と、 MI bus_space(9) と bus_dma(9) の枠組みの実装には、 以下のような利点があります。
- 新たなハードウェアへの移植の単純化。
- カーネルのサイズの節約。 同じコントローラーを使うデバイスは同じドライバーを共有し、 このほかにはバス依存の必要な部分 (isa/eisa/pci/pcmcia/sbus/cardbus...) のみを含む。
- デバイスドライバー (32 ビット pci デバイスを含む) が 64 ビットの物理メモリーに対応済 (他の多くのシステムは未対応)。
- バウンスバッファーへの対応は、適切なハードウェアを持つマシン (例: sparc 、ほぼすべての alpha) では不要なものであり、必要となるのは 個々のドライバーではなくバスコードの機能としてである。
機種独立のオーディオの枠組み (トップ)
NetBSD では、SCSI サブシステムと同様の手法により、 個々のチップセットドライバーの下に汎用のオーディオ層があります。 これにより、他のフリー OS プロジェクトに比べ、 高い一貫性とコード共有が実現できます。
カーネルデバッグ (トップ)
- NetBSD は、完全な機能を持つカーネルデバッガー (DDB) を持っており、 これは、他のいくつかのシステムの 'SysRQ' 型の機能より高機能です。
- カーネルのクラッシュダンプに対応しており、カーネルデバッグが容易です。
- 厳密な一貫性チェック - null ポインターにカーネルがアクセスすると、 汚染の可能性のあるデータによる実行を防ぐため、 DDB に落ちるか、クラッシュダンプを吐いてリブートします。
OS エミュレーション (トップ)
NetBSD には特有のバイナリー互換機能があり、カーネル内で非ネイティブの (同じプロセッサー向けの) バイナリーが透過的に実行できるので、 ユーザーの投資を軽減することができます。 以下のシステムとの互換機能があります。
- BSD/OS (i386)
- Darwin (macppc)
- FreeBSD (i386)
- HP-UX (m68k)
- IRIX (sgimips)
- Linux (i386, m68k, alpha, powerpc, mips, arm)
- OSF1/Digitial UNIX/Tru64 (alpha)
- SCO/iBCS2 (i386)
- Solaris および SVR4 (sparc, sparc64, i386, m68k)
- SunOS 4 (sparc, sparc64, m68k)
- ULTRIX (mips, vax)
パッケージシステム
の emulators
カテゴリーには、以下のような多くのエミュレーターがあります。
-
emulators/bochs
- i386 機エミュレーター -
emulators/ia64sim
- IA64 (Intel(R) Architecture 64) -
emulators/qemu
- 動的翻訳を使った、汎用プロッセーサーエミュレーター -
emulators/spim
- MIPS R2000 シミュレーター -
emulators/uae
- Amiga -
emulators/wine
- Windows エミュレーター -
emulators/xcopilot
- PalmPilot -
emulators/xmame
- 多くの古いアーケード機やゲーム機
対応ファイルシステムもご覧ください。
USB (Universal serial bus) (トップ)
NetBSD は USB に対応した最初のフリー OS であり、Apple が MacOS X をはじめるより前から Apple Power Macintosh マシンで USB を使っていました。alpha, i386, macppc をはじめとする、 適切なプラットフォームすべてで USB を利用することができます。 対応デバイスには、マウス、キーボード、モデム、 大容量ストレージデバイス (ZIP) などがあり、 USB 標準の開発とともに、より多くのドライバーが開発されています。
その他のデバイス対応 (トップ)
- ISA PnP (Plug'n'play) デバイスに対する、うまく設計された堅固な対応。
- 生 (raw) デバイスへのアクセス。
UVM 仮想メモリーシステム (トップ)
UVM は、広範なデータ移動を柔軟におこなう機構を持つ、 I/O と IPC (Inter Process Communication, プロセス間通信) システムを提供するために設計された、新しい仮想メモリーシステムです。 UVM は Mach にもとづく 4.4BSD VM システムを完全に置き換えるもので、 他の VM システムにくらべ仮想メモリーの性能が改善されています。 (より詳しく)
cardbus (トップ)
最近のラップトップで使われている 'cardbus' PC カードおよび PCMCIA ソケットに対応しています。 これには、ホットスワップ、電源管理、デバイスの取り外しなどを含みます。
wscons 機種独立コンソール (トップ)
wscons(4) ドライバーは、 コンソールへの機種独立なアクセスを可能とします。 これは多くの協調モジュール、特に次のようなものから構成されます。
- ディスプレイアダプター、キーボード、マウスへのハードウェア対応、 wsdisplay(4), wskbd(4), wsmouse(4) 参照。
- vt100 や sun のような端末エミュレーションモジュール。
- 既存の端末ドライバーの、 制御操作や低レベルの振舞に対応するための互換オプション。
64 ビットクリーン (トップ)
NetBSD は、alpha のような 64 ビットアーキテクチャーに最初に対応したフリーの OS であり、他のどのフリー OS よりも多くの alpha の機種に対応し続けています。 完全なソースツリーはながらく 64 ビットクリーンであり、またパッケージシステムには、 多くのサードパーティー製アプリケーションを 64 ビットクリーン化するパッチが含まれます。
実行不可スタックおよびヒープ (トップ)
バージョン 2.0 から、NetBSD は多くのプラットフォームで実行不可マップに対応しています。 実行不可マップが有効となっている場合、スタックとヒープは、 書き込み可能とマークされた部分は実行できないようになります。 これにより、バッファーオーバーランの攻撃が難しくなります。 この題目については、 詳しい情報 を別ページに用意しています。
カーネル認証の枠組み (kauth) (トップ)
NetBSD 4.0 から、NetBSD カーネルは、広範な認証の枠組み kauth(9) を使っています。 これより前の NetBSD バージョンでは、伝統的な Unix や BSD の意味論に従い、 アクセス制御ポリシーがカーネル内でほとんどハードコードされていました。 これに対して、新しい枠組みでは、 認証関連の判断はすべて kauth(9) の枠組みに渡されるようになっています。 こうすることで、基本システムの一部としても LKM としても、 新しいセキュリティーモデルを実装することや、 伝統的な 4.4BSD/NetBSD のセキュリティーモデルを改めることができます。