IPFS - The Permanent Web - at Sourcegraph

IPFS - The Permanent Web - at Sourcegraph

High-level presentation of IPFS at Sourcegraph meetup #003.

- https://github.com/jbenet/ipfs
- http://static.benet.ai/t/ipfs.pdf

IPFS is a global, versioned, peer-to-peer file system. It combines good ideas from Git, BitTorrent, Kademlia, and SFS. You can think of it like a single BitTorrent swarm, exchanging Git objects, making up the web. IPFS provides an interface much simpler than HTTP, but has permanence built in. You can also use it to mount the world at `/ipfs`.

A9670c143716320893863524a0efbaff?s=128

Juan Batiz-Benet

July 16, 2014
Tweet

Transcript

  1. IPFS The Permanent Web

  2. None
  3. None
  4. IPFS background overview use cases future

  5. it all starts simple

  6. dataset package manager

  7. dataset package manager needed git + bittorrent

  8. dataset package manager needed git + bittorrent suddenly, everything made

    sense
  9. dataset package manager needed git + bittorrent suddenly, everything made

    sense
  10. IPFS content addressed versioned peer-to-peer filesystem

  11. IPFS goal - to connect all devices with the same

    system of files
  12. IPFS goal - to connect all devices with the same

    system of files like the web plus git and bittorrent
  13. IPFS = DHT + BT + Git + SFS +

    Web
  14. IPFS = DHT + BT + Git + SFS +

    Web
  15. ’90 ’00 ’10

  16. ’90 ’00 ’10

  17. ’90 ’00 ’10

  18. ’90 ’00 ’10

  19. ’90 ’00 ’10 IPFS

  20. ’90 ’00 ’10 IPFS /ipfs

  21. ’90 ’00 ’10 IPFS web p2p mobile ???

  22. IPFS background overview use cases future

  23. network routing exchange mdag naming files ipfs stack

  24. network routing exchange mdag naming files uTP, WebRTC ipfs stack

  25. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC ipfs stack
  26. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap ipfs stack
  27. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag ipfs stack
  28. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links ipfs stack
  29. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  30. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  31. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  32. routing

  33. routing put(key, value) get(key) value

  34. routing put(key, value) get(key) value putPeer(key) getPeer(key) []peer

  35. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  36. BitTorrent

  37. BitTorrent

  38. BitTorrent

  39. BitTorrent

  40. BitTorrent market

  41. BitSwap

  42. BitSwap getBlock(key) []data

  43. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  44. None
  45. git workflow

  46. git merkle dag

  47. type Link struct { Name string Size uint64 Hash Multihash

    } type Node struct { Links []*Link Data []byte } ipfs merkle dag
  48. paths /ipfs/<hash-of-object>/<name-path-to-object>

  49. paths /ipfs/<hash-of-object>/<name-path-to-object> /ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt

  50. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  51. None
  52. None
  53. naming /ipns/<hash-of-public-key>

  54. naming /ipns/<hash-of-public-key> signed by public-key XLYkgq61DYaQ8N

  55. ipns paths # ipfs # /ipfs/<hash-of-object>/<path-to-object> /ipfs/XLYkgq61DYaQ8Nhkc/foo/bar.txt # ipns mutable

    mapping (via DHT/Routing) # qyU7rLcnSa7dSHQ16 -> XLYkgq61DYaQ8Nhkc /ipns/qyU7rLcnSa7dSHQ16/foo/bar.txt # ipns + dns record # DNS TXT juan.benet.ai “ipfs=qyU7rLcnSa7dSHQ16” /ipns/juan.benet.ai/foo/bar.txt
  56. network routing exchange mdag naming files dht (kademlia) or anything

    uTP, WebRTC bittorrent -> bitswap merkle dag mutability + links applications ipfs stack
  57. IPFS background overview use cases future

  58. use cases 1. As a mounted global filesystem, under /ipfs

    and /ipns. 2. As a mounted personal sync folder that automatically versions, publishes, and backs up any writes. 3. As an encrypted file or data sharing system. 4. As a versioned package manager for all software. 5. As the root filesystem of a Virtual Machine. 6. As the boot filesystem of a VM (under a hypervisor).
  59. use cases 7. As a database: applications can write directly

    to the Merkle DAG data model and get all the versioning, caching, and distribution IPFS provides. 8. As a linked (and encrypted) communications platform. 9. As an integrity checked CDN for large files (without SSL). 10. As an encrypted CDN. 11. On webpages, as a web CDN. 12. As a new Permanent Web where links do not die.
  60. IPFS background overview use cases future

  61. None
  62. Links! website - http://ipfs.io paper - http://static.benet.ai/t/ipfs.pdf protocol - https://github.com/jbenet/ipfs

    Go impl - https://github.com/jbenet/go-ipfs node impl - https://github.com/jbenet/node-ipfs GitHub - @jbenet Twitter - @juanbenet
  63. Links! website - /ipns/ipfs.io paper - /ipns/ipfs.io/ipfs.pdf protocol - /ipns/github.com/jbenet/ipfs

    Go impl - /ipns/github.com/jbenet/go-ipfs node impl - /ipns/github.com/jbenet/node-ipfs GitHub - @jbenet Twitter - @juanbenet
  64. None
  65. Thank You !!!!!