NetBSD システム
NetBSD プロジェクトのおそらく第一の目的は、 正しい設計とうまく書けたコードとを強調することです。 機種独立なバスの基本的枠組がその一例であり、 デバイス(Ethernet や SCSI など)の一つのドライバーを 異なるバス(PCI, EISA, Turbochannel など)で、 いくつものプラットフォーム上(alpha, pmax, i386 など)で使用していて、 機種ごとに調整したいくつもの異なるドライバーを書いて保守するといった 伝統的な手法はとりません。 NetBSD での「調整」とは、小さな `glue' (のりづけ)関数であり、 核となるドライバーの改良に貢献して全ての port に利益をもたらすものです。
これにより、多くの場合、新規 port は、 既に書かれているドライバーを利用するために 機種独立のバスの基本的枠組への橋渡しをする機種依存のコードを作成するだけに 簡略化されます。
"動けば正しい" の哲学を持つシステムもあるようですが、 NetBSD を同様に記述するならば、 "正しくない限り動かない" となります。
"完全な" システムとは何でしょう? NetBSD は比較的なコンパクトな標準システムで、 全ての基本機能は BSD システムのものとなっています: ネットワークプロトコル、自身を再コンパイルできる能力など。 それ以上の機能はパッケージシステムで提供されていて、 サードパーティー製のアプリケーションをソースやコンパイル済みバイナリーで 簡単に追加できます。 これにより、NetBSD の開発者は、核となるシステムの開発に集中することができます。
NetBSD は、広範囲の計算機上の、無数に可能な組合せのハードウェアで動作します。 これにより、これを成功させるために不可欠な、良い機種独立な設計ができます。 最終的に、世界中で、何十もの異なるハードウェアプラットフォーム上で、 製品に使われるシステムができ上がります。これが結論です。
NetBSD は、最も遅い vax や hp300 機から、最も大きな AlphaServer 8x00 や Opteron 機でまで動作します。 CPU やメモリー資源の限られる機種でも使用に耐えるパフォーマンスを維持する ことによって、より強力な機種でも同様に恩恵にあずかれます; コードの増加は最小限に抑えなければなりません。 また、通信ハードウェアについても、遅いシリアルやパラレルデバイスから、 イーサネット、FDDI や (800Mb/s) HIPPI インターフェースまでをサポートしています。
こまごまとした最適化はどんなシステムでも可能ですが、 それよりも設計の方が重要です。 あるルーチンを書き直して 80% 高速化したといえば聞こえはいいですが、 そのルーチンは CPU 時間の 5% しか使っていなかったかもしれません。 より広くを見渡して、設計を改良することにより全体を 10% 高速化した方が 2倍を越える効果があります。 NetBSD にはどちらの改良の余地もありますが、私たちは貧弱な実装の調整よりも、 設計を正しくする方を好みます。