| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <style type="text/css"> /* <![CDATA[ */ |
| @import "branding/css/tigris.css"; |
| @import "branding/css/inst.css"; |
| /* ]]> */</style> |
| <link rel="stylesheet" type="text/css" media="print" |
| href="branding/css/print.css"/> |
| <script type="text/javascript" src="branding/scripts/tigris.js"></script> |
| <title>Debunking BitMover's Subversion Comparison</title> |
| </head> |
| |
| <body> |
| <div class="app"> |
| |
| <h2>Debunking BitMover's Subversion Comparison</h2> |
| |
| <h3>Summary</h3> |
| |
| <p>BitMover, Inc. offers a comparison between BitKeeper (their main |
| product) and Subversion, at</p> |
| |
| <blockquote> |
| <p><a href="http://www.bitkeeper.com/Comparisons.Subversion.html" |
| >http://www.bitkeeper.com/Comparisons.Subversion.html</a></p> |
| </blockquote> |
| |
| <p>BitMover's comparison contains various false statements about |
| Subversion, and some misleading statements. Below, we analyze |
| BitMover's page and set the record straight about Subversion. The |
| entire relevant content of the BitMover page is quoted below, as it |
| looked on 2 July 2004. We've omitted only extraneous things like |
| navigation links and the endorsement quote at the top of the |
| page.</p> |
| |
| <p>Please note that this response is strictly about Subversion. We |
| have no complaints about BitKeeper as a piece of software; we've heard |
| mainly good things about it, though we can't try it ourselves because |
| of its <a href="#licensing">license situation</a>.</p> |
| |
| <p>BitMover's text below is quoted in red italics where we feel it's |
| in error, and green italics otherwise. Our annotations are in regular |
| black text.</p> |
| |
| <h3>The Response</h3> |
| |
| <blockquote> |
| <p style="color: red"><i>Subversion is a new system |
| which is supposed to replace CVS. Unfortunately, Subversion shares |
| many of CVS' problems and introduced some of its own |
| problems:</i></p> |
| </blockquote> |
| |
| <!-- Commenting out this minor complaint for now: |
| |
| <p>I like how they subtly imply that Subversion <i>only</i> adds new |
| problems on top of CVS's, without solving any problems. It solved |
| many, of course, and while this quote doesn't explicitly deny that, |
| it's worded in a very misleading way.</p> |
| |
| <p>Moving on to more substantive stuff:</p> |
| |
| --> |
| |
| <blockquote> |
| <p style="color: red"><i>Subversion uses a binary file format for |
| your revision control data and metadata and if that format gets |
| corrupted you are out of luck, your whole team comes to a |
| halt.</i></p> |
| </blockquote> |
| |
| <p>That bit about the binary format is classic <a |
| href="http://www.catb.org/~esr/jargon/html/F/FUD.html">FUD</a>. It's |
| quite true that Subversion uses a binary file format, but think about |
| it: BitMover is basically saying that databases are a bad idea, since |
| virtually all modern databases use a binary format. Sure, if anything |
| happens to those files, you're out of luck, assuming you have no |
| backup. So, does this mean no one should ever use a database?</p> |
| |
| <p>Anyone who runs, say, Oracle, MySQL, Postgres, or another database |
| system should be able to see the silliness here right away. |
| Furthermore, it's clearly the case that if BitKeeper's data storage |
| format got corrupted severely enough, your whole team would come to a |
| halt too, at least for as long as it took to get everything fixed, |
| restored from backup, whatever. Not so different from Subversion, |
| really.</p> |
| |
| <p>There are database management issues to administering a Subversion |
| repository, of course, issues which CVS does not have. If this is |
| BitMover's complaint, then they should say so, rather than making a |
| meaninglessly broad generalization. (Note that Subversion now offers |
| a non-database back end, for those who don't want the overhead of |
| administering a database. This is a fairly recent development, and |
| it's likely that BitMover simply hadn't heard about it yet when they |
| wrote their page.)</p> |
| |
| <blockquote> |
| <p style="color: green"><i>Subversion has a single repository model, |
| i.e., client/server. Each work area is clear text only which means |
| no revision control in the work area during |
| development.</i></p> |
| </blockquote> |
| |
| <p>This is basically true, though note that this way seems to work |
| fine for a lot of people. Strictly speaking, Subversion has exactly |
| one level of revision control in the working copy, since there are |
| pristine base texts of every file present. One can locally view one's |
| changes, revert them, or save them and then revert, all without a |
| network connection.</p> |
| |
| <blockquote> |
| <p style="color: red"><i>No staging areas to protect the main source |
| tree. With Subversion, everyone checks into the same place and if |
| someone breaks the tree, it's broken for everyone. With BitKeeper, |
| you can put a staging area between each group of developers and the |
| main integration tree, thereby protecting the main tree from bad |
| checkins. Anyone who has lived through a change that broke the |
| build can see the value of staging areas.</i></p> |
| </blockquote> |
| |
| <p>False and FUD.</p> |
| |
| <p>Having a staging area is a matter of how the project organizes its |
| repository and moderates its commits. The fact that some projects |
| choose to use their main development trunk <i>as</i> their staging |
| area, and release from branches, is a matter of policy, not of |
| technical limitations. If you want to insert an extra level of |
| staging area, Subversion supports that just fine.</p> |
| |
| <p>Now, there might be a kernel of a real complaint here, which is |
| that Subversion doesn't have first-class changeset swapping, and |
| therefore merges from one branch to another (say, from staging to |
| live) don't preserve as much history as they could. However, |
| BitMover's text goes far beyond that simple, circumscribed complaint. |
| And since they make the merge complaint separately later anyway, they |
| either thought they were saying something different here, or they're |
| making the same claim twice, for the sake of inflating their page.</p> |
| |
| <blockquote> |
| <p style="color: green"><i>Subversion loses information every time |
| there is parallel development because you are forced to merge |
| before you check in if someone else checked in first. The state of |
| your workspace before the merge is lost forever. Another way to say |
| this is that if there is N-way parallel development, Subversion |
| loses N-1 events.</i></p> |
| </blockquote> |
| |
| <p>As worded, this is not quite true. But probably what they meant to |
| say was "you are forced to merge before you check in if someone else |
| checked in changes <i>to the same files</i> first." Then it would be |
| true.</p> |
| |
| <p>So how important is it? It depends whom you ask. BitMover |
| probably has in mind the "star merge" work style that has developed in |
| the Linux family of OSs, where there is never any expectation that all |
| workspaces will converge onto a single canonical form. It's not about |
| how far behind you are, but about how different you wish to remain; |
| less about merging than about cherry-picking. There are Subversion |
| users who ask for this. We usually point them to <a |
| href="http://svk.elixus.org/">SVK</a>, which is based on Subversion |
| and supports this style of development, or to <a |
| href="http://www.gnuarch.org/">Arch</a>, an open-source revision |
| control system unrelated to Subversion. But some others do not find |
| this a compelling feature; see <a |
| href="http://web.mit.edu/ghudson/thoughts/bitkeeper.whynot" >Greg |
| Hudson's explanation</a> why not.</p> |
| |
| <blockquote> |
| <p style="color: green"><i>Merging in Subversion is no better than |
| CVS, i.e., primitive at best.</i></p> |
| </blockquote> |
| |
| <p>This is basically true. Subversion's merging <i>interface</i> is |
| better than CVS's, but the underlying operation leads to the same |
| result as in CVS. Better merge support is on Subversion's long-term |
| todo list.</p> |
| |
| <blockquote> |
| <p style="color: red"><i>Branch management in Subversion is a |
| nightmare.</i></p> |
| </blockquote> |
| |
| <p>This is false, at least insofar as it means anything at all. |
| Without more technical substance to respond to, it's hard to know what |
| to do with such a claim; they don't say anything more concrete than |
| "nightmare", unfortunately.</p> |
| |
| <p>Branch management is actually one of Subversion's strengths. In |
| Subversion, branches are first class, versioned objects, just like |
| regular paths. They can be copied, renamed, deleted, and |
| resurrected — and people do these things all the time. |
| Perhaps BitMover was really talking about merging? But again, they |
| make the merging complaint elsewhere, so this item must presumably be |
| about something else.</p> |
| |
| <blockquote> |
| <p style="color: red"><i>Subversion has no integrity checker which |
| means files can be silently corrupted and you will never know until |
| you try and roll backwards.</i></p> |
| </blockquote> |
| |
| <p>False. Subversion ships with an integrity checker |
| (<tt>svnadmin verify</tt>). It also attaches a checksum to every |
| revision of every file. It verifies these checksums automatically at |
| every opportunity where it wouldn't have a serious impact on |
| performance; furthermore, it offers you the ability to paranoidly |
| check integrity even <i>more</i> often, if you want to, via the |
| abovementioned command. So we really don't know what they're trying |
| to say here.</p> |
| |
| <blockquote> |
| <p style="color: red"><i>Subversion has only weak rename support, |
| that's something that is inherent in all centralized |
| systems.</i></p> |
| </blockquote> |
| |
| <p>It's true that Subversion has weak rename support (work is under |
| way to fix this). We don't see any reason why this is inherent in |
| centralized systems, or even why it has anything to do with |
| centralization or lack of same. It sounds as if BitMover is trying to |
| imply that Subversion, due to its design, simply <i>can't</i> have |
| good rename support. That's the more serious charge here, and we |
| believe it's totally bogus.</p> |
| |
| <h3>Conclusion:</h3> |
| |
| <p>What's really going on is that BitKeeper has just one or two solid |
| complaints to make: "Subversion has only primitive merge capability", |
| and possibly "Subversion doesn't do decentralized versioning."</p> |
| |
| <p>While these are true, it seems like BitMover is attempting to say |
| each one multiple times, to have a longer itemized list of |
| deficiencies in Subversion. If we ever write up our own comparison |
| between Subversion and BitKeeper, we'll avoid that sort of inflation. |
| Unfortunately, we can't easily make such a comparison, because |
| BitMover, Inc changed its license to prevent free software developers |
| who work on competing products (such as Subversion) from using |
| BitKeeper.</p> |
| |
| <a name="licensing"></a> |
| <h3>BitKeeper's Licensing Situation:</h3> |
| |
| <p>Before they changed their license, anyone could use BitKeeper for a |
| free software project (with a few minor caveats). Although BitKeeper |
| was not "free" or "open source" in any important sense, since BitMover |
| still retained strong intellectual property rights over the code, it |
| did mean that free software developers could try it out and learn from |
| it.</p> |
| |
| <p>Then BitMover added a clause to their license, ending this |
| availability for Subversion developers and others:</p> |
| |
| <pre> |
| (d) Notwithstanding any other terms in this License, this |
| License is not available to You if You and/or your |
| employer develop, produce, sell, and/or resell a |
| product which contains substantially similar capabil- |
| ities of the BitKeeper Software, or, in the reason- |
| able opinion of BitMover, competes with the BitKeeper |
| Software. |
| </pre> |
| |
| <p>(We'd include a reference to the full license here, but it appears |
| one must fill out a download form even to get to the license's |
| <i>text</i>, and that's a little more trouble than we're willing to go |
| through.)</p> |
| |
| <p>Larry McVoy, founder of BitMover, <a |
| href="http://marc.theaimsgroup.com/?l=linux-kernel&m=103384262016750&w=2" |
| >confirmed</a> that the new clause prohibits Subversion developers |
| from trying BitKeeper at no charge. Of course, Subversion developers |
| are free to purchase a license, but that is not a realistic option for |
| most of them.</p> |
| |
| You can read more about the BitKeeper license controversy at these links: |
| |
| <ul> |
| <li><a href="http://www.oreillynet.com/pub/wlg/2107" |
| >http://www.oreillynet.com/pub/wlg/2107</a> |
| </li> |
| <li><a href="http://better-scm.berlios.de/bk/bk_suitability.html" |
| >http://better-scm.berlios.de/bk/bk_suitability.html</a> |
| </li> |
| <li><a href="http://better-scm.berlios.de/bk/relicensing_bk.html" |
| >http://better-scm.berlios.de/bk/relicensing_bk.html</a> |
| </li> |
| </ul> |
| |
| <p>This is why we cannot make our own page comparing Subversion and |
| BitKeeper. Of course, BitMover employees are free to download and |
| install Subversion any time, and we encourage them to do so.</p> |
| |
| </div> |
| </body> |
| </html> |