1. Every file is owned by application.
2. A file-store application is the custodian of files meant to be used by multiple applications.
3. An application that needs to edit a file must take ownership of the file for the duration of the editing.
4. An application that needs to read a file must borrow the files.
5. A file can be borrowed by multiple applications, but owned by only one.
6. Applications can provide the ability for shared ownership, but those would by specialized applications capable of handling and merging simultaneous changes.
This is a straw-man solution, and I am sure multiple problems will have to be solved before such a system can become a reality.
> As an example, most people would want to be able to import an image into a word processor regardless of where that image is located (local drive, network drive, floppy disk, etc.). To support that, most end user programs would want to be offered access to the entire filesystem. The moment two applications do this at once, you have all the shared mutable state problems we do now.
I don't see why the custodian of photos can't be a photo management application. In fact, a filesystem is the lowest common denominator. It is possible to build higher level abstractions like PhotoStore, MusicStore, MovieStore, CodeStore etc. which accommodate and make use of the properties of individual data types to offer an enhanced experience.