How to decentralize storage properly

in #technology6 years ago

There are plenty of projects with the goal of creating decentralized storage network in mind. Storj, Sia, Filecoin just to name a few. They all try to replace centralized cloud providers with more secure and decentralized solution. But are security and decentralization the main things we should be focusing on here?

Cloud vendor lock-in

There is a thing called vendor lock-in today's world of cloud-based apps. It refers to the situation when your app or service becomes dependent on some cloud provider. This creates all kinds of problems if you later decided to migrate to a different cloud solution.

Note that if an app becomes dependent on a certain cloud, that means the user and his data depends on it as well. That means that all user's data ends up in control of the cloud, just because his favorite app decided to use it and there is no easy way back.

The problem

Apps use device storage, besides the cloud one. Now imagine a world, where when creating an app you would have to choose, with which hard drive your app would work. Yeah, it sounds so ridiculous, I know, but just imagine that, say desktop apps, could only work with hard drives made by some specific vendor. For end user that would mean that if he doesn't have that specific hard drive, too bad, he can't use the app.

Now isn't this ridiculous example reminiscent of the situation, regarding cloud vendor lock-in, I described above? Of course, there are some differences. It's not like there can only be one cloud solution per user, like there is only one hard drive per device. But still, it's similar, in a sense that app creator has to choose one storage solution and all the users of that app have to use that specific solution for their data.

This problem might become even more relevant in the future, with all these decentralized storage solutions being created. Some of them might be successful and if they are, we can expect apps being created on them. What if I like app A, but I don't like that, creators of A get all my data, and I don't like app B, but I like the decentralized storage solution they use, or the fact that their app encrypts my data? What should I do then? It's very likely that users will face this dilemma more often if apps are created, which use decentralize storage networks.

It's becoming apparent that, what we really want is for the user to be in control of his data. That is, instead of app creators choosing where and how to store user's private data, the user himself should make that choice. He should be able to encrypt his private data before sending it to any storage provider if he wants. He should be able to choose whether he wants to store his data in a decentralized network or if traditional cloud is enough. He should be able to make all those choices for all the apps he uses. And his choice for storage shouldn't be dependent on his choice of application.

Putting the user back in control

To allow user to choose what type of storage to use would mean that application should be created in a way that it would work with different types of storage. Fortunately, every software engineer knows how to solve that kind of problem. You just create an abstraction and make higher level modules interact with that abstraction. Kind of like operating systems sit between apps and actual hard drives and hide all the low-level details of those drives.

You also need a way for the user to tell each app where to store his data. This is a more complicated issue. Especially if we don't expect every app to implement their own solution to it (and we shouldn't). Good thing there is at least one project which tries to solve this issue.

Blockstack

Blockstack is another project which claims to decentralize the internet. However, the thing that makes this project stand out for me, is that it actually tries to solve the problem I described here.

Instead of creating another storage network, to replace the cloud, Blockstack works with a cloud or potentially any decentralized storage network as well. Drivers can be created for all kinds of storage, as long as it functions like storage.

User downloads software, which includes Blockstack node and browser, creates identity, connects storage providers through Blockstack browser and then can use any app created on Blockstack. In turn app developers use api provided by Blockstack library to interact with user's storage. Blockstack takes care of all the details, encrypting users private data and using underlying storage only as dumb drives.

It's not perfect though. Here are some issues that I currently see with it (note that they are only based on my opinion):

  • It's still in development and not progressing as fast as I would like it to. Which would be fine if not the next point;
  • Instead of finishing up the main functionality of their system, they focus on other things like creating a token;
  • Could have simpler implementation if they would use smart contracts instead of creating virtualchains
  • User has to install software, which can be a critical issue for adoption. Currently, it takes some time and effort before you get Blockstack up and running on your system. Developers are planning to make it a simple, all in one install in the future though.

Conclusion

We should try to put the user back in control of his private data. But to achieve that to the full extent, we need to decouple applications from specific storage solutions. While it's probably impossible to do that for existing applications, I believe we should try to create an ecosystem for apps which could do it. I would love to see an ecosystem like that, whether it's created by Blockstack or any other platform.