Here's an alternative that we could in principle choose: Apps can be delivered over the web, but data is stored locally. If it is backed up remotely, then it is encrypted first. If our app communicates with other users, then it does so P2P instead of through a central service. These steps would ensure the company whose app we use only knows that we are using the app, and not what our data is or who else we are interacting with. Unfortunately, this technology is not very easy with the present state of JS/HTML. I'm not even sure if it is in principle possible for a JS app to create a TCP server. Some quick Googling reveals it may only be possible if you use Flash.