Blog - /Tech
There was a Google Tech Talk about Google Sky at Purdue today, which also doubled as a recruitment effort. I noticed that Brian Fitzpatrick, a Subversion and Apache developer was there, so during the Q&A afterward, I posed the following question to him:
Can you comment on any plans to add distributed features to Subversion?
He started the reply by listing the features that would be gained by making Subversion distributed, and that there were indeed (IIRC) plans for this in some future release of Subversion. I was impressed that he was up-to-date in this area, and that was able to list the major benefits. Alas, he then lost me by saying something along the lines of: a downside of distributed version control systems is that they discourage people from contributing their changes back to the main project (note: this is not an exact quote, just a remembered impression). I completely disagree.
The prestige factor of getting your changes into main is always there, unless you just want to fix things up real quick for your company. And even then, people could easily keep their own hacked version up-to-date without contributing back to the central tree, since they don't need to query or keep track of history, just re-base their fixes against new versions of the software. Centralization of the main project gains you absolutely nothing in that regard.
In fact, you lose big:
In the response, it was then mentioned that there is an expectation to review any changes that are made with at least one other person. Subversion does not strike me as a good tool for that. A private branch would be the first thing that comes to mind, but at the time of this writing, the latest Subversion release sucks at merging changes and preserving merge history, in case you plan to merge changes back to that branch. With git, on the other hand, you could have a real dedicated review branch, potentially shared by only two people, which can be easily merged into main, and changes from main can be easily merged back.
At the time, this seemed to say to me, "Well, this feature is
completely useless, but since people are clamoring for it, and to save
face, we'll solder it on, in hopes that people who really care about
it will improve it." I realize now that this was somewhat of a hasty
conclusion to draw, given the time constraints and how off-topic my
question was for this Q&A session. I remain rather pessimistic,
however, about the ability of future releases of Subversion to handle
distributed features well, particularly if they plan to draw heavily
from the svk project.
Posted by Brian Fitzpatrick at Fri Sep 21 02:16:25 2007
I really wish you had come up to me after the talk to discuss this instead of running off and blogging it as I think you've misunderstood my points and there's a great deal more to it than the few points I made during the Q&A (I didn't want to distract the entire room with a lengthy debate about version control--after all, the talk was about Google).The distributed features that I enumerated are extremely useful. They were:
Speed
Offline commits
Remote branching
An easy way to pass patches around between developers
So I'd appreciate not being completely misrepresented here. I would have enjoyed a healthy debate about distributed vs central version control as I hardly think that myself or any other Subversion developers plan on "begrudgingly" adding distributed features to Subversion.
Version control systems are much more than a merge algorithm (Subversion 1.5 will have merge tracking, BTW) or a "distributed vs. central" argument. There are many other features to consider, like how they affect collaboration, integration into other tools (eg which IDEs integrate nicely with it), which platforms they run on, and many more
Anyway, best of luck, and if our paths ever cross again, I'd be more than glad to have a nice chat with you about version control.
Posted by Michael Olson at Fri Sep 21 04:32:43 2007
Thanks for following up.Hmm. You have a point that this was somewhat off-topic for a Google Q&A. In retrospect, I can see that my last paragraph was unjustified given that context -- I can't really derive that conclusion just from the answer to the question (will update that with a notice shortly).
I mainly wanted to convey how disappointed I was that a developer of a major VCS would end a response to the "distributed" question on a sort of "well, this isn't really important" kind of vibe. Before that, you were in fact right on about the benefits of distributed version control, and I was duly impressed.
Posted by Karl Fogel at Sat Sep 22 14:57:58 2007
Most of the Subversion developers I talk to (including myself) think distributed features are important, for exactly the reasons you give.What you might be detecting is a bit of reverse frustration, though. Sometimes the most avid proponents of distributedness can forget that there are other important properties to a VC system. Yes, distributed features are important, but so (for example) is a locking system. That might sound odd, given that Subversion's default mode is non-locking, but a locking system is really about notification: it enables one developer to tell everyone else "I'm working on this non-mergeable file", without worrying about whether the others are reading mail or following development closely.
I'm just picking that example out of a hat, there are many other features that can have a daily positive impact on people yet that don't have anything to do with distributedness or centralizedness. In many cases, those features are more important to non-coders than to coders; conversely, distributedness is probably most useful for programmers and others who work on easily-mergeable files. I'm not saying it's not useful in many circumstances, just that the payoff ratio changes depending on the user base.
Subversion tries to be a version control system for more than just coders. Plenty of web-design shops use it; I even know of a law office that does. We'd like to see that variety increase, if anything. This means that distributed features will come out differently in our cost/benefit analysis. They're still very useful, and I want them badly, but we've deliberately chosen to take a very wide vision of version control.
The "distributed version control" discussion can be a bit frustrating when some of the participants have more narrowly-focused aims than their interlocutors but aren't consciously aware of it. That might or might not have been going on when you were talking to Fitz, I don't know. But it's definitely a phenomenon we've enountered before, so one possible explanation for why Fitz's attitude seemed puzzling/begruding to you might be that he had different assumptions about who the user base is and what they need to do.
Add a comment