Ideas for NNCP Projects

I sometimes see people read about NNCP and wonder “This sounds great! But… what can I do with it?” This page aims to answer those questions.

Either before or after reading this page, you might find these three pages useful:

A Quick Word on Background

NNCP frees you from the tyranny of online.

Compared to something like ssh, with NNCP, you trade latency for reliability and flexibility. It might take a little longer to get there, but you can be really sure it gets there.

With NNCP, you also don’t actually need a network between the systems. USB sticks can carry your data.

Airgapped Systems

Airgaped systems are ones that are physically disconnected from each other, often for Computer Security reasons. They are great for handling sensitive information or things such as Backups. My blog post How and Why to use Airgapped Backups discusses this. The page Dead USB Drives Are Fine: Building a Reliable Sneakernet goes into detail on a more sophisticated approach as well.

You could also build an airgapped archive box, for instance.

In general, you can use a USB stick, CD-ROM, or whatever to handle transport to airgapped systems.

Intermittent or Slow Connectivity

For systems that have intermittent, or just slow, connectivity, NNCP can be great. Examples of these scenarios include wilderness or rural areas, various forms of travel (air, cruise ships, etc), even devices that have wifi but lack 4G/5G connectivity.

The NNCP documentation has a number of examples in its integration page, which include a web site or file downloading service, Email transfer, and so forth. Additionally, you can integrate with Kiwix and ZIM Files to facilitate offline reading.

See also my article Tools for Communicating Offline and in Difficult Circumstances.

File Distribution and Synchronization

My program gitsync-nncp takes advantage of NNCP’s multicast areas to form what is essentially a distributed Mesh Network that propagates git commits.

Remote Execution

More broadly, my article A Simple, Delay-Tolerant, Offline-Capable Mesh Network with Syncthing discusses using nncp-xfer over syncthing. This can of course distribute files, but also handle nncp-exec requests. Why is this cool? Imagine:

tar -cpf - /usr/local | nncp-exec bob tarextract

The extraction might take place days later; like ssh, it doesn’t have to be online simultaneously.

Now, what if /usr/local was 100GB? Consider the non-NNCP alternative using a ssh command like this:

tar -cpf - /usr/local | ssh bob tar -xvf -

In that example, the transfer will only succeed if the source, destination, and all networks connecting them, remain up for the entire duration of the 100GB transfer. With NNCP, transfers are resumable. When using the nncp-exec example above, your data may take longer to get there in ideal network conditions (because of the additional spooling). But you have greater faith that it WILL get there eventually; NNCP transfers are resumable, can use USB sticks as transport, etc. See more on this on my NNCP Concepts page.

Offline Package Updates

apt-offline for Debian and Debian-derived systems can easily run atop NNCP, which makes it easy to deliver security and other updates – or even simple software installation – to systems without good Internet connectivity.

Email

You can send email out using NNCP. The Integration page gives information on Postfix and Exim, but others would be supported too.

Also take a look at Building an Asynchronous, Internet-Optional Instant Messaging System.

Usenet

NNCP makes a great carrier for Usenet! See Usenet over NNCP for details.


NNCP lets you securely send files, or request remote execution, between systems. It uses asynchronous communication, so the source and destination need never be online simultaneously. NNCP can route requests via intermediate devices – other NNCP nodes, USB sticks, tapes, radios, phones, cloud services, whatever – leading to a network that is highly resilient and flexible. NNCP makes it much easier to communicate with devices that lack Internet connectivity, or have poor Internet.