Chad Perrin: SOB

15 February 2009

mentoring request: VCS

Filed under: Metalog — apotheon @ 02:11

Someone teach me to write a version control system (or, at minimum, give me some direction to teach myself).

There are entirely too many things we do in the world of computers that could benefit from adopting version control system functionality. I really need to get started on learning how to create such stuff on my own, so I can add that kind of functionality to various everyday computing tasks. Among the parts of VCS design I’d like to learn is the basics of implementor’s theory of distributed version control.

While I’m at it, I’d like to figure out how to leverage FUSE so I can write userland filesystems relatively quickly and easily (unless you’ve got a better idea for how to do it than via FUSE).

Extra points if (we?) can do all this with Ruby, or maybe Perl as a second choice.


  1. What’s wrong with using svn or git?

    Comment by Sterling Camden — 16 February 2009 @ 12:12

  2. I don’t just want a version control system — I want to start experimenting with incorporating VCS characteristics into other types of software, such as (perhaps) a version controlled variant of SSHFS. I’m also interested in doing fun stuff like combining DBMS-style ACID compliance with versioning, in part just to satisfy my curiosity about how the guts of such a beast would look.

    Part of it is just a hacker’s interest in playing with the internals of such a system, but I’d like to get a little bit of a leg up rather than spending a year just getting to the point where not everything I do is a na├»ve mistake. Another part, as I said above, is that I think some of the characteristics of version control systems can provide some benefit by being incorporated into software other than stuff specifically designed only for version control.

    So . . . this isn’t really about what’s “wrong” with svn or git. I can still answer the question about what’s wrong with them, though:

    1. svn is a centralized system — which is great when I want centralized VCS, but not when I want distributed VCS

    2. git isn’t copyfree licensed

    Comment by apotheon — 16 February 2009 @ 01:35

  3. OK, well the place I’d start is with the sources to svn and/or git.

    Version control systems usually have one of two approaches to file storage: either they store the original in full along with notations of changes (SCC, for instance), or they store the most recent version of each tree along with reverse deltas to get to older versions (PVCS). The latter performs better most of the time, because you usually want an end-of-branch or end-of-trunk version more often than you want something closer to the original. Another approach would be to store an entirely new copy for each version, like the OpenVMS file system does. That takes quite a bit more storage, but who’s counting?

    Comment by Sterling Camden — 16 February 2009 @ 03:58

  4. I was hoping to start with something simpler than a complete VCS — just start with toy systems, basically. If I have to actually dig through all of svn to get anywhere, I probably won’t ever get started.

    I’m pretty sure the reverse deltas approach is more the sort of thing in which I’d be interested, for most purposes — for the reasons you point out. I do wonder whether there’s some trick to approaching the benefits of using new copies for new versions without having to actually store complete copies, though. Do you know if anyone has tried coming up with a solution for anything like that?

    Comment by apotheon — 16 February 2009 @ 06:09

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

All original content Copyright Chad Perrin: Distributed under the terms of the Open Works License