NetBSD は、Berkeley Software Distribution (BSD)をベースにした、無料のオープンソースUnix ライクなオペレーティングシステムです。386BSDがフォークされた後に公式にリリースされた最初のオープンソース BSD 派生システムです。[ 4 ] [ 5 ]現在も活発に開発が続けられており、サーバー、デスクトップ、ハンドヘルド デバイス[ 5 ]、組み込みシステム[ 6 ] [ 7 ]など、多くのプラットフォームで利用可能です。
NetBSDプロジェクトは、コードの明瞭さ、慎重な設計、および多くのコンピュータアーキテクチャ間での移植性に重点を置いています。ソースコードは公開されており、寛容なライセンスが付与されています。[ 8 ] [ 9 ] [ 10 ]
NetBSDは、VAXミニコンピュータやビンテージホームコンピュータから、最新のARMベースシステム、Raspberry Pi、RISC-Vハードウェアまで、16種類の命令セットアーキテクチャにわたる59種類以上のハードウェアプラットフォームをサポートしています。移植性は、マシン非依存ドライバコンポーネントとマシン依存ドライバコンポーネントを分離するハードウェア抽象化レイヤーによって向上しており、単一のドライバで複数のプラットフォーム上で動作させることができます。1998年にNetBSD 1.3で導入されたpkgsrcパッケージコレクションは、29,000種類以上のサードパーティ製ソフトウェアパッケージを提供しており、 SmartOSやMinix 3などの他のオペレーティングシステムにも採用されています。
このオペレーティングシステムは、プロジェクトの知的財産権と商標権を保有する非営利団体であるNetBSD Foundation ( 501(c)(3))によって開発されています。最新の安定版リリースはNetBSD 10.1(2024年12月)で、 NUMA対応スケジューラ、ZFSサポートの改善、WireGuard VPN統合、 Apple M1およびRaspberry Pi 4のハードウェアサポートなどが含まれています。
NetBSD は、カリフォルニア大学バークレー校のコンピュータ システム研究グループの Berkeley Software Distribution の 4.3BSD-Reno リリースから派生したもので、 Net/2ソース コードの歴史と386BSDプロジェクトを通じて開発されました。[ 5 ] NetBSD プロジェクトは、386BSD 開発者コミュニティがオペレーティングシステムの開発のペースと方向性に不満を抱いたことから始まりました。[ 11 ] NetBSD プロジェクトの創設者である 4 人の Chris Demetriou、Theo de Raadt、Adam Glass、Charles Hannum は、移植性があり、クリーンで、正しいコードを中心とした、よりオープンな開発モデルがプロジェクトに有益であると考えました。彼らは、統一された、マルチプラットフォームの、実用レベルの BSD ベースのオペレーティングシステムを開発することを目指しました。「NetBSD」という名前は、当時インターネットなどのネットワークの重要性と成長、そして分散的で協調的な開発の性質に基づいて選ばれました。[ 12 ]
NetBSD ソースコードリポジトリは 1993 年 3 月 21 日に設立され、最初の公式リリースである NetBSD 0.8 は 1993 年 4 月 19 日に作成されました。[ 13 ]これは 386BSD 0.1 とバージョン 0.2.2 の非公式パッチキットから派生したもので、386BSD には含まれていなかった Net/2 リリースのいくつかのプログラムが再統合され、その他さまざまな改良が加えられました。[ 13 ] [ 14 ]最初のマルチプラットフォームリリースである NetBSD 1.0 は 1994 年 10 月に作成され、4.4BSD-Lite ソースで更新されたため、法的制約のある 4.3BSD Net/2 コードはすべて削除されました。[ 15 ]また、1994 年に、議論のある理由で、創設者の 1 人である Theo de Raadt がプロジェクトから外されました。彼はその後、1995年末頃にNetBSD 1.0のフォーク版からOpenBSDという新しいプロジェクトを立ち上げた。 [ 16 ] 1998年には、NetBSD 1.3でpkgsrcパッケージコレクションが導入された。[ 17 ]
2004 年までは、NetBSD 1.x リリースはほぼ 1 年間隔で行われ、その間にマイナーな「パッチ」リリースが行われていました。リリース 2.0 以降、NetBSD はセマンティック バージョニングを使用し、各メジャー NetBSD リリースは、インクリメントされたメジャー バージョン番号に対応しています。つまり、2.0 以降のメジャー リリースは 3.0、4.0 などとなります。以前のマイナー リリースは、現在、2 つのカテゴリに分けられています。xy 「安定版」メンテナンス リリースと、セキュリティと重大な修正のみを含むxyzリリースです。[ 18 ]
NetBSD は以前は、twmを事前設定済みのグラフィカルインターフェイス (ウィンドウマネージャ) として同梱していましたが、2020 年 (バージョン 9.1) に、よりモダンで多機能なCTWMに変更されました。[ 19 ]


