The last few days I have been learning SVN, or Subversion. My job has decided that that limitations of CVS were too many to make the benefits worthwhile. Aside from a few nasties about using a Berkley database type (which we later fixed by moving to FSFS) I have been thouroughly impressed by SVN. I read somewhere that the mission of SVN was to address all of the limitations of CVS, but keep all the benefits. They have done that.
Basically, you already know 90% of what is needed to use SVN, even if you have never used a SVC before. Just prefix all of the terminal commands with “svn” – well almost.
Because every single change to every single file is backed up, you can restore a file to any point in time. Even if you delete an item, this is given a revision number. To restore the file, simply checkout a prior revision and the file is back. This would make SVN perfect for say, everything that you have ever created. Since it is a file system, why not just make your home directory one giant repository?
Which brings me to Apple’s new “Time Machine”. I have read the bit at Apple about it, but its implementation differs from my ideas.
Apple seems to be making an image of sorts of the system at a set time, instead of when files are modified. This nightly backup has advantages and disadvantages over SVC. The advantage is clear – the overhead required using a full SVC implementation to track every change made to the operating system would be unacceptable. A nightly backup is much quicker and more simple. (Using hardlinks could significantly reduce the storage size required for SVC, however the processing cycles, and hard drive activity would still be too much for a speedy implementation.) This would mean possibly hundreds of file changes every second. The disadvantage however, is a big one – what happens if a user creates and deletes a file within the same day, and the machine only creates a backup at midnight? The backup is blind to the short-lived file.
Now my proposal: Implement a versioning system for the user’s home directory, or the user documents only. Branching and other more advanced SCV features might be beyond the scope of this basic implementation, but the file history would be perfect for this scenario. Imagine the ability to right-click a file, and select a menu item (perhaps titled “Revisions”) and see every change ever made to the file!
Lets take it a step even further – since the filesystem for the user is basically one large database frontend, storing file attributes could be native. This could make searching through metadata, modification dates, and file contents instant. This is some of what WinFS tried to achieve. An interesting open-source project called GLSCube exists that looks to bring some of this to the table.
Oh, and yay to Apple for officially implementing multiple workspaces – I mean where do they come up with these wacky ideas so ahead of their time?! 😉