# Gopher over IPFS
IPFS is a distributed "content-addressable" file system. In
practice, this means that you address content using a hash digest of
it. This sounds impractical so far, but the idea is that if you have
the hash of a file, you could retrieve it from anyone and know with
an insane degree of certainty that it's the file you requested by
verifying that your own digest matches.
IPFS uses this concept to allow massive redundancy in hosting. If I
fetch a file in IPFS, it will remain for a while on my computer, and
another peer on the network when requesting the same file may
receive it from me instead. In practice this means that the more
people that are interested in a file, the smaller the cost of
bandwidth will be for its original source. If you want to ensure
availability of a file even when it's not popular, you may "pin" it,
in which case it will remain in your cache of files until you unpin
it, and other peers may reach it from you. Other peers may of course
pin it as well, in which case you get high availability! If you
leave the network, but someone else has the files you've pinned
cached, they will still be available.
Because addressing by hash is not very convenient for changing
content, the peers also maintain a naming system. A name may refer
to a content hash, and the hash may be changed without changing the
name. The last time I tried the name system it was quite slow. There
is another way to name things, using plain DNS with a TXT record
that specifies a hash.
I've been a huge fan of the idea since I first heard of it, not to
mention the evocative name (IPFS stands for "Interplanetary file
system"). My short description can't possibly do it justice, so I
suggest reading up on it on https://ipfs.io if you are confused.
I had the idea today that it would make an interesting way to host a
Gopher site. I made a smart proxy that presents most files as is,
but consumes a simple menu format to produce Gopher menus that can
link to IPFS via the proxy. I haven't figured out exactly what I
want to do with it, but I put it on GitHub if anyone is interested:
Using this you can produce Gopher holes that live for as long as
someone is willing to pin them.