プロジェクトのモットーとして(「もちろんNetBSDが動作します。NetBSD32ビットおよび64ビットアーキテクチャに移植されています。これらはVAXミニコンピュータPocket PCPDAまでセガドリームキャスト[ 20 ]や任天堂Wii [ 21 ]などのビデオゲームコンソールにも移植されています。2019年現在、NetBSDは59のハードウェアプラットフォーム(16種類の命令セット)をサポートしています。これらのプラットフォームのカーネルとユーザーCVSによって管理される中央の統合ソースコードツリーから構築されています。μClinuxなどの他のカーネルとは異なり、NetBSDカーネルは、MMU。
NetBSD の移植性は、バスの入出力やDMAなどの低レベルのハードウェア アクセスにハードウェア抽象化レイヤーインターフェイスを使用することで向上しています。この移植性レイヤーを使用すると、デバイス ドライバを「マシン非依存」(MI) コンポーネントと「マシン依存」(MD) コンポーネントに分割できます。これにより、ハードウェア アクセスの詳細を隠蔽することで、単一のドライバを複数のプラットフォームで簡単に使用できるようになり、新しいシステムへの移植作業が軽減されます。[ 22 ]
これにより、特定のPCIカード用デバイスドライバは、 IA-32、Alpha、PowerPC、SPARC 、またはその他のPCIバスを備えたアーキテクチャのPCIスロットに挿入されていても、変更を加えることなく動作します。さらに、特定のデバイス用の単一のドライバは、 ISA、PCI、PCカードなど、複数の異なるバスを介して動作させることができます。
このプラットフォーム非依存性は、組み込みシステムの開発に役立ちます。特にNetBSD 1.6以降では、コンパイラ、アセンブラ、リンカ、その他のツールからなるツールチェーン全体がクロスコンパイルを完全にサポートしています。
2005年、組み込みシステムハードウェアのベンダーであるテクノロジックシステムズは、NetBSDの移植性と組み込みアプリケーションへの適合性を実証するために、NetBSDを搭載したキッチントースターを設計し、実証した。[ 23 ]
Wasabi Systems社は、 AMD Geode LX800、Freescale PowerQUICCプロセッサ、Marvell Orion、AMCC 405ファミリーのPowerPCプロセッサ、Intel XScale IOPおよびIXPシリーズなどのプラットフォームを含む、組み込みプラットフォーム向けの商用ポートを提供し、サポートしていた。
NetBSD クロスコンパイル フレームワーク (「build.sh」[ 24 ]とも呼ばれる) を使用すると、開発者は、異なるアーキテクチャのより強力なシステム (クロスコンパイル) から、異なるオペレーティングシステム (このフレームワークはほとんどのPOSIX準拠システムをサポート) を含む、あるアーキテクチャ向けの完全な NetBSD システムを構築できます。NetBSD を使用するいくつかの組み込みシステムでは、ツールチェーンとターゲットの再ホスト以外に追加のソフトウェア開発は必要ありませんでした。[ 25 ]
2017年時点で、NetBSDはamd64とSPARC64上で完全に再現可能なビルドを実現しました。[ 26 ] build.shフラグは再現可能なビルドを自動的に処理します。-P
NetBSDには、サードパーティ製アプリケーションソフトウェアパッケージの構築と管理のためのフレームワークであるpkgsrc (「パッケージソース」の略)が搭載されています。pkgsrcコレクションは、 2025年9月時点で29,000以上のパッケージで構成されています。[ 27 ] Lumina、KDE、GNOME、Apache HTTP Server、Perlなどのパッケージのビルドとインストールは、makefileシステムを使用して行われます。これにより、ソースコードの取得、解凍、パッチ適用、設定、ビルド、パッケージのインストールが自動的に行われ、後で削除できるようになります。ソースからコンパイルする代わりに、プリコンパイル済みのバイナリパッケージを使用することもできます。どちらの場合も、前提条件や依存関係はパッケージシステムによって自動的にインストールされ、手動での介入は不要です。
pkgsrc はクロスプラットフォームのパッケージング システムであり、NetBSD だけでなく、macOS、Solaris、Linuxを主なターゲットとする他のUnix ライクなプラットフォームでも使用できます。 [ 28 ]他のBSD、HP-UX、Minix、SCO UNIX ( UnixwareおよびOpenServer )、QNXには、アクティブな pkgsrc ユーザーが多数いますが、アクティブなメンテナンスは行われていません。
pkgsrc はSmartOS [ 29 ]およびMinix3 [ 30 ]のデフォルトのパッケージ管理システムです。また、以前はDragonFly BSD [ 31 ] の公式パッケージ管理システムとして採用され、MirBSD [ 32 ]および QNX [ 33 ]の代替パッケージングフレームワークとしても利用可能でした。
NetBSDは2004年のNetBSD 2.0リリース以来SMPをサポートしており[ 34 ] 、当初は巨大ロック方式を使用して実装されました。
NetBSD 5 リリースの開発サイクル中に、SMP サポートの改善に重点が置かれ、カーネルサブシステムの大部分が、きめ細かいロック方式を使用するように変更されました。新しい同期プリミティブが実装され、スケジューラのアクティベーションは2007 年 2 月に1:1 スレッド モデルに置き換えられました。[ 35 ] [ 36 ]スケーラブルな M2 スレッド スケジューラも実装され、[ 37 ]リアルタイム (RT) キューとタイム シェアリング (TS) キューが分離され、MP システムでのパフォーマンスが向上しました。スレッド化されたソフトウェア割り込みが実装され、同期が改善されました。仮想メモリシステム、メモリ アロケータ、トラップ処理がMP セーフになりました。VFSや主要なファイルシステムを含むファイルシステム フレームワークが MP セーフになるように変更されました。NetBSD 10.0 の時点では、カーネル オプションが有効になっていない限り、巨大なロックで実行されているサブシステムはSATAデバイス ドライバ、割り込みハンドラ、autoconf(9) フレームワーク、およびほとんどのネットワーク スタックのみです。[ 38 ]NET_MPSAFE
実際には、リリース 8.0 以降、ネットワーク スタックのさまざまな部分がすでに MP セーフになっていますが、[ 39 ] NET_MPSAFE はデフォルトで無効になっています。これは、巨大ロックによって保護されていない非 MP セーフなコンポーネントがメモリにロードされたときにカーネルがクラッシュする可能性があるためです。[ 40 ]
4.4BSD スケジューラは依然としてデフォルトのままですが、SMP に合わせてスケーリングするように変更され、SCHED_M2 の機能が統合されました。[ 41 ] 2017 年に、スケジューラは、長時間実行されるプロセスの負荷を複数の CPU に適切に分散するように変更され、調整可能なkern.schedsysctl (3) パラメータが導入されました。[ 42 ] NetBSD 10.0 のリリースにより、特にマルチプロセッサおよびマルチコア システムで大幅なパフォーマンス向上が実現しました。[ 43 ]スケジューラはNUMAとハイパースレッディングを大きく認識し、負荷をさまざまな物理 CPU に均等に分散できるようになっただけでなく、低速コアと高速コアが混在する環境 ( ARM big.LITTLEなど)でもスケーリングが改善されました。 [ 44 ]
NetBSDは、システムセキュリティを向上させるために設計された多くの機能をサポートしています。[ 45 ]以下にその一部を示します。
カーネル認証フレームワーク[ 46 ](またはkauth)は、カーネル内のすべての認証要求を管理するサブシステムであり、システム全体のセキュリティ ポリシーとして使用されます。kauth(9)は、カーネル自身のルーチン間のゲートキーパーとして機能し、特定の呼び出しまたは操作がコンテキスト内で許可されているかどうかをチェックし、許可されていない場合はEPERMを返します。 [ 47 ]ほとんどのシステムコールは、対応するハンドラで認証要求を発行しますkauth_authorize_action()。kauthは、外部モジュールが認証プロセスをプラグインすることも許可します。
Verified Executables (または Veriexec) は、NetBSD のカーネル内ファイル整合性サブシステムです。これにより、ユーザーはファイルのデジタル指紋(ハッシュ) を設定し、ファイルが指紋と一致しない場合にさまざまなアクションを実行できます。たとえば、Perlに対して、指紋に一致するスクリプトのみを実行するように設定できます。[ 48 ]
バージョン 2.0 以降、NetBSD はハードウェアが許容するプラットフォームで非実行可能マッピングをサポートしています。 [ 49 ]プロセススタックとヒープのマッピングはデフォルトで非実行可能です。これにより、潜在的なバッファオーバーフローの悪用が難しくなります。NetBSD は、ハードウェアが実行アクセスとデータアクセスを区別するすべてのプラットフォームでPROT_EXECパーミッションをサポートしていますmmap()が、必ずしも単一ページ単位の粒度ではありません。[ 50 ]
NetBSD は、ASLR (ユーザーランドとカーネルの両方[ 51 ] [ 52 ] )、PaXプロジェクトの制限付き( W^X ) および Segvguard、 GCCスタックスマッシング保護(SSP、または ProPolice としても知られ、NetBSD 6.0 以降デフォルトで有効) コンパイラ拡張機能など、いくつかのエクスプロイト緩和機能を実装しています。mprotect()
暗号化デバイスドライバ(CGD)は、物理ディスクやパーティション(CDやDVDを含む)、vnd(4)擬似デバイスなどの別のブロックデバイスの上に重ねられた論理デバイスとして動作することで、透過的なディスク暗号化を提供します。[ 53 ] AESのCBC/XTSモードに加えて、 Adiantum暗号もサポートしています。[ 54 ]
NetBSD 6.0で導入されたNPF [ 55 ]は、ステートフルパケットインスペクション、IPv6、NAT、IPセット、および拡張機能をサポートするレイヤ3パケットフィルタです[ 56 ] 。コアエンジンとしてBPFを使用し、bpfjitをサポートしています。NPFは、高性能、スケーラビリティ、マルチスレッド、およびモジュール性に重点を置いて設計されました。
セキュリティに関連するものとしては、 BSD securelevels [ 57 ] 、 DoS攻撃の悪用を防ぐために必要に応じてポートをブロックできるデーモン blocklistd(8) [ 58 ] 、およびWireGuardプロトコルの独自実装を提供するwg(4)インターフェース[ 59 ]などがあります。
NetBSD のコードは定期的にバグがないかスキャンされ、修正箇所を示すセキュリティ勧告が公式メーリングリストで公開されます。[ 60 ]
NetBSD は、1998 年にワシントン大学の Charles D. Cranor によって開発され、統合の問題を処理し、スワップ サブシステムを作成した Matthew Green によって NetBSD ソース ツリーにコミットされたUVM [ 61 ]仮想メモリシステムを使用しています。[ 62 ]
オリジナルのMachベースの4.4BSD システム[ 63 ]は NetBSD 1.4 で UVM に置き換えられました。[ 64 ] UVM は 4.4BSD VM システムの複雑さを軽減し、メモリマップド ファイルやコピーオンライトメモリなどの VM 機能を多用するアプリケーションのパフォーマンスを向上させるように設計されています。[ 65 ]
BSD VMと同じMD/MIレイヤリングとマッピング構造を維持しながら、[ 66 ] UVMはいくつかの注目すべき変更を導入しています。
vm_page構造体は、バッキング ストアへのアクセス方法を記述します。基本的には、これは UVM と、UVM にデータを提供する外部バッキング ストア (ディスクなど) との間の橋渡しとなる関数のリストへのポインタです。UVM のメモリ オブジェクトはページャー操作を直接指すため、ページャー関連のデータ構造の割り当てがより効率的になります。2003年にUVMはトップダウンのメモリ管理を使用するように変更され、ヒープの拡張用に確保された領域とmmap (2)で割り当てられた領域が統合されました。 [ 70 ]これにより、ヒープを大きくしたり、プロセスがより多くのオブジェクトやより大きなオブジェクトをmmapしたりすることが可能になります。
RAMホットプラグのサポートは2016年に追加された。[ 71 ] uvm_hotplug(9) APIは、以前公開されていたvm_physmem静的配列を赤黒木バッキングに置き換えてメモリセグメントを追跡し、物理ページのリストを動的に拡張または折りたたむことができるようにした。
NetBSD 10.0 のリリースサイクル中に、仮想メモリシステムの最適化に重点を置いた作業が行われました。[ 72 ]ページアロケータは、より効率的で CPU トポロジーを認識するように書き直され、予備的なNUMAサポートが追加されました。メモリ ページ ルックアップキャッシュで使用されるアルゴリズムは、より高速な基数木に変更されました。クリーン ページとダーティページの追跡とインデックス付けが改善され、大きなファイルでのfsync(2)の速度が桁違い に向上しました。ページ置換状態の維持をより並行的にすることで、ロック競合が軽減されました。
NetBSDでは、バージョン3.0以降、 Xen仮想マシンモニタがサポートされています。Xenを使用するには、 Xen専用のカーネルを「ホストOS」(Dom0)としてロードする特別なプリカーネルブート環境が必要です。適切なハードウェアリソースがあれば、Xen/DomU専用サポートの有無にかかわらず、任意の数の「ゲストOS」(DomU)仮想化コンピュータを並行して実行できます。
NetBSD 5 の Xen 互換ブートマネージャにより、 GRUBなどのサードパーティ製ブートマネージャの必要性がなくなりました。[ 73 ] NetBSD 6 を Dom0 としてベンチマークしたところ、Linux と同等の性能を示し、一部のテストでは Linux よりも優れたパフォーマンスを発揮しました。[ 74 ]
NetBSD 9.0 以降、ネイティブのタイプ 2ハイパーバイザNVMM (NetBSD Virtual Machine Monitor) を介して高速仮想化が提供されています。[ 75 ]これは、 QEMUlibnvmmなどのエミュレータで利用できる 仮想化 API を提供します。[ 76 ] [ 77 ] カーネル NVMM ドライバは、汎用マシン非依存フロントエンドで構成される動的にロード可能なカーネル モジュールとして提供され、これにマシン依存バックエンドをプラグインしてコア仮想化を実装できます (現在サポートされているのはx86 AMD SVM と Intel VMX のみです)。[ 78 ] NVMM のユニークな特性は、カーネルがゲスト VM メモリにアクセスせず、作成するだけであることです。[ 79 ] Intel の Hardware Accelerated Execution Manager (HAXM) は、Linux のKVM と同様に、Intel CPU 専用の QEMU の高速化のための代替ソリューションを提供します。[ 80 ]
NetBSD 5.0 では、カーネル空間の呼び出しをエミュレートすることでユーザー空間でドライバを実行するアーキテクチャであるrump カーネルが導入されました。 [ 81 ] rump カーネルは、メモリ使用量が少なく、攻撃対象領域が最小限に抑えられているという特徴を持つ、軽量でポータブルな仮想化ドライバ実行環境と見なすことができます。[ 82 ]
ランプカーネルの中核には、仮想メモリ、スレッドスケジューラ、I/O関数など、ホスト プラットフォームのリソースにアクセスできるようにする一連の基本ルーチンが含まれています。これは rampuser(3) ハイパーコール インターフェースと呼ばれます。[ 83 ] さまざまなカーネル サブシステム ( TCP/IPスタック、ファイルシステム、ハードウェア デバイス ドライバなど) は、総称してドライバと呼ばれ、ユーザー モードで実行できる NetBSD カーネルの簡略版にリンクすることで、ハイパーコール インターフェースの上にレイヤー化されています。ほとんどのドライバはオプションであり、対象アプリケーションと範囲に応じて含めることも含めないこともできます。
この「anykernel」設計により、NetBSDドライバのサポートを他のカーネルアーキテクチャに追加することが可能になります。[ 84 ]エクソカーネルからモノリシックカーネルまで。[ 85 ]ランプカーネルのその他の応用例としては、タスク固有のユニカーネルを展開して、それに依存するアプリケーションにPOSIX APIを提供すること、最小限のフットプリントで自己完結型データベースを実行すること、[ 86 ]ユーザー空間のWireGuardインスタンスを実行すること、[ 87 ] 特権のないユーザーとしてファイルシステムの内容を編集すること、Webブラウザーを独自のTCP/IPスタックに分離することなどが挙げられます。[ 88 ]
Rumpカーネルは、NetBSDプロジェクト内部でも、さまざまなカーネルサブシステムのテストを実行するため、またデバッグ目的で使用されています。[ 89 ]
NetBSDには、 iSCSI、ジャーナリングファイルシステム、論理ボリューム管理、ZFSファイルシステムなど、多くのエンタープライズ向け機能が含まれています。
ベンダーに依存しないRAIDボリューム管理のための bio(4) インターフェースは、bioctl を介して2007年以来NetBSD で利用可能です。 [ 90 ]ソフトウェア RAID のサポートは、NetBSD 1.4 以降で利用可能な CMU RAIDframe の移植版として提供されています。[ 91 ] ccd(4) ドライバは、1 つ以上のディスク/パーティションを 1 つの仮想ディスクに結合する機能を提供し、カーネル内の別の RAID 0 サブシステムとして機能します。[ 92 ]
UFS2 は、64 ビットのブロックポインタ、可変サイズのブロック (エクステントに類似)、拡張フラグ フィールドを追加した BSD FFSの拡張機能で、2003 年に FreeBSD から移植され[ 93 ] 、NetBSD 2.0 以降で利用可能になりました。[ 94 ] fss(4) [ 95 ]スナップショットドライバは同年導入され[ 96 ] 、特定の時点の FFS ファイルシステムの読み取り専用のアトミック ビューを作成できるようになりました。FFS スナップショットは特別なデバイスとして機能し、マウントしてdump(8)などのユーティリティと組み合わせて使用することで、システムバックアップを作成およびエクスポートできます。[ 97 ]
データジャーナリングを提供するFFSファイルシステム拡張機能であるWAPBLは、2008年にWasabi Systemsによって提供されました。[ 98 ]ジャーナリングにより、不完全なシャットダウン後にファイルシステムの一貫性を迅速に回復でき、特に多数のinodeを作成する際に同期メタデータ書き込みを減らすことで書き込みパフォーマンスが向上します。 [ 99 ] NetBSD FFS(v1/2)のソフトアップデートのサポートは、最終的にWAPBLに置き換えられました。[ 100 ]
リリース10.0以降、FFSv2は拡張ファイル属性とACL [ 101 ]、およびデータTRIM [ 102 ]もサポートしています。
Sun Microsystemsが開発したZFSファイルシステムは、2009 年に NetBSD ベース システムにインポートされました。[ 103 ] 2018 年に、ZFS コード ベースが更新され、FreeBSDの実装に基づいて再ベース化されました。[ 104 ] ZFS は、NetBSD 9.0 でついに日常使用に安全であるとマークされました。[ 105 ] 10.0 リリース時点では、NetBSD ZFS スタックは、ZFS ファイルシステム バージョン "5.3"、zpool バージョン "5000" (一部の機能フラグはサポートされていません) で、FreeBSD 12 (またはそれ以前) のものと同等です。[ 106 ] [ 107 ]ネイティブ ZFS 暗号化は明らかに欠落していますが、zpool は cgd(4) 暗号化ディスク内に作成できます。[ 108 ] ZFSルート の初期サポートは利用可能ですが、インストーラにもブートローダーにも統合されていません。[ 109 ]
NetBSD 論理ボリュームマネージャは、BSD によるデバイスマッパードライバの再実装と Linux論理ボリュームマネージャツールの移植に基づいています。これは主にGoogle Summer of Code 2008 の期間中に作成されました。 [ 110 ]
CHFSフラッシュメモリファイルシステムは、2011年11月にNetBSDに導入されました。CHFSは、ハンガリーのセゲド大学ソフトウェア工学部で開発されたファイルシステムであり、NetBSD向けに書かれた初のオープンソースのフラッシュ専用ファイルシステムです。
NetBSD 5.0で導入されたPUFFSフレームワーク[ 111 ]は、ユーザー空間でファイルシステムを実行するために設計されたカーネルサブシステムであり、perfused(8)ユーザーランドデーモンと連携してFUSEカーネルレベルのAPI互換性を提供します。
NetBSD 用の従来のインメモリデータ構造を使用した tmpfs 実装は、2005 年に Julio M. Merino Vidal によって GSoC プロジェクトとして初めて開発され[ 112 ]、同年NetBSDソースツリーにマージされました[ 113 ] 。
ソースコードレベルでは、NetBSDはPOSIX.1 (IEEE 1003.1-1990)規格にほぼ完全に準拠しており、POSIX.2(IEEE 1003.2-1992)にもほぼ準拠しています。
NetBSD は、適切なプロセッサ アーキテクチャ上で、以前のリリースだけでなく、LinuxやSunOS 4 などの他の 4.3BSD 派生システムを含む、他のUNIX派生および UNIX ライクなオペレーティングシステムともシステム コールレベルのバイナリ互換性を提供します。これにより、NetBSD ユーザーは、他のオペレーティングシステムではバイナリ形式でのみ配布されている多くのアプリケーションを、通常はパフォーマンスの著しい低下なしに実行できます。[ 114 ] Haikuバイナリ互換レイヤーの初期サポートは、netbsd-user メーリング リストで公開されました。[ 115 ]
NetBSDでは、ZFS、FAT、NTFS、Linux ext2fs、Apple HFS、Mac OS X UFS、RISC OS FileCore/ADFS、AmigaOS Fast File System、IRIX EFS、Version 7 Unix File Systemなど、さまざまな「外部」ディスクファイルシステム形式もサポートされており、 PUFFSを介してさらに多くの形式がサポートされています。
WINE はpkgsrcを介して NetBSD にインストールできます。[ 116 ] WoW64USER_LTDに必要なカーネルサポートは、2017 年に Maxime Villard によって提供され、[ 117 ] Win32アプリケーションをamd64で実行できるようになりました。[ 118 ] NetBSD 用の wine の amd64 ポートは、GSoC 2019の一環として Naveen Narayanan によって完成されました。 [ 119 ]
NetBSD 7.0 ではLuaプログラミング言語によるカーネル空間スクリプトが追加されました。 [ 120 ] Lua 言語 (つまり、そのインタプリタと標準ライブラリ) は、GSoC 2010 中に Lourival Vieira Neto によって NetBSD カーネルに最初に移植され、それ以来いくつかの改良が加えられています。[ 121 ] Lua (ユーザー空間) テスト スイートは、GSoC 2015 中に NetBSD カーネル Lua に移植されました。[ 122 ]
ユーザー空間Luaとカーネル空間Luaには主に2つの違いがあります。カーネルLuaは浮動小数点数をサポートしていないため、Luaの整数のみが使用可能です。[ 123 ]また、オペレーティングシステムに依存するユーザー空間ライブラリ( ioやosなど)を完全にサポートしていません。カーネルLua用のI/O(ファイルシステムとソケット)バインディングのサンプル実装はGuilherme Salazarによって開発されました。[ 124 ]
Luaカーネルインタープリタの応用例としては、NPFパケットフィルタの拡張機能の組み込み[ 125 ] [ 126 ] や、Luaスクリプトとして提供されるサンドボックスポリシーを備えたkauth(9)に基づくカーネル内アプリケーションサンドボックスの構築[ 127 ]などが挙げられる。
NetBSD は、カーネルがパニックを起こす場合にデフォルトで呼び出される最小限のカーネル デバッガである DDB(4) を提供します。 [ 128 ] DDB を使用すると、プロセスとスレッドを検査したり、デッドロックを調査したり、スタック トレースを取得したり、後で分析するためにカーネルクラッシュ ダンプを生成したりできます。[ 129 ]
厳密な整合性チェックは、オプションを指定してカーネルをビルドすることで有効になりますDIAGNOSTIC。これにより、内部データ構造の破損(カーネルのNULLポインタ参照解除など)が検出された場合、カーネルがパニックを起こします。[ 130 ]
NetBSD は、カーネル内のさまざまなバグ検出機能もサポートしています。[ 131 ]コードサニタイザー(未定義動作、アドレス、スレッド、メモリサニタイザー) [ 132 ] [ 133 ]カーネルメモリ開示検出システム (KLEAK) [ 134 ]や heartbeat(9) と呼ばれるカーネル診断サブシステム[ 135 ]などです。
NetBSD では、バージョン 0.9 以降、ロード可能なカーネル モジュールがサポートされています。Terry Lambert によって書かれたオリジナルの lkm(4) インターフェース[ 136 ]は、モジュール間の依存関係の処理と、必要に応じてカーネル モジュールをロードすることをサポートする新しい modules(7) サブシステム[ 137 ]に置き換えられました。[ 138 ]
モジュールとカーネルの残りの部分との間のメモリ保護が不十分であるというセキュリティ上の懸念から、新しいモジュールは、securelevelが0以下の場合、またはカーネルがINSECUREオプションを指定してビルドされた場合にのみロードできます。
すべてのカーネルモジュールは、Cマクロを介してメタデータを定義し、カーネルがモジュールのロードやアンロードなどの重要なモジュール関連イベントを報告するために呼び出すをMODULE(class, name, required)実装する必要があります。 [ 139 ]MODNAME_modcmd function
NetBSD は BSD スタイルのinit を使用します。
初期ラムディスクの使用をサポートする機能はありますが、デフォルトでは有効になっていません。[ 140 ]ただし、特定の構成(ルート 暗号化など)の場合は例外です。[ 141 ]
rc.d(8)フレームワークは、NetBSD 1.5 [ 143 ]用にLuke Mewburn [ 142 ]によって設計され、 System Vと同様に個々のシェルスクリプト を使用してサービスを制御する、完全にモジュール化されたサービス管理システムを提供しますが、ランレベルはありません。[ 144 ] init(8)によって/etc/rc/が呼び出されると、ディレクトリにあるスクリプトが実行されます。スクリプトの実行順序は、各スクリプト内にある依存関係タグに記述された要件に基づいて、rcorder(8)ユーティリティによって決定されます。[ 145 ]/etc/rc.d
NetBSD は 1999/2000 年以来、ネイティブのハードウェア監視フレームワークを備えています。2003 年に、NetBSD のドライバの一部が OpenBSD に移植された際に、 OpenBSDの sysctl hw.sensorsフレームワークの着想源となりました。[ 146 ]
2019年3月現在 NetBSD には、 envsys フレームワークの API を介してデータをエクスポートするデバイスドライバが 85 個近くありました。2007 年の改訂以降、カーネルとユーザーランド間のデータのシリアル化は、NetBSD のproplib(3)の助けを借りてXMLプロパティ リストを介して行われます。
NetBSD audio(4) [ 147 ]カーネル API はSunOSサウンドスタック (SADA) [ 148 ]をモデルにしており、異なる基盤となるオーディオハードウェアドライバの上に統一されたプログラミングインターフェースレイヤーを提供すると同時に、さまざまなサウンドライブラリ ( SDL、PortAudio、 Mozilla cubeb ) が使用できるバックエンドも提供します。
アプリケーションは、sys/audioio.hヘッダーファイルで指定されている一連のioctlを使用して、 /dev/audioデバイス ノードと直接やり取りできます。 ioctl を使用してオーディオ デバイス情報を照会できます。 サウンドの再生と録音には、/dev/audio をread() / write()操作用に開き、構造体をカーネルに渡す必要があります。 これにより、追加の抽象化レイヤー (他のサウンド ライブラリやサウンド サーバー)を使用する場合と比較して、オーディオの遅延と CPU 使用率が削減されます。[ 149 ]AUDIO_GETDEVaudio_info
NetBSD 8.0ではオーディオスタックが再設計され、仮想チャンネルをサポートするカーネル内ソフトウェアミキシングエンジンが提供されるようになりました。 [ 150 ]これにより、複数のプロセスが同時にオーディオを再生または録音できるようになります。
OSS APIの互換モードはsoundcard.hヘッダーファイルとlibossaudioライブラリによって提供され、[ 151 ]これらは内部的にネイティブの Sun ライクなオーディオ インターフェースを使用して動作します。
NetBSDには、マシンに依存しないmidi(4) [ 152 ]システムによる組み込みのMIDIサポートが含まれています。

NetBSD のクリーンな設計、高いパフォーマンス、スケーラビリティ、および多くのアーキテクチャのサポートにより、組み込みデバイスやサーバー、特にネットワーク アプリケーションでの利用につながっています。[ 154 ] [ 155 ] NetBSD は、長期にわたる信頼性 [157] と後方互換性のない変更の導入を避ける傾向があることから、 Web向けサーバーのバックエンドスタックとしても使用できます。[ 156 ] [ 158 ]
NetBSD は、軽量で幅広いハードウェア アーキテクチャをサポートしているため、レトロ コンピューティング愛好家の間で人気を集めています。 [ 159 ] [ 160 ] NetBSD は、DEC VAXenからCommodore AmigaやIBM PCまで、ビンテージ ハードウェアを復活させるために使用されています。[ 161 ] [ 162 ] [ 163 ]
商用リアルタイムオペレーティングシステムであるQNXは、NetBSDコードに基づくネットワークスタックを使用しており、[ 164 ] [ 165 ] NetBSDから移植されたさまざまなドライバを提供しています。[ 155 ]
Dell Force10 は、高拡張性スイッチ/ルーターで使用される FTOS (Force10 オペレーティングシステム) の基盤となるオペレーティングシステムとして NetBSD を使用しています。[ 166 ] Force10 は、研究とオープン開発コミュニティの発展を支援するため、2007 年に NetBSD Foundation に寄付を行いました。[ 167 ]
NetBSDは、国際宇宙ステーションの微小重力環境を測定するNASAのSAMS-IIプロジェクト[ 168 ] [ 169 ]や、衛星ネットワークで使用するTCPの調査[ 170 ] [ 171 ]で使用されました。
IBMはNetBSDをベースとしてIBM Thin Client Manager(TCM)を開発し、NetVistaシンクライアントファミリーのN2200eおよびN2800eモデルに搭載した。[ 172 ]
2004年、SUNETはNetBSDを使用してInternet2の陸上速度記録を樹立した。NetBSDが選ばれた理由は「TCPコードのスケーラビリティ」のためである。[ 173 ]
NetBSDは、Apple独自のMac OS X(Unixレベルのユーザーランドコードの大部分はFreeBSDコードから派生しているが、一部はNetBSDコードから派生している)の代わりに、 AppleのAirPort ExtremeおよびTime Capsule製品でも使用されている[ 174 ] [175] [ 176][ 177 ] 。
複数の企業が社内でNetBSDを使用していることが知られている。
T-Mobile Sidekick LX 2009スマートフォンのオペレーティングシステムは NetBSD をベースにしている。[ 190 ]
Minixオペレーティングシステムは、バージョン3.2以降、主にNetBSDユーザーランドとpkgsrcパッケージインフラストラクチャを使用しています。 [ 191 ]
macOSの一部は、ユーザー空間のコマンドラインツールなど、元々はNetBSDから取り入れられたものです。[ 192 ] [ 193 ] [ 194 ]
Androidに含まれるC 標準ライブラリであるBionic は、NetBSD libc のコードを取り入れています。[ 195 ]
NPFパケットフィルタは、 Outscale [ 196 ]やBisonRouter [ 197 ]などの商用製品で使用されています。
NetBSD独自のcurses実装[ 198 ]はSabotage Linuxで使用されている。[ 199 ]
Rumpカーネルは、追加機能を提供するために他のオペレーティングシステムにも統合されています。
SDF Public Access Unix System は、リモートからアクセス可能なコンピューティング設備を提供することを目的とした非営利のパブリック アクセスUNIXシェル プロバイダーであり、インフラストラクチャの基盤として NetBSD を使用しています。 [ 204 ] NetBSD を実行する 8 台の 64 ビット エンタープライズ クラス サーバーのネットワークにより、合計で 21.1 GFLOPS (2018 年)を超える処理能力を実現しているSDF.org クラスターは、世界最大の NetBSD インストールであると考えられており、事実上、将来の NetBSD リリースのテストベッドとして機能しています。[ 205 ] [ 206 ]
NetBSDはPlayStation Portableの通信機能に使用されています。[ 207 ]
NetBSDカーネル全体とコアユーザーランドのソースコードの大部分は、BSDライセンス(2条項、3条項、4条項のバリアント)の条件に基づいて公開されています。これにより、著作権表示とライセンス条項を削除しない限り、誰でも自由に利用、変更、再配布、販売することができます(4条項のバリアントには、宣伝資料に関する条項も含まれています)。したがって、ソースコードの変更を公開することなく、NetBSDをベースとした製品の開発が可能です。一方、 NetBSDには適用されないGPLでは、製品のソースコードへの変更は、その変更から派生した製品がリリースされる際に、製品の受領者に公開されなければならないと規定されています。
2008年6月20日、NetBSD Foundationは、第3条のUCBサポートと第4条の業界適用性に関する懸念を理由に、2条項BSDライセンスへの移行を発表した。[ 208 ]
NetBSD には、GPL やその他のオープンソース ライセンスでカバーされているGNU開発ツールやその他のパッケージも含まれています。他のBSDプロジェクトと同様に、NetBSD は、より制限的なライセンスの下にあるコードを簡単に削除できるように、ベース ソース ツリーでそれらを分離しています。[ 209 ]パッケージに関しては、インストールされているソフトウェア ライセンスは、pkgsrc 設定ファイル ( ) の許可されたライセンスのリストを変更することによって制御できますmk.conf。
以下の表は、NetBSDの主要なリリースとその注目すべき機能を、新しいリリースの順(逆順)に示しています。マイナーリリースとパッチリリースは含まれていません。
グラント・ビセットがデザインしたNetBSDの「旗」ロゴは2004年に導入され、1994年にショーン・ミューラーがデザインした古いロゴ[ 232 ]を抽象化したものです。ミューラーのバージョンは、有名な第二次世界大戦の写真「硫黄島に星条旗を掲げる」[ 233 ]に基づいています。
NetBSD Foundation は NetBSD に関連する知的財産と商標を所有する法人であり、[ 234 ] 2004 年 1 月 22 日に501(c)(3) の免税非営利団体となりました。財団のメンバーは CVS コミットアクセス権を持つ開発者です。[ 235 ] NetBSD Foundation には、メンバーの投票によって 2 年任期で選出される理事会があります。[ 236 ]
プロジェクトのホスティングは主にコロンビア大学とウェスタン・ワシントン大学が担当し、 Fastlyが提供するCDNを介して提供されています。プロジェクトのミラーサイトは世界中に分散しており、ボランティアやプロジェクトの支援者によって提供されています。
は、Berkeley Software Distribution (または BSD) オペレーティングシステムの 386/BSD ブランチのフォークです。
は、クリーンな設計と優れたアーキテクチャのソリューションに重点を置いています。
移植性の高いオペレーティングシステムの例としては、Minix、NetBSD、および多くの研究用システムなどが挙げられる。
この 2 つのオペレーティングシステムは多くのコードを共有しており、たとえば OS X のほとんどのユーザーランドユーティリティと C ライブラリは FreeBSD バージョンから派生しています。
はNetBSD開発サイトです。
は、より制限的なライセンスの下でのコードの削除を容易にするために、ベースソースツリー内のそれらを分離しています。
各理事の任期は2年とする。