💾 Archived View for complete.org › ideas-for-nncp-projects captured on 2024-08-24 at 23:36:45. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-08-18)
-=-=-=-=-=-=-
I sometimes see people read about NNCP[1] 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:
4: /getting-started-with-nncp/
5: /asynchronous-communication/
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.
Airgap[6]ed systems are ones that are physically disconnected from each other, often for Computer Security[7] reasons. They are great for handling sensitive information or things such as Backups[8]. My blog post How and Why to use Airgapped Backups[9] discusses this. The page Dead USB Drives Are Fine: Building a Reliable Sneakernet[10] goes into detail on a more sophisticated approach as well.
9: https://changelog.complete.org/archives/10160-how-why-to-use-airgapped-backups
10: /dead-usb-drives-are-fine-building-a-reliable-sneakernet/
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.
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[11] page, which include a web site or file downloading service, Email[12] transfer, and so forth. Additionally, you can integrate with Kiwix and ZIM Files[13] to facilitate offline reading.
11: https://nncp.mirrors.quux.org/Integration.html
See also my article Tools for Communicating Offline and in Difficult Circumstances[14].
14: /tools-for-communicating-offline-and-in-difficult-circumstances/
My program gitsync-nncp[15] takes advantage of NNCP's multicast areas[16] to form what is essentially a distributed Mesh Network[17] that propagates git commits.
15: https://github.com/jgoerzen/gitsync-nncp
16: https://nncp.mirrors.quux.org/Multicast.html
More broadly, my article A Simple, Delay-Tolerant, Offline-Capable Mesh Network with Syncthing[18] 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[19] page.
apt-offline for Debian[20] 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.
You can send email out using NNCP. The Integration[21] page gives information on Postfix and Exim, but others would be supported too.
21: https://nncp.mirrors.quux.org/Integration.html
Also take a look at Building an Asynchronous, Internet-Optional Instant Messaging System[22].
22: /building-an-asynchronous-internet-optional-instant-messaging-system/
NNCP makes a great carrier for Usenet! See Usenet over NNCP[23] for details.
--------------------------------------------------------------------------------
NNCP lets you securely send files, or request remote execution, between systems. It uses asynchronous communication[25], 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.
25: /asynchronous-communication/
(c) 2022-2024 John Goerzen