Skip to content

NS-2 support (removed in v2.0.0)

Everything about the former NS-2 target in one place: what was removed, where to get it, and why. The README carries a single pointer here rather than repeating any of it.

Status in one line: the NS-2 adapter was removed in v2.0.0 (#307). It was frozen at v1.2.0, the last release NS-2 work was done for, and shipped unchanged through v1.9.0, the last release that contains it.

Where to get it

Last actively-supported release v1.2.0 — citable at its own version DOI, 10.5281/zenodo.21762983
Last release that ships the adapter v1.9.0
First release without it v2.0.0 (dropping a platform is breaking, so it needed a major)
Images ghcr.io/danieljoppi/anthocnet-ns2:2.34 / :2.35 and the plain ns2:2.34 / :2.35; the immutable -v1.2.0 pins (anthocnet-ns2:2.34-v1.2.0, :2.35-v1.2.0) are the reproducible ones. Nothing published is deleted, but no new NS-2 image is built after v2.0.0

To run it, check out a tag that ships it and use that tree's own instructions:

git clone https://github.com/danieljoppi/AntHocNet.git && cd AntHocNet
git checkout v1.2.0            # or v1.9.0
make install-ns2 NS2DIR=/path/to/ns-allinone-2.3x/ns-2.3x
cd /path/to/ns-allinone-2.3x/ns-2.3x && make
docker run --rm -it ghcr.io/danieljoppi/anthocnet-ns2:2.35-v1.2.0   # `ns` with the agent

Per-adapter detail (patch anchors, TCL bindings, example scenarios) is in that tree's ns2/README.md.

Why it was retired

The full reasoning is on #307; the short version:

  • It was the only target that required edits inside the simulator's own tree. ns-3 installs as an additive contrib/ module; NS-2 needed an idempotent anchor-based source patch (ADR-0005, now historical) that broke — loudly, by design — whenever upstream moved a text anchor.
  • It never got a benchmark harness. The NS-2 leg ran a CI smoke asserting non-zero delivery over a forced 2-hop route and nothing else, so the "cross-simulator validation" it was meant to provide was never actually built.
  • Contemporary reviewers read NS-2 in a 2026 paper as a reproducibility red flag rather than a credential (the survey work behind #298).
  • It consumed real CI and packaging budget: two adapter-compile jobs against real ns-2.34/2.35 trees, a valgrind leg, a patch round-trip job, and four published container images.

Papers are version-scoped (the maintainer decision recorded on #307): a paper written against a release that ships both adapters is not falsified by a later release that ships one.

What the removal did not change

The simulator-agnostic core/, the ports seam, the wire codec and the "no NS headers in core/" golden rule all stay — ADR-0023, which supersedes ADR-0002, records why. The core still has two consumers: the ns-3 adapter and the browser adapter that runs it as WebAssembly on the learn site (ADR-0021).

See also

  • porting-notes.md — the bugs fixed while extracting the core from the original NS-2 module, and the wire-format caveats.
  • ADR-0005 — why the patch was anchor-based and idempotent rather than line-numbered (historical).
  • #307 — the removal epic: decision, scope, phases, acceptance.