blogstrapping

The Sourcecode Network

I watched a movie today. Perhaps you have heard of it. This movie is called The Social Network, and it is the dramatized, fictionalized story of Facebook and one of its founders, Mark Zuckerberg. There is a lot I could say about this film, but none of it is really relevant to what I am about to say. There is a lot I could say about Facebook and Zuckerberg, too, but even Facebook itself (to say nothing of Zuckerberg) is not really relevant to what I am about to say. Facebook is just a metaphor, for now -- a better metaphor in this case than the all too common use of a car as a metaphor for anything related to information technologies. There is a lot I could say about source sharing sites like SourceForge and GitHub, too. I am here to talk about that.

GitHub is Facebook for coders. It is a social network in which your profile information is not your birthday, relationship status, and a photo; it is instead your contributor memberships, project status, and source code. I suppose you might say that SourceForge is MySpace for coders. I do not really know what that makes Bitbucket, which -- of SourceForge, GitHub, and the probably dozens (by now) of such sites -- is the only source hosting site where I currently have an account. Maybe I should rectify that at some point. In any case, maybe Bitbucket is Orkut or Friendster or Google Buzz or something like that. Actually, I think Google Code is Google Buzz, while Launchpad is probably the OkCupid, of these sites.

I think the metaphor breaks down before I find an appropriate choice for Bitbucket, for some reason. Maybe that is a good thing. On the other hand, if Diaspora doesn't flop, maybe that will be the metaphor for Bitbucket's place in this code hosting site niche.

The point is that these are not just code hosting sites. To the extent that they encourage collaboration, they are code hosting social networks. People with accounts can "follow" or "friend" or otherwise monitor the accounts of people they like -- or, more precisely, people whose code they like. They can also create groups, or projects, that other people can then join or monitor. Messages can be sent. Status messages for your code can be posted for others to peruse. Conversations occur in issue trackers and private messages and even in the code itself. Have you ever stopped to consider just how social it really is to clone a software repository at Bitbucket, make some changes that solve a need for that project, then send a pull request to the original project's "owner"?

While you are at it, consider how much such code hosting sites tend to discourage antisocial coding. You have to pay real money to have projects that are not necessarily public! Well, that has slacked off a little bit since Bitbucket's recent acquisition by Atlassian, but even now you cannot have give more than five people (yourself included) access to private repositories hosted by your Bitbucket account unless you have a paid account. Essentially, you have to pay money for the privilege of being even remotely antisocial on Bitbucket.

While GitHub seems to be the default social code network of the near future, there is nowhere near the kind of single-site dominance in that market as exists in Facebook's market, where things are getting so ridiculously dominated by a single provider that the whole of the Web is sprouting Facebook "Like" buttons and "Login Using Facebook" links in the most unlikely of places. Part of this reduced dominance of the player with the most buzz in code hosting, I think, has to do with the fact that sites like Bitbucket, GitHub, and Launchpad are each focused on a single version control system. In fact, each of these three are the de facto "official" code hosting sites for their respective DVCSes: Mercurial, Git, and Bazaar. If you are only just getting into the idea of code hosting on the Internet, and you use Mercurial, Bitbucket is the obvious place to do it. The same goes for Git/GitHub and Bazaar/Launchpad. This, of course, limits the number of people who might choose one or another of these sites as the primary choice for code hosting, because there is no consensus for what tool people should use as a VCS.

Sites that are less one-trick ponies, that support more than one VCS, lack the obvious initial draw of those that are regarded as some kind of "official" choice for a given VCS. They also, generally, do not have their shit together quite as well -- because they cannot specialize, and keep things simple, the way the one-trick ponies can, and users are still motivated to pick a single VCS for most purposes and stick to it. As things currently stand, a multi-VCS hosting site seems mostly to be stuck with either lacking a lot of the social networking capabilities of something like Bitbucket or suffering community disunity amongst the users of different VCSes. They also tend to be slow to adopt new VCSes, because of course they do not want to waste time and energy adding a new VCS to the system, and maintaining it, only to find that it falls by the wayside and never really picks up any user base to speak of, including unfortunate examples like Codeville (whose Website at codeville.org has vanished). Meanwhile, the increasing sense of need for a code hosting site for VCSes will pretty well ensure that someone will create a site devoted specifically to that VCS early on, before it has "proven" itself in terms of popular appeal, effectively cock-blocking the multi-VCS hosting sites.

