<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Neuroning: Version Control Systems and Open Source</title>
    <link>http://neuroning.com/articles/2005/12/11/version-control-systems-and-open-source</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>My mind workout on Software Development</description>
    <item>
      <title>Version Control Systems and Open Source</title>
      <description>&lt;p&gt;If you haven&amp;#8217;t looked at the available Version Control Systems lately,
you&amp;#8217;d better look again.&lt;/p&gt;

&lt;p&gt;About 5 years ago, CVS was pretty much the only open source Version
Control System in use, and it&amp;#8217;s still very popular.&lt;/p&gt;

&lt;p&gt;But in the last few years, a surprising number of new and really good
open source version control systems came to life. Like most open
source projects, their authors started them to scratch a personal
itch. In this case, the itch was caused by some important limitations
in CVS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The directory structure is not versioned (it only keeps history of
files)&lt;/li&gt;
&lt;li&gt;Impossibility to rename, move or copy files (without loosing history)&lt;/li&gt;
&lt;li&gt;Operations (like commits) are not atomic&lt;/li&gt;
&lt;li&gt;No concept of &amp;#8220;change sets&amp;#8221;&lt;/li&gt;
&lt;li&gt;Very expensive (inefficient) branching mechanism&lt;/li&gt;
&lt;li&gt;Limited merging capabilities&lt;/li&gt;
&lt;li&gt;No support for decentralized repositories (distributed development).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don&amp;#8217;t get it wrong though: CVS is a &lt;em&gt;very&lt;/em&gt; respectable piece of
software: it&amp;#8217;s been first released more than 20 years ago!&lt;/p&gt;

