Skip to content
Export

Intentional deviations from Python RNS

This page lists every place Reticulum-Go deliberately differs from the Python reference implementation, and why. Wire-visible behavior is intended to match upstream. When it does not, that is a bug: file an issue.

Three categories exist:

  • Local hardening bounds: caps on memory or state that upstream leaves unbounded. They change nothing on the wire for conforming peers.
  • Local-only extensions: features that never appear on a shared medium or in packets a Python peer would parse differently.
  • Wire-visible extensions: additions a Python peer can observe. These are additive and ignored by upstream where noted.

Local hardening bounds

BoundValueRationale
Split-resource assemblies per link4Assemblies retain attacker data. Upstream has no cap
Split-resource assembly size1 GiB hard ceilingDeclared d is attacker-controlled until verified
Split-resource segmentsSequential index only, replay rejectedUpstream assumes in-order arrival. Enforcing it kills memory amplification
RNode packet queue256 packets per directionUnbounded queue grew under sustained RX flood
RawChannelReader unread buffer8 MiBUnreadable buffer grew without limit
Channel receive windowDrop sequences more than WINDOW_MAX (48) aheadSame check upstream applies. It also bounds ring residency
msgpack map keysNon-comparable keys rejectedGo panics on unhashable keys where Python tolerates them
Per-packet panic recoveryWorker recovers and continuesA malformed packet must not kill the process

Local-only extensions

FeatureNotes
Node lifecycle API (OnNetworkAvailable, ReloadInterfaces, control API)Embedder surface. No wire change
QUIC, WebSocket, WebTransport, VSOCK, HTTPS long-poll, DNSRendezvous interfacesNew underlay endpoints. Packet bytes on the medium are unchanged HDLC/framing
Landlock + seccomp sandboxLocal hardening
pkg/health counters, reticulum-go slowObserve-only diagnostics
RHB1 hardware-bound identity descriptorLocal storage format. Python reads only the 64-byte software layout

Wire-visible extensions

FeatureWire-visible?Upstream behavior
TRANSPORT_IMPL announces as reticulum-go + build versionYesHonest identification. Upstream announces rns
OP_PAGE 0xF1 provisional operator page fieldYesIgnored by current Python RNS
rngit /media blob routeYesNot present in Python rngit. A Reticulum-Go extension
SDR burst modemYesLab/testing only, not air-compatible with Modem73/RNode

What is NOT here

No changes to packet layout, crypto primitives, signature inputs, link handshake, resource hashmap semantics, announce format, LXMF payloads, or stamp workblock construction. If a difference in those areas is found, it is a bug.