Guix – Adding peer-to-peer sharing Vincent Cloutier address@hidden Abstract Large performance gains and servers savings could be made by fetching data from peers instead of a central set of servers. Since Guix users know in advance the hash of the data they want, downloading from peers has no security implications (and privacy can be done trough proxies). What I want to build I have a fascination for peer-to-peer tech and I am constantly looking for the innovative new tech in this area (Bitcoin, Ethereum, etc). Less than a year ago I discovered IPFS, a project that takes the best ideas from BitTorrent and Git to create a simple and elegant protocol. IPFS allows one to find who has a piece of content and is ready to share it, when knowing only the content’s hash. Content is added in a reproducible manner and deduplication can be added via Merkle trees. IPFS is also content-agnostic, one could serve Guix’s programs without even running Guix. It would also be possible to share text or video documentation using IPFS. This could allow the community to chip in to Guix success more easily. Publishing the content of one’s store for anyone to download will be possible. Looking at GNU/Linux distributions’ torrents, everyone seeds to help the community. It is very likely people will want to do the same for Guix. This adds no restriction on how a chain of trusts of key contributor to the project can be built. When a way of building consensus on a package’s hash (maybe via an Ethereum smart contract) will be build, everything will be in place for a serverless and fully auditable OS. What I will do before the summer There is currently a free implementation of the IPFS protocol written in go and another one in Javascript underway. I will package them for Guix and add them to the repository. This will be a great way to familiarize myself with the codebase. Lisp looks interesting having done some Haskell. I will make sure I am comfortable with it. What I will do during the first half of the summer I will add the option to fetch content via IPFS instead of via HTTP. Guix will spawn an IPFS daemon and run it in a container. I will build it in a way that it will not be a hard dependency, as it is preferable in some cases to use a client-server architecture, and the code I will write will handle without problems the absence of an IPFS client. I will also make sure this can run with any of IPFS free implementation. What I will do during the second half of the summer I will made the publish command also spawn an IPFS daemon and publish everything available in the store. I will also be there if the Hydra build farm runs into any problem with this new code. There will be a option to turn it off at any time, and statitstics will be made available, ex: how much bandwidth has been used, what are the most requested packages, etc. I will look into making the data storage efficient by making the IPFS daemon not copy everything in its own data store. Stretch goals If everything goes better than expected and everything works beautifully before the end of the summer, I have the following stretch goals in mind: A GPL’ed IPFS implementation in Lisp Packaging more free software for Guix Who I am My name is Vincent Cloutier and I am a french speaking developper in Québec. I am currently in cégep (https://en.wikipedia.org/wiki/CEGEP). I started programming when I was very young. My father started showing me some python when I was 8, and I have not stopped programming since. I worked in python for a few years - I was fascinated by infinite loops until I was 9 - then I switched to Perl for a while (where I tried to make chatbots), and then to PHP that I continue to use to this day. I also do haskell competitions for fun here (https://www.codingame.com/profile/8ee4bb16e866d398775fa5bc545e426e2789121), though I am not good at it yet. I already contribute to free software. I made ipfs.pics with a friend. It is a picture sharing website that uses the P2P IPFS technology. I did a junior job on Owncloud two years ago (https://github.com/owncloud/core/pull/11029) to see what a big open source project looked like. I used Sagemath cloud on my chromebook for school and made two pull requests (https://github.com/sagemathinc/smc/pull/52 and https://github.com/sagemathinc/smc/pull/53) to improve the UI on small screens. A couple of years ago I realized that every tool I had learn and everything that I tinkered with was free and open source software. Almost everything I achieved with computers was because of people who shared their knowledge and technologies and I want to contribute back.