Thanks a lot for the feedback!!

>  Reading from a disk maybe should happen automagically if it can be
>  detected (and is enabled in some configuration). This might also
>  require some integration with udisks. The complexity of this should
>  not be underestimated.

We can set it up in such a way that on running `guix install {xyz}` it will first check for mounted drives in /media directory and install {xyz} if it's present in the drive. 

> Writing packages to a USB stick seems to be closer to a `guix
>  publish` or `guix deploy`. Maybe you can read up on those commands
>  and think of a nice way to publish or deploy a set of packages to a
>  USB stick. This is also relevant for publishing to other p2p
>  networks (IPFS, GNUnet, etc.).

Perhaps, We can introduce a new utility? (maybe something like `guix sneak`). This will scan for external drives and on detecting a drive it will encode and store the nars into it.
The size of the drive can cause an issue here in case the content to be encoded is very large. In this case an appropriate error message will be displayed. Although this is rare as flash drives/hard drives have a lot of storage capacity these days but it's still a thing to consider.

Another way would be to use `guix publish` itself to do all of this. We can introduce a flag `--sneak` which instead of spawning an HTTP server, encodes and stored into the drive. But i don't think we should modify an already existing utility for this. I would like to hear your thoughts on this.

> Maybe the Narinfos also need to packed onto the USB drive? How would
> an air-gapped computer otherwise know which substitute to get? Also
> have a look at the nar-herder tool
> (https://git.cbaines.net/guix/nar-herder) by Christopher Baines (in
> CC).

Yes, we will be introducing a manifest file in the drive while writing to it. It would contain the narinfos of all the packages in the drive. Apologies for not mentioning in the proposal.


I have made the above mentioned changes to my proposal as per the suggestions. If i can further improve it in any way please do let me know. :)

-Shivam

On Wed, 29 Mar 2023 at 15:42, pukkamustard <pukkamustard@posteo.net> wrote:

Hi Shivam,

Welcome to Guix! I think that Sneakernet-esque distribution of
substitutes is very interesting and something that was also talked about
at the Guix Days before FOSDEM 23 (Guix with no internet and air-gapped
machines).

Some comments on the proposal:

- You might want to refer to the document "SQLite for ERIS block
  storage" (https://eris.codeberg.page/eer/sqlite.xml).

- I think the user experience as described in the proposal could be
  improved/might not quite work as expected:

  - Reading from a disk maybe should happen automagically if it can be
    detected (and is enabled in some configuration). This might also
    require some integration with udisks. The complexity of this should
    not be underestimated.

  - Writing packages to a USB stick seems to be closer to a `guix
    publish` or `guix deploy`. Maybe you can read up on those commands
    and think of a nice way to publish or deploy a set of packages to a
    USB stick. This is also relevant for publishing to other p2p
    networks (IPFS, GNUnet, etc.).

- Maybe the Narinfos also need to packed onto the USB drive? How would
  an air-gapped computer otherwise know which substitute to get? Also
  have a look at the nar-herder tool
  (https://git.cbaines.net/guix/nar-herder) by Christopher Baines (in
  CC).

-pukkamustard

Shivam Madlani <shivammadlani5@gmail.com> writes:

> Hey everyone!
> I am Shivam Madlani, an undergraduate at DAIICT, India. I want to participate in GSoC'23 for The GNU
> organization. The project "Decentralized substitute distribution" in GUIX amused me and I want to
> apply for the same. I have been in touch with the project mentor -pukkamustard for over a month
> now and started learning more about the project. I'm very excited to work on this project as it lies in
> my interests.
>
> I've drafted a proposal on this project and I aim to add a transport protocol-Sneakernet. This will allow
> the substitutes to be air-gappable. My approach is to use SQLite to store the ERIS encoded substitute
> in the external drive using a custom schema. This is just a brief overview of the project and more
> details are included in the attached proposal.
>
> I would love to hear your thoughts and reviews on my proposal and hopefully improve it by filling in
> any missing key points.
>
> Thank you,
> Shivam
>
> [4. application/pdf; GSoC'23 GUIX proposal.pdf]...