This arose from an IRC conversation which I was tangentially involved in, and I wanted to write down my thoughts while I ate my lunch. I am not a HCI person, so take it all with a pinch of salt. Also, all this has been said a thousand times before.
1. You know what? I am tired of arguments about filechoosers. Nobody can get the things right and make everyone happy, and I think the reason for that is actually they assume you’re thinking about a small set of separate files where the set members don’t change very often, and which live in a hierarchy. That’s a bit like how programmers think of source code, which is probably why, but it’s not how most people think of documents. (Heck, I think it’s not how programmers think of most documents.) If you look at the documents directory or the desktop of most people, you’ll find a huge flat heap of files. You know we already have tools to deal with this sort of thing, but they only work for certain kinds of file (F-Spot lets you organise your thousands of photos by date and tags rather than by requiring you use hierarchical directories and filenames).
2. Yes, I know about Beagle. I still have to make up names for my documents and put them in a hierarchy.
3. Colin Walters mentioned in the IRC discussion that we could just make “File | Save” write stuff straight out to ~/Documents or whatever and not make people deal with having to slot it into a hierarchy at all. I would love this. Maybe turn it on in gconf or with an environment variable that could be set at login for certain users.
4. The trouble with this very good idea, of course, is that they then have to be able to find it again. So we let them search on metadata (yes, including <buzzword>tags</buzzword>) when they want to re-open the file. (Effectively that’s what they’re doing when they choose a filename like “email from Joe” so they they can find it again.) We have three kinds of metadata, though the difference should not be apparent to the user: there’s information gathered from the file like the height and width of an image (and some files formats can store arbitrary metadata internally), and there’s similar information which can be edited by the user and written back in, and then there’s information which must be stored externally to the actual file.
5. Where we actually store the data and metadata doesn’t matter. Ext2, maybe, with separate GKeyFiles for the metadata. Or maybe in a big SQLite database. I don’t mind, really. Maybe give people the option. Don’t ask users on installation or they’ll run a mile.
6. Using separate files raises the problem that all third-party solutions to the 8+3 character filename limit on MS-DOS had: you would always lose the data if you copied the file away. For this reason I’d rather not reuse an existing ~/Documents-type directory. Maybe call it ~/.swamp or something (I like the idea of a files floating around in the swamp and occasionally bubbling to the surface). Using one big file with tools to copy files in or out saves us that problem, of course.
7. Those of you thinking very fast will say, “If people don’t give a filename when they choose Save, then Save and Save As are the same thing, and that means there is no way to branch development of a document”. You are right, but you said the magic word, “branch”. Once user documents live in a controlled environment, there is no reason not to apply simple version control, which VMS has had since basically forever. Imagine how useful that would be! In fact, why are we requiring users to name files like programmers and not also automatically giving them the programmers’ advantage of putting their files under some distributed VCS?
This is just a thought-experiment, really.
I’ve had a number of people say they can’t comment on my GNOME blog; try clicking the number of comments and seeing whether that works. If it doesn’t, email me (tthurman at gnome). [Update: Might be working better now.]
Let me know when you make other posts about the subject (as I said on IRC, this is long on ranting and short on original content) and I’ll link them here. Or you could just pingback, of course.