tech-repository archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: The essential problems of moving from CVS




On Jan 18, 2010, at 12:13 PM, bharder wrote:

I've cc:'d drh, guessing he might be interested in at least watching
fossil (potentially) being considered for such a sizeable project as
NetBSD, and perhaps commenting on it's suitability.


Greetings all NetBSDers. I am Richard Hipp, the designer and maintainer of Fossil (and SQLite) and I would like to offer my views:

Fossil was created by me for my needs. It wasn't really designed to handle a project like NetBSD. But on the other hand, as with many software projects, Fossil has ended up being used successfully in ways far different from what it was designed for. Even I'm using it differently from what I original envisioned. So Fossil might work well for NetBSD. Or it might not. I don't know your workflows, so I can't really say for sure. What I can do is try to give you some insight into the differences between Fossil and other VCSes.

Distributed VCSes (DVCSes) have many advantages over more traditional central-server VCSes like CVS and subversion. No doubt you've already been over that ground. But DVCSes also have some big disadvantages. DVCSes encourage lots of branching. And they force you to do lots of merging. And DVCSes do not have a central place to go look for all the action.

Fossil tries to take a middle approach. Fossil allows you to have a central server (or two or three - see http://www.fossil-scm.org/fossil/doc/tip/www/selfhost.wiki for information on the 3 geographically distributed self- synchronizing servers that host Fossil itself) where all the action resides. But Fossil also supports disconnected operation, so that check-ins and check-outs (and bug-tracking and wiki managements) can take place offline, in airplanes, or wherever else you work and wifi is unavailable. The servers tend to keep all developers on the same branch so that everybody is working on the same code base and there doesn't need to be a central merge-guru whose only job is to merge together diverging changes from all the other developers. Fossil make it easy to create branches when you want to (release versus development, for example) and branches are way easier to manage than in CVS and SVN. But, unlike git and hg, Fossil allows multiple developers to be working on the same branch at the same time. In that way, Fossil is much closer to CVS than the other DVCSes out there.

Other nice things about fossil: (1) The whole thing is a single executable. There are no dependencies. You can run it from within a chroot jail for security, if you want. And the executable is cross- platform (with recompilation) so that you can work from a variety of platforms. (Though, I suppose, yall will work exclusively from NetBSD - I'm cool with that.) (2) The client/server communication is over HTTP with proxy support so that it works from behind restrictive firewalls. We've been told by some users that Fossil is the *only* VCS (distributed or otherwise) that they can get to function on the network of their employers. (3) The sync protocol is amazingly efficient. SQLite used to be a 320MB CVS repository, but since being moved to Fossil, can be cloned using only 13MB of network traffic. A typical check-in for SQLite uses about 3-4KB of HTTP traffic - which is small enough that SQLite is easily usable from a dialup modem. (That might be useful if you have to work from a low-bandwidth wireless connection.)

FWIW, I think the "fossil ui" feature is really cool. I use that a lot. "fossil ui" was not part of the original design of Fossil. It was an idea I had one day. But that idea has changed the way I do software development.

Git and hg are faster than Fossil I'm told. I don't much care, though. Fossil is "fast enough". A check-in normally takes a second or two. Are you such a hurry that that is too slow? Part of the slowness is that Fossil does lots and lots of checksumming and cross- checking to make sure that everything in the repository is valid and recoverable. That's a defense against bugs. I'd much rather my check- in take an extra 500 milliseconds and know that my work is safe, than go a wee bit faster and always have the nagging worry that I might hit some obscure bug that is going to wipe out the last days work.

I suppose my biggest concern with Fossil and NetBSD is how Fossil might scale. We use Fossil on projects with a 1GB or larger check-out and with thousands and thousands of files. But I didn't really design fossil for truly huge projects. How big is NetBSD? How large is your CVS repository? How many check-ins do you do per day? How many developers do you have?

I'd be thrilled if yall give Fossil a try. If you run into any scaling issues, I'll be happy to work with you to try to resolve them. But also please understand that if you want to go a different route you will not hurt my feelings. Fossil is there if you want to use it, and I'm happy to help you with it, but I really wrote it for myself. And it meets my needs well.

I'm not on the NetBSD mailing list, so CC to me on replies is appreciated.

D. Richard Hipp
drh%hwaci.com@localhost





Home | Main Index | Thread Index | Old Index