Friday, February 19, 2010

Web IDE Part 3: Ephemeral Shells and Immutable Files

Thinking about this continues and there are some on-going conversations.  My recently former boss is quite interested in these ideas, too.  Here are some thoughts about replacing the UNIX shell.

Some shell operations are ephemeral.  You run some command, look at output on the screen, sometimes maybe cut and paste it, then you're done.  A trivial example is the date(1) command.  You look at or grab the date string and that whole shell instance could go away.  It's essentially stateless.

Other shell operations create or modify files.  These are cases where you want to save the state for some later use, or just as some kind of permanent record.  My first thought here is to give such a shell access to your files but to treat them as immutable.  That means you couldn't modify an existing file but could create an entirely new one.  Then, when you close that shell-like browser tab (or something), it will ask you if you want to save any of the files that were created.  Only then would they be saved into the file storage system with some type of versioning, either with a modfied name like browsers do for downloads (Myfile, Myfile(1), Myfile(2)), or built-in versioning as in Google Documents.  Documents' built-in versioning allows you to access the previous versions of the files, see the dates and times when they were modified, revert changes, etc.

Finally, for file storage, I think the Google Documents approach works pretty well.  It has a sufficient level of organization, search, folders and organization, metadata, ACLs, etc.

See also Part 1 and Part 2.