Interview: David Roundy of Darcs Revision Control
comforteagle writes "In the aftermath of our last interview with Tom Lord, regardless of personalities, it became apparent that the idea of decentralizing CVS is a big deal. Many mentioned darcs as an alternative to Arch. Mark Stosberg has interviewed project head-hancho David Roundy about darcs, his 'theory of patches,' what's next, and on using Haskell for the project."
CVS is getting pretty old, I bet it will be replaced soon by 40 different things.
http://codeus.info
You could create a CVS cacheing service, a bit like Coral.
When do you move to your own RCS ro support it's own code? Kinda like bootstrapping the RCS? I really have no idea what i mean, but yeah, you get the idea. Did ARCH start out in a CVS somewhere? and where was bitkeeper kept in its infant days?
While "Darcs is written in a Haskell, a functional language that is relatively unknown compared to C or Perl", this really does hurt it's common use. Not being able to get a larger group of developers such as C, C++, or even some interpreted projects means that it becomes one or a few developers working on this project which means fewer patches and additions. A community project will ultimately be the versioning system for community projects. -M
when you see the word 'Linux', drink!
There was a good post on this on the mailing list a while ago.
The idea of decentralizing CVS is, indeed, a humongous deal. While, David's Advanced Revision Control System sound quite silly... it's a really great alternative. I'd like to see it implemented everywhere, although CVS is still better in some instances.
RTFA
Like CVS, you can get productive within minutes; the same cannot be said for Arch or even Subversion. Let's see:
You now have a Darcs repository! Let's do something with it:
Now your repository contains all your files. Let's look at the changelog:
Now, where's the server? You need a server to share your repository, right? Nearly -- every repository is a potential server, as long as it's accessible either through the file system, through SSH/SFTP, HTTP or email. Let's go to another machine and check out the repository we just made:
We now have a repository on Jane's box. Let's make a modification:
This last output, by the way, is Darcs' patch format. A "hunk" is a line-based diff. Other types of changes that may be contained in a changeset include renames, moves and binary changes. (Yes, you can also get a GNU-patch-compatible output similar to "cvs diff".)
Now let's commit and push the changes back to John's repository:
Now we can go back to John's machine and look:
(Note how Darcs generates a GNU-style changelog for you automatically.)
Where are the revision numbers, you ask? Well, they don't exist, because they're not needed. Darcs is changeset-oriented, not file-oriented. You can refer to a changeset by name, date, or a special hash identity.
Darcs changesets aren't just GNU patches; they have context, which means, for example, that someone can check out a repository, move a file "foo.c" into the directory "bar" and commit; meanwhile, another person, working on an older copy of the same repository, edits foo.c (which is still in its old location) and commits that. Darcs know that this edit should apply to foo.c in the new location -- and unlike CVS, you don't need to do anything similar to "cvs update" if you're committing files that have been changed on the server. In other words, people can freely commit changes, and the only kind of visible "conflict" will occur when you actually edit the exact same line.
Unlike CVS and Subversion, but like Arch and Monotone, Darcs is a distributed version control system. Repositories are islands which are constantly out of sync with each other, and Darcs' patch commutation system takes care of integration the changes that flow between them.
This system has several extremely useful effects:
For pilot-testing a migration to Darcs, there are scripts available that convert other repository formats (Subversion, CVS, possibly others) into Darcs (and back, actually), so you avoid losing history when making the transition.
I agree.
Haida Manga
no matter what the change set "theory" are implemented into the product if it's not easy to do things with it, it will languish. VSS and CVS are still used widely becuase there are lots of clients and tools that make it useful. the draw of SVN (loved or hated) is that it has a good client and the command line client is easy to drive with scripting tools
The previous poster who showed how easy it is to use darcs sold me, I am thinking it could be real useful
..or is there another way to access the Haskell theory of patches functionality from outside the app?
right away just for my own work.
Took a brief look at the pretty site. Personally I've been intrigued by Haskell for a while though never jumped in, and I use Perl. My questions:
1. Can the elegant quantum reality inspired code be separated off? Though my take is that it is already separate, as a Haskell function.. the reason for the question is that it sounds like it would be useful for a whole lot of things. Instead of implementing app/protocol X over darcs, I am wondering if you could include an (inline) Haskell module in a Perl app that would do the rest.
1.5
2. Next question, can Haskell be embedded inline in Perl code?
3. Can the quantum theory of patches be implemented as a Perl module, and ignoring the probably truth that anything not Haskell will not be as elegant as Haskell, would such an implementation benefit/be renedered possible by using the Perl functional or Quantum:: modules?
3.5 At risk of a flame war I'd love to use this in XEmacs. Anybody? This post written in vim so no flames please!
4. Reading about the symmetry or lack of it, concepts of physics this is helping me think about an app of my own. I'd like to read more about this does anyone have links?
5. Time to learn Haskell!! Great!
I don't know why anyone would make a big deal out of that.
I have to agree with many other comments: the use of haskell eliminated it as a choice for me. I use subversion instead, and still looking for a better vcs. I checked all the available free (and some non-free) systems and all of them have major warts.
Not that I blame darcs or anything, just that one need to be sure that darcs work for everyone before commiting to it. CVS works on all platforms and is well tested. Darcs will hopefully get there.
And yes, I did my part and created a package for my platform. It's linked from the binary download page.
You are not entitled to your opinion. You are entitled to your informed opinion. -- Harlan Ellison
In my systems and my company CVS has long since been replaced with subversion. This is a OSS replacement that fixes CVS's shortcomings (such as atomic check in and directory versioning) It works real well, i'll never turn back.
nt means there is NO text.
It seems to me that a LOT of people in these comments are remarking that David's choice of Haskell makes darcs a no-go. I would make this comment:
If someone told you to use <Tool X> for a project, you would say, "No way, <Tool Y> is more suitable for this job, and it's what I want to use." (substitute X and Y with whatever - C/Java/Perl/VB - you want).
I think David chose what he felt was the best tool for the job, taking the problem-to-solve and his own expertise into consideration. In the light of Paul Graham's insights I really think he should be applauded rather than criticised.
All interpreted languages are abstractions over Lisp
Decentralize CVS? I have a hard enough time getting to the cash registers as it is, dammit!
Sony ha
Major differences:
(*) Such as typo fixes, comment fixes, etc. which you just happened to notice while fixing a particular bug.
HAND.
We are looking at something to replace our ageing CVS system. We have large OSS projects, worked on by teams of 3-10 people. CVS is very good for what it does but we are feeling its limitations. The biggest problems are that forks are too delicate to use, so we don't use them, and that in order to work you need access to the central archive.
Darcs looked like the best choice. We converted and imported some of our archives. Then we tried checking them out. With CVS, 2-3 minutes. With darcs, 30 minutes.
Our conclusion: darcs is not scalable. Admittedly our code base is large and has a huge history, but in order to use darcs we would have had to break our projects into many small pieces, each with their own repository.
Darcs looks good. But it needs to be made much, much faster if it's to work with large projects.
Sig for sale or rent. One previous user. Inquire within.
Lots of people know how to program in C or Perl to some degree, but you wouldn't want most of them modifying the version control system you are relying on. The pool of capable C or Perl programmer is actually much smaller. And even inexperienced Haskell programmers can do considerably less damage modifying Haskell code than they could modifying C or Perl code.
Furthermore, darcs doesn't need a "large group of developers", both because it's not a huge system and because it's written in Haskell. Being written in Haskell probably makes it an order of magnitude smaller and easier to maintain.
...why not make the jump to a system meant to replace CVS's centralized model, such as subversion. Forks are very easy to do, truly atomic commits, CVS to SVN repository converter, similar command line params to CVS etc. etc.
Our current repo is 9 gigs and works beautifully.
I am NaN
Do you see Darcs as a viable version control system for the Linux kernel?
How do you view Linus opinion on version control systems?
I fail to see how. It isn't strictly superior in all categories, and there are certainly some significant differences which would make either (but not both) viable in certain scenarios.
Disclaimer: I'm currently using Arch for all my repos, but that's mainly because Haskell is not really supported properly on my architecture (by my distro). Yet.
HAND.
Sure, if he wants to get a couple hundred entry-level code grinders in a hurry, if he were a business hiring modular, replaceable Windows monkeys, then Haskell would make his life hard.
However, neither of the above apply. This is basically a hobbyist project, a rare and rarified subject in both its spheres (version control and Haskell), with considerable overlap between the academic C.S. community that truly understands either.
"People won't learn a language for one program"? Not even if that program is one of the few and best in their area of expertise? Not even the handful of people needed to keep alive a tightly focused project like this?
I suspect your footnote is incorrect (although it been a long time since I looked at darcs and may remember incorrectly). IIRC, the patches themselves don't vary once distributed, just the ordering of them, so it should be possible to sign individual changes. Of course, this isn't nearly enough to verify repository integrity/authenticity, but I think something could be added relatively easily.
HAND.
I have use CVS (and believe it or not ... I am ashamed to even say it I am now a source safe man)
... why would one not rewrite CVS to make it better instead of running off and doing a new version control system in some obscure language?
Anyways
After all CVS is established, been debugged for years by tonnes of users.
How would decentralizing CVS be an improvement? CVS utilities can already work in both RCS and CVS modes.
Oh well, what the hell...
Install your first ever copy of Haskell, and begin to learn the 'theory of patches'...
That's bullshit. You don't need to know even Haskell's name to use darcs. Same applies to theory of patches.
You need to "learn Haskell and the theory of patches" to use darcs about as much as you need to learn C programming and diff algorithms in order to use Subversion, namely not at all.
Do you need to run a unique UNIX user account and have a special program to pop3 the patches? How can you "cherry-pick" the patches - is there a GUI?
Isn't OSS generally fragmented enough already? Distributed version control is all about making forking easier, or am I missing something?
Having designed,implemented and supported an enterprise-wide (1200+ user) Configuration Management services for over 3 years, I find that the number one thing that most developers want is version control that STAYS OUT OF THE WAY. They DON'T want every bell and whistle. They have to concentrate on their code, not some "neat" (or read pain in the a$$) way to do something.
I support ClearCase/ClearQuest worldwide for a large corp. I deal with the helpdesk calls, the support, the engineering efforts the "best practices", and sometimes the teaching of best practices.
Why would anyone want to deliver a patch out of sequence? It should make sense in the simplest sense, i.e. "if I apply this I get that". Most developers don't concentrate that deep.
I personally think ClearCase is great if your industry is software development, but for regular development, it's like driving a tank to the store for a loaf of bread. and it's EXPENSE!!!!!
If I had to move to another product, I would at this time choose Subversion. It's super simple, fast, distributed (for world-wide development efforts or content submissions) and well supported. It has support for Eclipse, a Windows client and a good security model.
I looked at other systems and was always amazed by the convoluted version models.
And why would I let developers "declare" a set of files as a "change"? It's hard enough to get the concept of a baseline into their heads. They always look at it as "I only changed 2 files, why do I have to label everything?" and I always have to ask "How do you tell what made up a version?".
There's a LOT more than neat ways to do things involved in configuration management.
I would LOVE to see a simple application that could track defects/Change Requests and link them to a version or baseline SIMPLY. Simple is not easy, because the truth is that managing change in a distributed model is very difficult. By simple I mean simple to use, simple to manage, and simple to maintain.
I haven't found it yet, but I have found parts. I may have to roll up my sleeves soon.
http://shit.slashdot.org/article.pl?sid=04/11/25/0 136249
Larry McVoy, founder of BitMover will be speaking about distributed revision control at SCALE this February.
er...
1- C, C++, Objective C, Java, Python, {SPARC, x86} assembly, LISP, Haskell, Prolog, Pascal, VB (blearghhh), shell
I rarely criticize things I don't care about.
Only if the semantics are the same. If the semantics differ (subtly) it's not a good thing. Besides, you still haven't shown your original claim (that svn is strictly superior to darcs). Yes, svn is superior to darcs in some ways, but darcs is also superior to svn in some regards.
HAND.
But in the end I think a centralized repository is right for many (most?) projects: Why Bitkeeper Isn't Right For Free Software (by Greg Hudson) was the most convincing argument to me.
Of course, you can simulate a centralized model with a distributed system (just don't use the distributed bits), but it seems like you are on your own at that point. Subversion is behind when you compare distributed features (of course), but when you compare the other features (usability, access via various method, programmatic access, etc), it's way ahead. As it would be; centralized systems are easier to think about, so they are easier to develop with and on top of.
I mean, a get as I comprehend it should consist of 2 operations
- get all the changesets, and an annotation of how they fit together
- compute (or for efficiency merely copy) the end product
Both ops could be implemented as straight-up file copies, duration: sod all (give or take bandwidth). So why isn't it so simple?
...you (or someone) could work out a way to canonicalize the "meaning" of a patch, so this canonical form would be immutable across commutations, and could be signed.
... like these: http://www.abridgegame.org/pipermail/darcs-users/2 004-November/004396.html
(Sorry, fscking slashdot tags...)