# Netstack3 - A Fuchsia owned rust based netstack

- Authors: ghanan@google.com, asafi@google.com
- Project lead: tamird@google.com
- Area(s): Connectivity

## Problem statement

The current netstack is written in Go which is not an approved language (and is
garbage collected) and is owned by the gVisor team who have different
priorities, use cases and design goals than Fuchsia. The gVisor netstack was
not originally designed to run on real devices, operate as a router or support
dynamic configurations; Fuchsia on the other hand does run on real devices,
operates as a router and depends on dynamic configurations (gVisor originally
didn't expect addresses, routes, network interfaces or their link status to
change at runtime).

## Solution statement

By developing a netstack that the Fuchsia team owns, we can design with
Fuchsia's goals in mind without having to depend on another team and work
around their use cases and restrictions. The Fuchsia Netstack team will design
and implement a Rust-based netstack that achieves functional parity with the
existing netstack, while leveraging the type and memory safety of rust.

## Dependencies

All users and components should be unaware of the netstack switching underneath
them.

## Risks and mitigations

Risks:

- The netstack is extremely load bearing as all workflows and product use cases depend on network connectivity.
- Interoperability with netstacks on other platforms (Linux, BSD, Windows, etc.).
- Performance risks. We still can't estimate N3 performance to validate we're at parity.
- Posix compatibility.

Mitigations:

- Use industry standard tools/partners to ensure RFC compliance and interoperability (IxANVL, INTACT, NOVUS labs, etc.).
- Leverage netstack and platform independent tests to test Netstack3 with the behaviour of the existing netstack and Linux.
- Measure performance of the Netstack 3 during its iterative development.
- Phased migration into Netstack3 with a plan to start running current CI workloads as soon as Netstack3 is capable. In addition, transition eng/dev targets to Netstack3 before product targets.

The netstack team has been planning for how to reliably test Netstack3 and
ensure parity with the existing netstack to avoid regressions when a switch is
made; the above mitigations are examples of what the team *is currently doing*.
IxANVL and INTACT tooling do not make assumptions about the underlying netstack
implementation and the tests mentioned above can be updated to also run on
Netstack3 once it is ready.
[](https://issues.fuchsia.dev/issues/new?component=1439230&template=1881640&description=Issue+on:+https://fuchsia.dev/docs/contribute/roadmap/2021/netstack3.md "Report a bug or suggest improvements on this page") [](https://cs.opensource.google/fuchsia/fuchsia/+/main:docs/contribute/roadmap/2021/netstack3.md "View the source code of this page") [](https://ci.android.com/edit?repo=fuchsia/fuchsia/main&file=docs/contribute/roadmap/2021/netstack3.md&cloneRepo=fuchsia/fuchsia:refs/heads/main&fullPath=fuchsia/docs/contribute/roadmap/2021/netstack3.md "Edit the source code of this page")