IPFS is a new peer-to-peer hypermedia protocol
ipfs.io
ipfs.io
--------------- Hello Everyone! ---------------
@jbenet here. Thanks for all the attention! Did not expect to wake up to this post today :)
The best resources for learning about ipfs are:
- The IPFS Paper: http://gateway.ipfs.io/ipfs/QmR7GSQM93Cx5eAg6a6yRzNde1FQv7uL... (note: DRAFT 3, working on DRAFT 4, lots has evolved.)
- The Alpha Demo: https://www.youtube.com/watch?v=8CMxDNuuAiQ
- The First Tech Talk: https://www.youtube.com/watch?v=Fa4pckodM9g
- The IRC Logs: http://botbot.me/freenode/ipfs/ -- there's so much knowledge in these, we're working on moving it over.
We're working on a bunch of more expository media:
- Specs!! https://github.com/ipfs/specs
- More Demos
- More Talks
- Draft 4 of the paper
But there's only so many hours in a day, and we spend most of our time developing. All the resources will be way more polished as time goes on. Please bear with us as we make these available. In the meantime, ask questions in our new FAQ (below), or in #ipfs on irc.freenode.net -- And we'll be answering questions here too of course.
I've just created: https://github.com/ipfs/faq -- if you ask questions there we can build a knowledge base
IPFS already works-- you can install it and try it out. It's not production ready yet, but it's already very reliable. I use it to move around all sorts of personal files, and we use it to host many websites.
Some people asked about what applications are there now? There's many static websites on ipfs, and some simple webapps. We ship our entire ipfs webui with ipfs itself (turtles all the way down!). In particular, Eris Industries recently made a decentralized YouTube clone using IPFS and their Decerver: https://github.com/eris-ltd/2gather If you see more-- please let us know at https://github.com/ipfs/community so we add it to an index (we just reorged our repos under the github org last week)..
We need to make some more tooling to make web-publishing with ipfs really, really nice. We'll be making that over the next few weeks, so if you're interested in pushing out websites with ipfs-- come talk to us.
Another big use case we're going after is Docker container distribution. We're preparing a whole bunch of demos right now that we'll show off in the next week or two. You can peek at: https://github.com/ipfs/container-demos We can already boot entire VMs and containers over ipfs in <10 seconds :D which makes me really happy. You can boot to ipfs with this makefile: https://gist.github.com/jbenet/76afa70955910a2ed097
If you want to help, the best ways are:
- Come hack with us! We're particularly looking for Go hackers
- Just use it!
- Write applications on top.
- Report issues: https://github.com/jbenet/go-ipfs/issues and so on.
- Help us with docs
- Write another implementation (this is blocked by https://github.com/ipfs/specs/)
Some ipfs community members i've seen posting below are: whyrusleeping, dylankpowers, inconshreveable
Also, IPFS development is sponsored by our company, "Protocol Labs, Inc" -- we also make Filecoin. We are hiring, so check out: http://ipn.io/join (yeah-- we just changed the company name. still need to update ipn.io / get a new domain.)
See you around the tubes! :) - @jbenet
"IPFS is a distributed file system that seeks to connect all computing devices with the same system of files. In some ways, this is similar to the original aims of the Web, but IPFS is actually more similar to a single bittorrent swarm exchanging git objects."
[0] https://github.com/ipfs/ipfs
Edit: a more compelling summary from an unfinished paper: "The InterPlanetary File System (IPFS) is a peer-to-peer distributed file system capable of sharing the same files with millions of nodes. It features a completely decentralized architecture, secure and efficient peer-to-peer block distribution, and a path-based naming system supporting distinguishing mutable and immutable names. The Web today still uses HTTP as the main data transport. IPFS is capable of evolving the web to take advantage of versioning, p2p distribution, cryptographic operations, and decentralized publishing. Moreover, it presents an opportunity to construct a web whose links do not rot, whose files are deduplicated globally, and whose websites are no longer “sites”. IPFS is a step toward The Permanent Web."
https://github.com/ipfs/ipfs/raw/master/papers/ipfs-cap2pfs/...
I've explained IPFS to friends in the past:
Imagines IPFS as running Git where all of the objects (files, directories, commits, etc) are available over a BitTorrent swarm. All files are accessed via their checksum so they have cryptographic integrity even over insecure networks. Then imagine you can mount it as a file system or browse it via HTTP, and run your own node to seed files.
Popular files will be seeded by more people, making them quicker and more reliable to access. As long as clients are still requesting a file, it will continue to be seeded even when the original publisher goes offline.
Pitching a developer product is hard. Traditional marketing advice encourages you to pitch value because the implementation details are usually not important to your customer. Developer products require a more delicate balance because ultimately we have to work with the technology and want to understand what its real limitations are.
For example, the prototypical idea of swapping out Git's disk-trie content-addressed object store for an actual DHT to get immutable distributed file system must have occurred to a lot of people when they first learned about Git's internals.
I don't know about @jbenet's particular journey to these ideas, but I suspect Rich Hickey deserves a lot of credit for using Clojure (and his fun, smart talks) to popularize immutability and name/value separation for a new generation of programmers. Even just ambiently.
That's certainly how I started realizing the power of that paradigm, even though I was already using it for my day job! Especially when I then saw it used building Datomic, which of course leverages immutability to totally refactor the traditional database architecture from client/server into self-serve-client/server/transactor in a really interesting way.
Also, with Clojure's HAMTs, you've got hash trees and cheap immutable update, and that again primes you to read about (or reinvent) Merkle trees. So I doubt nearly as many people would know about such neat CS things without Clojure.
Actually, Bitcoin is also a really obvious way these ideas would become more widespread, though I don't know how many people really go through the trouble of understanding the blockchain mechanism.
And Linus, of course, for Git. Git internal design is really nice and everyone should dip in at some point in their career!
We should give Ralph Merkle a Turing award -- that single idea unlocks so much. Except we shouldn't because he patented Merkle Trees, apparently.
Git is the single largest influence on me. After that, various other papers (all the CAN literature, bitcoin/bittorrent, CRDTs, etc), and conversations with people. in particular, two close friends (jzim, davidad).
> We should give Ralph Merkle a Turing award
I agree! Zooko recently told me that a long while ago they dubbed themselves "Merkle Tree Huggers". I am too!
> Except we shouldn't because he patented Merkle Trees, apparently.
Sigh. patents... :(
Oh, interesting.
Funny coincidence: I actually met davidad once, when I first starting out at my job. I think because of his asynchronous logic automata. We somehow ended up discussing busy beaver Turing machines over ice cream†.
† Toscanini's near MIT, fantastic ice cream.
> Toscanini's near MIT, fantastic ice cream.
Much agreed.
EDIT: also, please implement non-power-of-2 leaf node Merkle trees as power-of-2 lead node trees with the rightmost leaves containing the hashes of the zero length array, that way the final block along with its hash chain to the root provides a cryptographic proof of file length. This prevents denial-of-service mischief where a malicious server claims a given resource is terabytes large and a poorly written client starts allocating TB of disk space on a filesystem that doesn't support sparse files.
"What is the relation to Filecoin?
Filecoin is the sister protocol of IPFS. While neither protocol depends on each other, they are perfectly complementary. IPFS handles high performance distribution of objects; Filecoin handles incentivizing the world to backup/seed objects."
Cryptocurrency backed by real, useful, and valuable commodities (storage and bandwidth).
https://sourcegraph.com/blog/ipfs-the-permanent-web-by-juan-...
It's annoying that there is no exhaustive comparison to existing systems, such as Bittorrent Sync, but I think that in this case it's genuinely difficult to find something that really resembles IPFS. The closest thing is probably Git, but IPFS maps the entire "global network" to your local file system.
It could be useful for any form of infromation sharing, but the author provides a bunch of "trivial little JS apps" as examples. However, I'm not sure if web apps are the best application for this, since the database would need to be hosted in a traditional way anyways (unless you can exclude it from being version-controlled?)
Like everyone else, though, I wish there was less hand-waving and more down-to-earth explanations on the subject (especially on the landing page!)
The world is currently figuring out the best ways to utilize this sort of architecture. Join us.
I'm less concerned about illegal content per-se as I am concerned about spam. I created Neocities (https://neocities.org) and we get quite a bit of SEO and pharmaceutical spam that we need to remove. There would be no way to prevent that with IPFS.
The one thing I could see this being useful for is storage with a private network. If you control all the nodes, then you could filter what goes into them. But I recognize that the point here is to make everybody run on the same network.
Bitcoin has a similar problem. If transactions were free, it would be very easy for someone to just flood the network with garbage transactions and essentially make the blockchain useless for legitimate use. The way this is prevented is by charging a transaction fee (around 7 cents) for transactions that don't meet certain criteria. It's not an ideal solution (because it's fixed in the code and doesn't fluctuate to compensate for market demand), but regardless, it's the only way they've found to prevent this sort of spam.
Without a solution like this, IPFS would not be able to be used in a decentralized, trustless manner. The solution here is probably some sort of monetary restriction, similar to the fees on Bitcoin. But I have no idea how you could implement that here.
That said, if a solution is discovered, Neocities will be front row center to implementing it for our sites. I think this is a genius idea, I've been following it for a while, and I love it.
In the case of this solution, a bad actor could use unsuspecting visitors to a site or users of a rogue WiFi network to load up the particular bad content they want distributed.
Won't this mean that rarely used files aren't really permanent ,which is a known problem with bittorent ?
Otherwise, JS is JS no matter how its received.
From there though, you have 2 more problems: keeping all data from being public (maybe becoming "friends" with another user involves a key exchange?) and distributing updates in a reasonable way. It'd be kinda strange if Lady Gaga had to buy a ginormous server to serve all the requests to her Twitter feed. I'm not sure how IPFS is implemented but if it's similar to BitTorrent in the sense that data can be seeded from any node, then that problem sort-of takes care of itself. You definitely can't think about "dynamically creating content" in the sense that twitter.com/:username may render different things at different times. The concept of web search also becomes an (even more) interesting one.
On a somewhat-related note, one also has to wonder how this system would interact with the European "right to be forgotten". Any legislature ensuring such a "right" would make this protocol a bit of a non-starter (at least in those jurisdictions).
Ultimately I think IPFS is a pretty cool concept, one I've kicked around a bit but never fleshed out. Major kudos to Juan and everyone else for taking it on - I look forward to seeing where this goes.
We're actually in the middle of finishing up a demo for mounting a Docker registry on top of IPFS, and showing we can freely push/pull from it. https://github.com/ipfs/container-demos/pull/19
Somewhere in the middle-- ipfs gives you native access to the merkledag datastructure, so you can actually port most databases to using ipfs as a kv-store directly. (think an embedded sqlite or something). and on the other side, maybe you dont need a database. maybe you can just construct the graph of objects you need and write that to ipfs.
> maybe becoming "friends" with another user involves a key exchange?
yep! we've discussed an `ipfs friend` cmd
> Ultimately I think IPFS is a pretty cool concept, one I've kicked around a bit but never fleshed out. Major kudos to Juan and everyone else for taking it on - I look forward to seeing where this goes.
Thank you!! Come help us build it! :)
see section 3.7 of the paper here: https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs...
I mean, there already are multiple file-sharing protocols. There are video-streaming protocols. There are p2p data-exchange protocols. Some of them need more friendly end-user tools to become widespread, but still, they do their job and usually are introduced as having some feature, which "all the previous stuff" lacked.
So what exactly is IPFS and why I would use it over… whatever else I can use to share files? After all, it's a protocol, and not an end-user tool yet, right? So what does this protocol present us? What exactly all that "p2p, decentralized" stuff means in the case of this very protocol?
Why I'm asking it here and not seeking answer in documentation and source-code? Well, there's quite a real reason beyond my laziness: from what I've understood so far, it seems like some pretty ambitious project. And ambitious projects need one short, clearly expressed idea, to avoid becoming a mess during the development process. I don't see one.
also, note the docs' command lists anchor to the wrong page: http://ipfs.io/#ipfs-config ; stead: http://ipfs.io/docs/commands/#ipfs-config ;
I do not see how this will be better then say Torrents. Or if anyone would use this for more then sharing "copyrighted" content.
I'm not saying this is bad, just that you can do better at marketing/selling it. You mentioned on the second video that this is targeted to those that do not know how to set up a LAN connection. Then maybe you shouldn't use the CLI in the demo.
My main concern is over using hashes as an address. A hash isn't a unique address but I haven't seen any mention of protections being built in to protect against the risks of downloading different files with the same hashes.
I got really excited about IPFS when I first learned about it, but after to talking to people for a while, I actually made a document titled "What problems does IPFS solve?" and thought for a long time. It's still blank.
I would love to hear from anyone involved with the project what applications this could have.
The web was not designed for web applications.
IPFS can fix this. Instead of putting all our shit in the browser, with the steaming mess of CSS, JS, JS frameworks et al, now you can write native clients that use IPFS to provide the same kind of functionality the Web does. The infrastructure is there.
The problem is that nobody wants to write a native client for every device. That's why the browser was popular to begin with -- it's an application as a runtime, an application that everyone knows about and anyone can install. That everyone does install. IPFS doesn't solve the problem of having to write native clients more than once for different platforms. But it sure as hell solves the hard part, which is the networking part. At least I think so.