Ns (シミュレータ)
概要
この離散事象ネットワークシミュレータの系列は、全て研究と教育のために用いられる。ns-3プロジェクトの最終的な目標は、コンピュータネットワークに関する研究のコミュニティ内において好んで利用されるオープンなシミュレーション環境の構築である。この目標に関しては、実際にコンピュータネットワーク分野のトップカンファレンスであるACM SIGCOMMへの論文投稿で頻繁に使用されていることが確認されているため、ns-3プロジェクトの目標は概ね達成されていると言える。ns-2はアメリカの学術研究機関を中心に開発が進められていたが、ns-3はフランスの学術研究機関を中心に開発が進められている。また、ns-3ではAnnual Meetingと称したns-3の利用者・開発者の会議が毎年行われており、ワークショップ等も行われている。ns-3はGNU GPLv2 ライセンスの下で、無償での研究・開発・使用が認められている。コンピュータネットワークシミュレータとしての世界シェアはトップであるが、コンピュータネットワーク関係者全体を見れば、ns-3ユーザーは少なく、ns-3ユーザーからのソースコードのコミットもあまり芳しくないという状況がある。
1988年 (前史:REALの基礎開発)
1988年に、nsの派生元に当たるREALの最初のバージョンが開発された。
カリフォルニア大学バークレー(UCB)校において、Srinivasan Keshavにより、fair queueing Gateway Algorithm [Nag87][DKS88],first-come-first-served scheduling Gateway Algorithm,DEC Gateway Algorithm [RCJ87,RaJ87]の各々の性能を比較する学術研究の一環として、離散事象ネットワークシミュレーションに関する明確かつ実用的な枠組みが構築された。このシミュレータの詳細はREAL: A Network Simulatorという論文に纏められて発表された。
REALはREalistic And Largeの略称であり、コロンビア大学が開発を進めていたNEST simulation toolkitを用いて構築された。REALは最初期の実用的なネットワークシミュレータとなった。REALの開発は1997年のVer.5.0まで継続され、ソフトウェアアーキテクチャはnsの基盤にもなった。
1995年 - 1997年 (ns-1の基礎開発)
ローレンス・バークレー国立研究所 (LBNL) において、Steve McCanne, Sally Floyd, Kevin Fall等が参加するNetwork Research Groupにより、REALで定義されたソフトウェアアーキテクチャを元にしてnsの最初のバージョンである ns version 1 (LBNL Network Simulator) が開発された。このバージョンは後にns-1と呼ばれるようになった。
REALと同様に、拡張可能で、容易に設定・プログラム可能なイベントドリブン型のシミュレーションエンジンとして設計が行われた。また、TCPの輻輳制御アルゴリズムとルータスケージュールアルゴリズムを複数搭載した。シミュレーションで取り扱うネットワークを定義するシナリオの記述言語がTcl,通信プロトコルを駆動するコアの記述言語がC++に定められた。
1996年 - 1997年 (ns-2の基礎開発)
Steve McCanneがns-1のリファクタリングを行った結果のソースコードを元にns-2の開発が行われた。シナリオの記述言語がOTcl (Object Tcl),コアの記述言語がC++に変更された。シナリオ言語がオブジェクト指向言語に改められたため、OTclとC++のオブジェクト間で関連性を持たせることが出来るようになった。しかし、ns-1とns-2の間でクラスやモジュールの互換性は保たれている。また、ns-2でGPLv2に準拠するようになった。
2006年  (ns-3の基礎開発)
ns-2の開発開始から10年経過する過程で、CPUの進化において高クロック化からマルチコア化へのパラダイムシフトが起き、無線ネットワークの普及も急速に進み始めた。それに伴って、ns-2のソフトウェアアーキテクチャでは、開発当初想定していなかった並列化によるシミュレーション処理のスケールと無線ネットワークへの対応が難しいという問題が現れ始めてきた。その2つの問題に対処するために、アメリカ国立科学財団 (NSF)の支援の下で、Tom Henderson, George Riley, Sally Floyd, and Sumit Roy等が先導するチームにより、ソフトウェアアーキテクチャを全面的に刷新したns-3が開発された。ns-3では、開発者がOTclとC++という異なるプログラミング言語のオブジェクト間の関連性を意識しなくて済むように、シナリオ,コア共に記述言語がC++に統一された。この変更により、ns-2とns-3の間のクラスやモジュールの互換性は無くなった。また、Gustavo CarneiroによりPythonバインディングとWafビルドシステムが開発されて新たに導入された。さらに、無線ネットワークのシミュレーションコードの充実,MPIによる並列化対応が行われた。ソフトウェアアーキテクチャの刷新に伴い、ns-2まで存在したビジュアライザであるNamは廃止された。その代わりに、シミュレーション実行終了時に出力されるトレースファイルを読み込んでトポロジ上にパケットフローを表示するオフラインビジュアライザとしてNetAnimが、シミュレーション実行中にシミュレータの内部にアタッチし、パケットの流れをトレースしてトポロジ上にパケットフローを表示するオンラインビジュアライザとしてPyVizが用意された。ns-2の時代のドキュメントの不足を反省し、各種ドキュメントが拡充され、Doxygenによりソースコードから生成されたAPIリファレンスも用意されるようになった。
以前のメジャーバージョンであるns-2では過去に開発された有線ネットワークのプロトコルのシミュレーションコードが充実していた。しかし、最新のns-3では、ns-2とのクラスやモジュールの互換性を捨てて無線ネットワークへの対応を強化したため、有線ネットワークのプロトコルのns-3ネイティブなシミュレーションコードが不足している状態である。そのため、学術界全体としてns-2からns-3への移行は難航しており、ns-2の開発停止後も長らくの間、有線ネットワークの分野ではns-2、無線ネットワークの分野ではns-3という住み分けが続いている。
依然としてns-3の開発は継続されているが、未だにns-2と比較して実装されていないアルゴリズムが多く、ネットワークの基本的な動作にもバグが多い(マルチキャスト転送で、ノードに接続されたNICの枚数倍だけ不必要にパケットを複製して送信するバグが、2016年3月24日リリースのns-3.25まで修正されていなかった)。従って、ns-2と比較してシミュレータとしての信頼性が低い模様である。