> We need computing environments ... without the concept of applications appearing at all.
Platforms keep trying to enable this, but application vendors want to control the UX and branding, so they're not going to provide these generic reusable building blocks.
Android, for example, lets apps make use of views from other apps and securely delegate a task (e.g. take a photo, pick a file, etc.) to the user's preferred app without needing to request permission for direct access. But nobody does this - apps just requests all permissions and do everything themselves.
Author here, yes this is a big problem (the biggest?), as the incentives are all wrong. As I noted in the post: "Often ... apps will have features to integrate with other apps and the wider operating system - but not so much that they become invisible. Instagram still wants you to see its logo, consume its specific content and stay within its ecosystem. Once again, the implementation and architecture are driven by economic imperatives."
Ah, yes. But you seem to be saying in the article that these incentives cause the platforms to lack such features, whereas what I mean is that e.g. Android's intents and activities provide just such a mechanism (which could be used to great effect as indicated in the sibling comment about OpenIntents), but commercial application vendors don't want to use it. They would rather control the user experience than integrate seamlessly into the platform.
In particular, you mention sandboxes imprisoning the code. But Android allows an app in one sandbox to display an activity (essentially a dialog box) from another app running in another sandbox with different privileges in a way that appears seamless to the user. I could have one app with access to bluetooth (but no camera) call upon another app with access to the camera (but no bluetooth) in order to take a photo.
I believe apps can also expose services and data sources (ContentProviders) – e.g. your Images, Tables and Conversations – to other apps and define their own permissions[1] for them.
Obviously economic incentives have an impact on what problems get worked on, but economic incentives can’t reduce the complexity of problems. I think what we have here is a problem of irreducible complexity. The reason that abstractions like the “Image” or “Table” you described one your article are few and far between is because it’s really hard to implement these objects in a way that scales to fit a broad enough set of use cases. The design of such objects involves making a set of tradeoffs where tradeoff space has a very high dimensionality and lots of shallow local optima.
Not that I disagree with your overall assertion, but without economic incentive there is really no incentive in most cases. For someone who does have economic incentive, it's really business risk reduction 101 to not pin your application to a network of invisible and hidden dependencies that you have no control over.
Right, using f-droid and installing open source apps where the only incentive is the user's benefits.. that's a breeze of fresh air. Of course it can never give you access to instragram or any particular commercial platform like that, but you can handle your own data with dignity.
This has resonated with me as I've recently been thinking about service interopt. There is a strong push in my org to go full rpc, which will probably win out for not bad reasons, but I sort of wish we had but in the necessary up front investment to model it restfully.
Open intents is trying to standardize and promote such cooperation between apps on android.
Tasker and similar apps are also a way to stitch together apps.
Platforms are completely antagonistic to this goal, as the definition of a "platform" is pretty much "something that lives in its own world, and so doesn't care about following outside standards".
Platforms are very much in favor of this goal within the platform, but antagonistic outside. But then, every app within the platform is very much antagonistic to this goal - it also wants to have full control over user's data and interactions. So structurally, it's the same problem - but it manifests itself separately at every level of the stack - at least where commercial software is involved.
It's all a matter of culture. Proprietary software wants to take control, so it's opposed to general interoperability. Contrast that with e.g. the modscenes of games like Kerbal Space Program, where mod authors (i.e. authors of what are essentially apps, running on the platform of the game) go out of their way to be interoperable with everything else, often implementing compatibility features inside their own work that target other popular mods.
I disagree. I think one of the big reasons for this is limited functionality of common interfaces that platform provides.
WhatsApp client implements its own photo picker, instead of using system one. Why? So it can add "crop" and "comment" functions. It would be objectively worse for me, the user, if they had stuck to platform features.
There is a reason why some apps dont use external camera app but take pictures themselves. Security. You want to be sure (as much as possible) that taken picture was real and not provided to intent by "use any picture as cammera output"
This is essentially DRM and experience tells us that it's not foolproof (a quick search on a piracy website will surface the latest media even though it's heavily DRM'ed).
It's better to just accept this as being impossible than to lure people into a false sense of security (where a minority that does know how to work around the DRM is then given more leverage since the majority believes it's impossible).
Why? I see very few use cases for this requirement. For example, my banking app lets me take a picture for only one purpose: OCR'ing payment info, instead of manually inputting it. But I usually get these as pictures from other people! Heavily reduces the utility of this feature for no good reason.
Then you can't rely on the user's hardware. If you want to verify an ID or license, a photo is not sufficient anyway. Many security features can't be checked that way.
The answer is to push the "application vendors" back into the browser. None of them are really writing anything that needs to be running natively, it's almost all just a front end to some service on the internet.
Real computer applications are almost universally developed by researchers and the open source community and look exactly like this. No "application" just tools you install into your system that are watched by the community for breakage/malware or worst case offered as a git repo/tar for free.
Are vim and Emacs not real applications? How about gimp? Firefox? Thunderbird?
The gnome people could have used an Emacs or vim window instead of gEdit. But they didn't, because more or less the same incentives that prevent commercial entities from developing components instead of apps exist in the open source community as well.
Hell, even GCC is essentialy an app, even though parts of it would have been extremely useful as share-able components, as clang showed.
And I really don't know what researchers produce apps. The closest I can think of is maybe Coq?
Can you explain what definition of application you are using in this post. The only application I use that is just a front end to a web service is a client tracking software I am required to use for State level reporting purposes at work. All the rest of my software, ranging from development, to digital audio, video, and art, rendering and 3D work, etc, are all native and local. Some are open source, but many are not.
I see comments like this occasionally and I ask myself, what do people who make them actually do? Genuinely? My three main hats are developer, accountant and 3d designer and while most of my accounting work these days is done via web based services none of my dev work or 3d design work. Sure I consume a lot of stuff on the internet but the vast majority of actual creation is done via native software. Some of it is open source especially dev tools, but the most content creation tools are closed source and with the exception of Blender there are no or at least very few open source content creation tools that are widely used professionally in any field that I'm aware of. (Before the OSS fanatics start what abouting about gimp, Krita, openscad etc. please note the caveats of professional and widely used)
Platforms keep trying to enable this, but application vendors want to control the UX and branding, so they're not going to provide these generic reusable building blocks.
Android, for example, lets apps make use of views from other apps and securely delegate a task (e.g. take a photo, pick a file, etc.) to the user's preferred app without needing to request permission for direct access. But nobody does this - apps just requests all permissions and do everything themselves.