
Git promises to be a distributed software management tool, where a repository can be distributed. Yet, the mechanisms used to date to actually "distribute", such as rsync, http and ssh, are very much "single path" and centralised.
GitTorrent makes Git truly distributed. The initial plans are for reducing mirror loading, however the full plans include totally distributed development: no central mirrors whatsoever. PGP signing and other web-of-trust-based mechanisms will take over from protocols on ports (e.g. ssh) as the access control "clearing house".
The implications of a truly distributed revision control system are truly staggering: unrestricted software freedom; the playing field is levelled in so many ways, as "the web site" no longer becomes the central choke-point of control. This article will explain more fully some of these implications, not only from a technical perspective but also including the political implications for Software Freedom.
What is GitTorrent?
From the gittorrent page: The GitTorrent Protocol (GTP) is a protocol for collaborative git repository distribution across the Internet.
Straight from the homepage, as it's put so succinctly:
GitTorrent is a first step towards applying decentralizing Peer to Peer concepts to Git. If you decentralize the download layer, it's just another small step before you decentralize the push rights and tie it to a web of trust such as PGP, and then you don't actually need discrete mirror sites. Every mirror can track the git repositories the owners want it to carry, and those authorized to sign updates can make signed updates to push the cloud forward. Your local mirror can become a one-stop git push and pull stop depot, and the source code is preserved in many more places, increasing resilience, availability and download performance for all.
(Hurrah. Wouldn't it be nice if money and real goods could be exchanged and distributed as easily, we'd be living in paradise...)
Why is GitTorrent so important?
The possibilities that GitTorrent opens up are just mind-blowing. Here are a few:
Here's the very strange thing about all of these idea: they are not new; they are all in development, or exist in one form or another - they just haven't been tied in behind GitTorrent. yet.
GPG-signed distributed distribution
git tag provides the means to digitally-sign a release. It's therefore possible to make GitTorrent aware of this by specifying whose GPG keys you trust, as part of the "pull" process. update-hook in tracker shows the principle (using the cogito command, cg tag).
Keynote for advanced trust infrastructure management
KeyNote, aka RFC2704, allows access control rules to be digitally signed. Integration of KeyNote into git would provide a formal language for pulling git repositories from people that you trust - or, specifically from groups of people that are trusted.
GPG signatures go onto git tags in an RFC922-compliant fashion: there can thus be multiple such signatures: the initial person who created the patch; the lieutenant who signed it off; Linus himself; the Distribution maintainer and finally the package maintainer. At each stage, the use of a KeyNote formally-specified "gateway", written into a file that itself is digitally signed, is an automated double-check on where the source code, the wiki content, the bug and the binaries will end up being pulled or pushed, across the cloud.
The alternative is to have shell-scripts, as git hooks, that hard-code the people who must GPG sign a tag before it can be distributed: that just gets messy, and it should be clear that KeyNote is a much better tool for the job.
Distributed Wiki
IkiWiki is a Wiki where the original wiki content is stored in a repository, and, in the case of git, hooks can be executed to turn the wiki pages into HTML. That's all very well-known.
What happens when GitTorrent is thrown into the mix is very exciting: Wiki-based documentation becomes decentralised. Imagine if Wikipedia could be mirrored locally, run on a local mirror, where content was pushed and pulled, GPG-Digitally-signed; content shared via peer-to-peer instead of overloading the Wikipedia servers.
Distributed Bugtracker
dist-bugs is a project to design a worldwide globally-useable format (strictly: microformat) for bug tracking. The underlying transport is not part of the specification, as the microformat is generic enough to be transferred over anything.
Imagine dist-bugs being stored in a GitTorrent-backed distributed wiki or other web server. In this way, the bug database could be used for offline work as well as online work. And, thanks to the combination of dist-bugs and GitTorrent, bugs would be world-wide globally unique, GPG-Digitally-signed, version-trackable (one distro has the bug listed as fixed and another independent linux distro has it as still open) - it's just an incredibly powerful combination.
Distributed Linux Distribution
vcs-pkg has as its goal:
The aim of the vcs-pkg project is to investigate the use of version control for distro package maintenance. We bring together people interested in taking the next step in distro package maintenance: the proper integration of version control into the package maintenance workflow.
An earlier advogato article, Distributed Debian Distribution Development discusses how debian's packages can be peer-to-peer distributed, and vcs-pkg is a generalisation of the issues involved.
It goes without saying that the binary distribution is not the only part that needs to be distributed, but it is a big part of the picture.
Whilst DDDD advocated that projects such as debtorrent and apt-p2p would help with debian binary package distribution, vcs-pkg with GitTorrent as the underlying transport would be much more powerful, as it would allow anyone to create their own Linux - or FreeBSD - or other software - distribution, based on top of existing packages.
Branching a distribution: git checkout -b ubuntu-8.1-custom
Suddenly, creating a major overnight runaway successful distribution no longer needs the resources of a corporate-backed RedHat or even the charity-backed Debian: anyone could start a distribution themselves, and it would automatically be peer-to-peer replicated.
If the GitTorrent-backed Debian Distribution concept had existed at the time, ubuntu would not need to have forked and copied the entire debian codebase / repository at the time. Debian users who wanted to try out Ubuntu could have done so with a single command such as "git checkout -b ubuntu".
Root-mounted Git Filesystem
GitFS is a FUSE (File System in User Space) plugin that allows a Git repository to be accessed as a mounted filesystem. Although it is read-only at present, that is more than enough for the required purpose.
Imagine running an entire Linux (or FreeBSD) distribution off of a GPG-digitally signed GitTorrent peer-to-peer distributed binary repository. That's a long sentence with a hell of a lot of buzzwords. The implications are that there would no longer need to be binary mirrors, and, as long as one person in the swarm still has an application that's needed locally, everyone else can automatically get it, too.
Distributed automated Backups
Many developers check their home directory into a git repository, using it as a backup mechanism. Imagine what then happens when GitTorrent is added to the mix: a group of developers could set up a peering arrangement where they make automated distributed backups of each others' computers.
An entirely old business model becomes new and easy: providing backups for linux n00bs and linux gurus alike becomes a matter of doing regular git pulls onto Amazon EC2 cloud machines...
Political and Free Software Freedom implications
It's worth explicitly spelling out the significance of the use of GitTorrent for Free Software development, as outlined above.
Flies in the ointment
Here is a list of technical challenges that need to be overcome - to get from here to there:
Conclusion
From a simple, simple project that is suffering from an inexplicable near complete lack of attention from the free software community comes a revolutionary change in the way that free software is developed and distributed. A previous article made it clear the scale of the issues that just Debian on its own faces, and if Linux ever takes off from its current market share to mainstream, much of the infrastructure that's currently taken for granted is going to collapse.
GitTorrent isn't a complete panacea; it isn't a completely utopian idealistic piece of non-existent airhead software, either, because it's real. It's been developed "because it can be". It's just that the implications of its deployment really haven't been fully uncovered. Those that have been discussed here are pretty monumental.
Piece by piece, free software is inexorably getting its act together. GitTorrent is just another bit of the puzzle...
(Note: this article continues the Tech Fusion series.)
ticgit - thank you to the slashdot reader who found this additional example of a git-distributing bug-tracking system.
Git over fproxya link to another interesting idea: that of using freenet to host the project. exactly how this would work (or what features it would provide) isn't clear to me, but i'm adding it here for completeness, in case anyone's interested.
slashdot comment explaining a bit more about git over fproxy, and its limitations.
This is one of those things that is simple and powerful and good on its face. I love it.
But I really wish people would stop acting like git was the only DVCS. I don't like it. I don't want to use it. I avoid projects that do use it. It is not an enjoyable or fun DVCS to use.
yeahhhh omnifarious i know what you mean - it's taken me about three to four months to gain confidence with git, but i persisted, despite finding cvs and svn trivial to get my head round, because of its design and its features.cvs and svn, as they are server-based, actually risk you the loss or destruction of work, due to not allowing you to commit work before performing an update! when you perform an update, you end up corrupting your source code by having merge-conflicts _overwrite_ your uncommited, un-backed-up work!
bzr, mecurial and the others - they're just... *hand-waving*... why??
the other siignificant advantages of git are its extensibility - the fact that the main "git" command is just an exec() runner - and the fact that it's backed by the linux kernel developers is of exxtreeeeme importance, to guarantee its reliability, features and success.
overall, then, "fun" or "enjoyability" doesn't really come into it: amazing amounts of respect for its insane ambitious design and its heritage count far more in my book than whether it's "easy to use".
FOAF updates: Trust rankings are now exported, making the data available to other users and websites. An external FOAF URI has been added, allowing users to link to an additional FOAF file.
Keep up with the latest Advogato features by reading the Advogato status blog.
If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!