Ultimately, though, I think this fragmentation in the code hosting market is a good thing. Bitbucket, GitHub, and Launchpad thrive, and grow, and provide an incredible amount of value for their regular users. They encourage and foster open source development, innovation, and collaboration. They do for open source projects what closed source advocates might claim they would do to those projects -- they encourage forking, make it easy. This is a positive thing, because it keeps open source projects honest and, more to the point, it makes it easier to try out a new approach and ultimately merge it back into the original project, or at least share ideas back and forth. The only downside is the mutual incompatibility of the DVCSes that go with those sites, and that problem is being solved a little at a time by repository translation tools.

Take the examples of FreeBSD, NetBSD, and OpenBSD, which are three forks of a single original BSD Unix codebase. They are entirely separate projects, each managed in a very different way from its siblings. Despite this, they have all been sharing code fairly promiscuously for about as long as they have existed, and all of them benefit from this collaborative sharing. Imagine how wonderful it will be when they are all standardized on version control via some DVCS that allows such easy forking, merging, and patch sharing. They will probably give birth to some kind of special-purpose analog of sites like Bitbucket, in time, to ease the process of collaboration and sharing specifically between these three projects.

Now let us extend that idea to every little basement or off-time open source code project conceived and executed by one or two or maybe three people, all of whom can search out similar small projects on a common Web-based platform like Bitbucket. Consider as well the possibilities that come from becoming a known coder by the popularity of one's projects, or by the influence of code submitted to others' projects. This is the power of the social network. This is not the social network for Ivy League student bodies, for sales managers and petty bureaucrats, or for college sports has-beens and high school seniors looking for a hook-up, though. This is the social network for people whose social interactions online are oriented around actually getting something done.

This is the social network for coders, for people whose several hours a day spent in front of a computer outside of work time involves producing valuable innovation rather than posting brain-dead comments at YouTube. This is social networking as a multiplying force acting on the productivity of insomniac computer geeks with brilliant ideas, reducing the cost of innovation while increasing the ease of propagating ideas across the world.

This is also, ultimately, likely to really undermine the authoritarian control freaks' grip on the Internet even as they try to establish that grip in the first place. If you think Napster was a disruptive technology for the record industry, just wait until you see what can be done with distributed version control systems aided by the power of social networking. The most interesting part of the disruptive potential of social DVCS networks is that it may be that almost nobody will notice until long after the effects have already made their mark. Nobody really pays attention to the code people write on their own time, except maybe organizations like the NSA if it happens to be cryptography code.

It is said, often enough, that the Internet treats censorship like damage and routes around it. On the Internet, source code is power, and a distributed version control system puts the power of source code in the hands of the people who most agree with the idea that censorship is damage (at least where their code is concerned) -- who depend most on the effects of that idea put into practice. A distributed version control system turns the sharing of that code into an act that is perfectly natural, easy and rewarding. Turning DVCSes into a social network unifies that power in a way that cannot be easily combatted.

Eventually, social code hosting sites like Bitbucket will surely become obsolete. Something better will come along, just as sites like Bitbucket were "something better" compared to SourceForge when they came on the scene, and just as SourceForge was preferable to FTP and email and postal mail. I think that they will likely become obsolete by way of DVCSes being extended into, or replaced by, distributed social version control systems, so that centralized code hosting like Bitbucket provides will no longer even be necessary. I, for one, am chomping at the bit to see that happen.

In the meantime, though, you can have your Facebook if you want it. Sure, I have an account there, but I do not really use it or like it. I do not even particularly condone its use, given the sketchy, underhanded way Zuckerberg's monstrosity abuses the trust of its user base. Instead of using a Social Networking site, I will focus my time and effort on a Sourcecode Networking site; instead of Facebook, I will use a Sourcebook, to repurpose a term. If you want to babble about what you had for breakfast on your "wall" at Facebook, go ahead and waste the time. I, on the other hand, will share something useful that I created with my own faculties, something worth sharing, on Bitbucket.

You can use Facebook and share it with your two hundred and fifty "friends" who would not even loan you $50 each to pay your medical bills if you want to, but really, I would prefer you do something productive, innovative, and valuable, and share it with me on Bitbucket. Let's do something good with our time. Save your babbling for advocacy and contemplation on your Weblog.

By the way, if you like, you can use this Weblog CMS application for free. You can find it on Bitbucket. Most of you probably would not like it much, though; it's pretty unsophisticated.