&lt;p&gt;Among the new open source alternatives I found these to be quite
popular:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; &amp;#8211; Explicitly designed
as a replacement for CVS. I would say it&amp;#8217;s achieving it&amp;#8217;s
goal. Many big projects moved from CVS to Subversion, like
&lt;a href="http://kde.org/"&gt;KDE&lt;/a&gt;, &lt;a href="http://gcc.gnu.org/"&gt;GCC&lt;/a&gt;,
&lt;a href="http://apache.org/"&gt;Apache&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://svk.elixus.org/"&gt;SVK&lt;/a&gt; &amp;#8211; Built on top Subversion&amp;#8217;s
libraries. It offers additional functionality, like distributed
repositories and better merging. It integrates with existing
Subversion repositories, so it&amp;#8217;s more an extension than an
alternative to Subversion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://gnuarch.org/"&gt;Arch&lt;/a&gt; &amp;#8211; Very powerful and decentralized. The
current version 1 received many complains around usability, which
spawned new projects like
&lt;a href="http://bazaar.canonical.com/"&gt;Bazaar&lt;/a&gt;. But version 2 promises many
improvements, including ideas from Bazaar and other systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; &amp;#8211; Developed by Linus Torvalds and other
Linux Kernel hackers when they were forced to stop using the
commercial &lt;a href="http://www.bitkeeper.com/"&gt;BitKeeper&lt;/a&gt; because of
licensing issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://abridgegame.org/darcs/"&gt;Darcs&lt;/a&gt; &amp;#8211; Written is
&lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://codeville.org/"&gt;Codeville&lt;/a&gt; &amp;#8211; Apparently has an advanced
merging algorithm without the &lt;a href="http://article.gmane.org/gmane.comp.version-control.monotone.devel/3264"&gt;problems of 3-way-merge&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.venge.net/monotone/"&gt;Monotone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Subversion, like CVS, is designed around the concept of a
&lt;em&gt;centralized&lt;/em&gt; repository: all developers work against one single
repository. All the other systems mentioned above are &lt;em&gt;decentralized&lt;/em&gt;,
allowing for more distributed development: several repositories may
exist (say, one per developer) and they are synchronized in a
peer-to-peer way.&lt;/p&gt;&lt;p&gt;If you never used a decentralized system, it may sound like a crazy
idea. But for some project teams, like the Linux kernel hackers, a
decentralized system is a requirement. They cannot rely on a
centralized repository (even &lt;a href="http://subversion.tigris.org/subversion-linus.html"&gt;the Subversion team understands this&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Some projects use decentralized systems but still define a &lt;em&gt;main&lt;/em&gt;
repository against which all developers synchronize often. Then only a
few maintainers (main developers) have write permissions to the main
repository, but anyone who wants to contribute is free to create a
local (personal) branch off the main repository, without even
notifying the maintainers. When a contributor is ready to share his
new code, he/she sends a patch to the maintainers.&lt;/p&gt;

&lt;p&gt;I think the big Open Source projects are the most demanding users of
Version Control Systems. And companies can learn a lot from them.&lt;/p&gt;

&lt;p&gt;May be, most in-house software development teams do not have such
strong requirements on source control because they don&amp;#8217;t face all the
obstacles found in distributed Open Source projects: people working on
and off, at different times with no clear schedules, from different
time-zones, little (if any) face-to-face communication, hard to have
&amp;#8220;all-hands&amp;#8221; meetings.&lt;/p&gt;

&lt;p&gt;But, with the increasing number of companies outsourcing part of their
development teams, many of these same problems arise. So I bet many
companies would benefit from a more decentralized approach.&lt;/p&gt;

&lt;p&gt;I only have experience with Subversion and SVK. That&amp;#8217;s what I&amp;#8217;m
currently using. The good thing about SVK is that it provides a
decentralized system that is compatible with Subversion
repositories. This allows you to create your own local branches off
any Subversion repository you have access to.&lt;/p&gt;

&lt;p&gt;So, if your are still using CVS, you should take a serious look at the
new alternatives. If you think a decentralized approach is not for
your team, then go with Subversion.&lt;/p&gt;

&lt;p&gt;I like SVK because I need to interact with Subversion
repositories. But if you are defining a new project and want it to be
decentralized, you should probably look into some of the naturally
decentralized systems.&lt;/p&gt;

&lt;p&gt;For more information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://linuxmafia.com/faq/Apps/scm.html"&gt;VCSs on Linux&lt;/a&gt; &amp;#8211; Long list of available VCSs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://dmoz.org/Computers/Software/Configuration_Management/Tools/"&gt;Dmoz Configuration Mgmt. / Tools&lt;/a&gt; &amp;#8211; More VCSs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://better-scm.berlios.de/comparison/comparison.html"&gt;VCS comparison&lt;/a&gt; &amp;#8211; Comparative matrix of existing systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.dwheeler.com/essays/scm.html"&gt;Comments on Open Source and SCMs&lt;/a&gt; &amp;#8211; Very good article
on open source VCSs and centralized vs. decentralized systems.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Sun, 11 Dec 2005 15:07:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c2916607031b9318f15a6c21daa92fe9</guid>
      <author>F</author>
      <link>http://neuroning.com/articles/2005/12/11/version-control-systems-and-open-source</link>
      <category>Software Products</category>
      <category>Developer Toolbox</category>
      <trackback:ping>http://neuroning.com/articles/trackback/8</trackback:ping>
    </item>
    <item>
      <title>"Version Control Systems and Open Source" by F</title>
      <description>Google will point you to a few graphical front-ends for both CVS and Subversion (like gCVS and RapidSVN).

KDE's File Manager also has extensions similar to Tortoise, for both CVS (Cervisia) and Subversion (KDESVN).</description>
      <pubDate>Thu, 08 Dec 2005 20:40:55 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:</guid>
      <link>http://neuroning.com/articles/2005/12/11/version-control-systems-and-open-source#comment-22</link>
    </item>
    <item>
      <title>"Version Control Systems and Open Source" by Brett</title>
      <description>Good version control is key to good software development.  I have only worked with CVS and a little bit with Subversion.  I prefer Linux, but use Windows most of the time at work, and I have to say that the Tortoise GUI for CVS and Subversion is great.  There is no subsititute for the command line, but the GUI is a nice addon for more routine tasks.  Does anyone know of other similar applications for Linux?</description>
      <pubDate>Thu, 08 Dec 2005 20:40:55 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:</guid>
      <link>http://neuroning.com/articles/2005/12/11/version-control-systems-and-open-source#comment-21</link>
    </item>
  </channel>
</rss>
