Hacker News new | past | comments | ask | show | jobs | submit login

I think it's kind of weird that they left out any mention of BitKeeper in this article.

The whole impetus for git (someone correct me if I'm wrong):

1. Linux source was hosted on BitKeeper before git. It basically was one of the first distributed source control systems (or the first? not sure if anything predated it).

2. Linux devs got into conflict with the BitKeeper owner over open-sourcing and reverse engineering, so Linus realized they needed a new system because no other source control system had the features they needed like BitKeeper had (mainly, I understand, the distributed repos).

So basically, Linux is to Unix like git is to BitKeeper (roughly).




This gets at the underlying truth. Once you have been successful in one situation, it becomes far easier to extend that success into other closely related areas. Linus is a celebrity in the open source world, switching his project to git effectively forced much of the core infrastructure maintainers/developers to learn/use the tool. Its the equivalent of putting a bluray drive in the playstation.


Mercurial was also spawned from the BitKeeper drama:

https://lkml.org/lkml/2005/4/20/45


And no-one's yet mentioned Monotone, Graydon's project a bit before Rust. My English Literature teacher was right, Nothing Is Written In A Vacuum.


Right, there was a golden age of interesting DVCSs around then - Darcs (2003), Monotone (2003), Bazaar (2005), Git (2005), Mercurial (2005), Fossil (2006).

I use Arch (2006) btw.


It shows how important having a big name behind a project is. Linux gave Git its momentum.


It's not just the big name -- Linus learned from the mistakes of the older DVCSs. I also used to use Arch a bit. Git was a vast improvement (eg. it didn't force you to use long ugly branch names).


If memory serves, DVCS were slow until Git came along


I'd not heard of it before your post, interesting!

https://en.wikipedia.org/wiki/Monotone_(software)


Monotone should have been what we're all using :(

It has a much cleaner interface, easier to use, better formalism, code signing is built-in and required rather than tacked-on and optional, and insanely good documentation (I still sometimes recommend people to read the monotone docs as an introduction to git/DVCS).

It was also basically finished and stable when the BitKeeper drama happened. It was one of the few alternatives Linus looked at and publicly evaluated before writing git. But unfortunately, its performance was pretty poor for a project the size of Linux at the time, and a combination of human failings + the well architected abstractions which hid the underlying monotone data structures convinced Linus that it was less effort to write git than to fix monotone.

In a literal sense that was true since git was basically written in a weekend.. but more than a decade on we're still basically stuck with all the design short-cuts and short-falls of a weekend project. The world would be a better place if we used monotone instead :(

Edit: these days I'm more a fan of the formalism of darcs, and really looking forward to a stable pijul. But there is a soft spot in my heart for monotone, and more than once I've considered forking it to modernize with compact elliptic curve crypto instead of RSA and a faster non-relational database or filesystem backend instead of SQLite.


Git, Mercurial, and Bazaar all came out within a month of each other, so I'm guessing Bazaar did as well.


That's so bizarre! I remember hearing about mercurial & bazaar in 2005, was still using svn at work in 2006/2007. I don't think I knew about git until Ruby on Rails switched to it in 2008. Interestingly the switch happened at the same time Github launched.


> 1. Linux source was hosted on BitKeeper before git. It basically was one of the first distributed source control systems (or the first? not sure if anything predated it).

There were several systems which predated it. The most arcane one I know of is Sun's TeamWare[1] which was released in 1993 (BitKeeper was released in 2000). It also was used to develop Solaris for a fairly long time.

Larry McVoy (the author of BitKeeper) worked on TeamWare back when he worked at Sun.

> 2. Linux devs got into conflict with the BitKeeper owner over open-sourcing and reverse engineering, so Linus realized they needed a new system because no other source control system had the features they needed like BitKeeper had (mainly, I understand, the distributed repos).

That is the crux of it. Linus does go over the BitKeeper history in the talk he gave at Google a decade ago on Git[2].

[1]: https://en.m.wikipedia.org/wiki/Sun_WorkShop_TeamWare [2]: https://www.youtube.com/watch?v=4XpnKHJAok8


Wasn't the final straw when Bitkeeper revoked usage for open source projects?


That appears to be accurate. BitKeeper froze out kernel developers in April 2005[0] and Git was started the same month[1]:

> Git development began in April 2005, after many developers of the Linux kernel gave up access to BitKeeper, a proprietary source-control management (SCM) system that they had formerly used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after claiming that Andrew Tridgell had created SourcePuller by reverse engineering the BitKeeper protocols.

But as the BitKeeper article makes clear, the relationship between BitKeeper and OSS had been frosty for a while.

[0] https://en.wikipedia.org/wiki/BitKeeper

[1] https://en.wikipedia.org/wiki/Git#History


And in an interesting twist, it seems that BitKeeper is now Open Source anyway (or at least I see "Now available as Open Source under the Apache 2.0 License" on their webpage) meaning that this could all have been avoided


Yes. They even did a Show HN in 2016 when it happened: https://news.ycombinator.com/item?id=11667494

Larry McVoy comments here occasionally as https://news.ycombinator.com/user?id=luckydude


Going by the posts in the forums[1], it's more that BitKeeper has effectively ceased operations in terms of selling its system.

People have noted multiple times that its current build system is fairly hostile to packaging on *NIX, but nobody seems to be putting in the work and the time. I'm somewhat curious about BitKeeper, but not enough to make my first goal to go down into its guts (complete with a custom stdio from NetBSD with modifications!) to make it play nicely with my system.

[1] https://users.bitkeeper.org/t/thoughts-after-a-few-days-with...


Larry McVoy was know for threatening employees of companies using BK and developers of competing VCSs [1], so I understand why so many people wanted to keep away from it.

[1] https://lwn.net/Articles/153990/


One of the Samba people connected to a Bitkeeper server using telnet and typed ‘help’. The server helpfully returned the commands it would accept. This rather infuriated Larry who considered this reverse engineering.


I've never used BitKeeper. How much of Git's design is "inspired" by BitKeeper/how similar are they? Particularly at a file format/low level.


If anything they are as different as possible. And part of that was to avoid legal problems with BK.


BitKeeper was created in large parts to fit Linux and Linus came with a lot of feedback to McVoy. Perhaps even took part in the original design? Someone who can remember can surely fill in. I never really used it, but I expect there to be some shared ideas for those reasons.


BitKeeper was distributed sccs on steroids, but kept true to its sccs heritage -- as tridge had demonstrated when he "reverse engineered" BK by telneting to the server and typing "HELP" (and following examples from it).

SCCS is a single-file revision management system, which inspired RCS (but they are not compatible IIRC; one keeps changes forward and the other backwards). CVS was a management system on top of RCS to provide "repository-wide" actions and branches. SVN was supposed to be "CVS done right".

git is a blockhain/dag content addressable storage, inspired and borrowing a lot from monotone (a system created by Graydon Hoare who later went to create rust; Linus credits monotone and graydon for inspiring the design of git, which is essentially monotone but much simplified).

McVoy and Linus did, in many ways, collaborate on making BitKeeper more comfortable for Linus and Linux development; but the design and implementation of BitKeeper predates that and goes back to SCCS through TeamWare, and maybe even farther.


SCCS uses a “weave” representation in which all revisions of a file are interleaved. Checking out any revision takes the same time; diffing is fast. RCS (and CVS) represents files as diffs backwards from the latest revision, and if there are branches, diffs forwards from each branch point.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: