$30 off During Our Annual Pro Sale. View Details »

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`.

Juan Batiz-Benet

July 16, 2014
Tweet

More Decks by Juan Batiz-Benet

Other Decks in Technology

Transcript

  1. IPFS
    The Permanent Web

    View Slide

  2. View Slide

  3. View Slide

  4. IPFS
    background
    overview
    use cases
    future

    View Slide

  5. it all starts simple

    View Slide

  6. dataset package manager

    View Slide

  7. dataset package manager
    needed git + bittorrent

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. IPFS
    goal - to connect all devices
    with the same system of files
    like the web
    plus git and bittorrent

    View Slide

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

    View Slide

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

    View Slide

  15. ’90 ’00 ’10

    View Slide

  16. ’90 ’00 ’10

    View Slide

  17. ’90 ’00 ’10

    View Slide

  18. ’90 ’00 ’10

    View Slide

  19. ’90 ’00 ’10
    IPFS

    View Slide

  20. ’90 ’00 ’10
    IPFS
    /ipfs

    View Slide

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

    View Slide

  22. IPFS
    background
    overview
    use cases
    future

    View Slide

  23. network
    routing
    exchange
    mdag
    naming
    files
    ipfs stack

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. routing

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. BitTorrent

    View Slide

  37. BitTorrent

    View Slide

  38. BitTorrent

    View Slide

  39. BitTorrent

    View Slide

  40. BitTorrent
    market

    View Slide

  41. BitSwap

    View Slide

  42. BitSwap
    getBlock(key) []data

    View Slide

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

    View Slide

  44. View Slide

  45. git workflow

    View Slide

  46. git merkle dag

    View Slide

  47. type Link struct {
    Name string
    Size uint64
    Hash Multihash
    }
    type Node struct {
    Links []*Link
    Data []byte
    }
    ipfs merkle dag

    View Slide

  48. paths
    /ipfs//

    View Slide

  49. paths
    /ipfs//
    /ipfs/XLYkgq61DYaQ8NhkcqyU7rLcnSa7dSHQ16x/foo.txt

    View Slide

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

    View Slide

  51. View Slide

  52. View Slide

  53. naming
    /ipns/

    View Slide

  54. naming
    /ipns/
    signed by public-key
    XLYkgq61DYaQ8N

    View Slide

  55. ipns paths
    # ipfs
    # /ipfs//
    /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

    View Slide

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

    View Slide

  57. IPFS
    background
    overview
    use cases
    future

    View Slide

  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).

    View Slide

  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.

    View Slide

  60. IPFS
    background
    overview
    use cases
    future

    View Slide

  61. View Slide

  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

    View Slide

  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

    View Slide

  64. View Slide

  65. Thank You
    !!!!!

    View Slide