There is a subject I find very interesting and wanted to discuss. I plan on bringing it up with several game engines, and since Godot is one I plan to use in the future I'm interested in the possibility of such support here.
I would like to start with some background on what this is all about: I've been following the development of the decentralized internet initiative closely for the past few years. This namely includes the IPFS protocol. For those who are not familiar with it: IPFS (Inter Planetary File System) is a file storage system which allows files to be stored in a global decentralized network. Every user who accesses a file also stores and seeds parts of it to other viewers for a limited time (similarly to torrents). Files in IPFS are immutable, meaning that once they're uploaded they cannot be edited nor deleted and are represented by a hash which guarantees their originality. There exist multiple implementations and the library is very flexible... a browser node can even be embedded directly onto a website using JavaScript alone. The goal is to revolutionize the web by allowing entire websites and more to become free from the requirement of a central server... meaning fewer or no storage costs, guaranteed uptime, faster network speeds, and increased safety from censorship.
https://ipfs.io
To offer a simple example, let's compare Youtube to BitTube. The first is a centralized video platform owned by Google, whereas the second is a new video platform which uses IPFS for storage. When you watch a video on Youtube, the video file is downloaded from the Google server closest to your location. When you watch a video on BitTube, some of it might be downloaded from the computer of your next door neighbor, some from an user in a nearby city, and some from another viewer from the other side of the planet... all concurrently so the download speeds add up. While Google has to spend money on drive space and bandwidth, the platform can go down if it experiences server issues, and they can also delete videos they don't like from their site... BitTube has its videos seeded by viewers who watching them, is guaranteed to be available as long as you're connected to the internet, and uploads can never be truly deleted once posted (only filtered at HTML / protocol level). It's easy to see why the decentralized web will likely be the biggest revolution in the history of the internet.
How this relates to Godot: I've been intrigued by the idea of using IPFS in a similar way for game engines. This is particularly for ones that have dynamic worlds intended for multiplier environments (eg: Second Life or Minecraft) though the benefits are not limited to sandbox games. Decentralized storage can be used to store assets / mods / updates (models, textures, sounds, code) in a form that's not only more reliable and network efficient, but basically allows serverless multiplayer games to exist: Clients communicate the data they have directly with one another, there would no longer be a central server that everyone needs to join which processes what each player is doing... everything from saving changes in the world to computing physics would be done by connected clients. This will of course require extra security measures to avoid cheaters and trolls doing whatever they want, but I'm surely not the only one who finds the idea most appealing.
What Godot would need to do: First of all, IPFS currently only has an official implementation in the Go programming language (go-ipfs) and JavaScript (js-ipfs). For this to work reliably, someone would need to implement a gd-ipfs (IPFS protocol in Godot). Since Godot Script is essentially Python, the best way would be finishing the third official implementation (py-ipfs) which is documented but so far no one's started programming it yet.
Once we have that, Godot needs to offer a way to reference assets from IPFS. Instead of pointing to files as "../myscene.scn" or "./objects/mymesh.obj", you'd point to IPFS hashes that represent files in the network. Whenever the engine is ran, it starts a Godot node which like any other IPFS node downloads and seeds the files it accesses. Once that exists, Godot could optionally support uploading files in IPFS as well; This would allow worlds like that of Second Life to be programmed in the engine, in which people can upload models / textures / sounds directly in-game and use them immediately.
What is your opinion on the idea? Do you believe support for IPFS (or another decentralized protocol like its cousin DAT) is an idea worth considering? Can it be done as a module for Godot? If so has anyone attempted it yet?