Zed Shaw: Launchpad vs. Github/SysAdmin vs. Coder
sheddingbikes.com
sheddingbikes.com
I also know plenty of other sysadmins who use github but find no value at all in Launchpad.
Also: FWIW, I never notice folks' names on github. The important thing for me is that the code is right there front and center. If I want to download it, I click the clipboard button and then go clone it. Boom.
Edited to add: I also think that if it's not immediately apparent which fork is the "canonical" one, it probably doesn't matter. Just grab whatever looks most popular. If you decide you'd rather have a different one, then grab that later. shrug
Yeah, I think "BOOM!" is right. If you can't see the flaw in stuff like this:
http://drnicwilliams.com/2009/11/04/hacking-someones-gem-wit...
http://groups.google.com/group/gemcutter/browse_thread/threa...
Then you got no business being a sysadmin and working this way.
A programmer is prepared to dive deep. The programmer writes tests that validate their assumptions at ever level. The programmer lives intimately with their project.
Contrast this to the sysadmin. The sysadmin lives wide. He/she has to support many developers and many applications. These days, it's popular to use virtualization to isolate applications in their own little world, but it's also horribly inefficient. I love virtualization because it lets me get the most out of my hardware, but as a responsible sysadmin, I group applications in ways that make sense, rather than firing up a bare bones container for every app. This means that I must maintain some sense of consistency and order in the environment. Imagine the sysadmin's frustration when every programmer they work with thinks it's ok to grab any randomly forked lib from Joe Blow's GitHub repo and expects the sysadmin to integrate it in to the environment. It's a change management nightmare.
Being a sysadmin is about fostering stability and consistency. The server must be up. Apps must be up. The sysadmin's job is to make sure those two conditions remain true, and the "fork and go" mentality makes it a nightmare.
I mean, as it is, I see segfaults and whatnot regularly in the canonical, distro-released versions of Apache. Major software releases all the time with bugs that could potentially be a show-stopper. My experience hasn't shown this to be any worse with non-canonical sources. Sometimes it's better.
Further, I like to think of the sysadmin's job as fostering business continuity. While uptime is a primary indicator of this, I think it's lower in priority than say, losing a crapload of customer data. If I have to shut a site down for an hour to prevent losing all transactions for the previous 24 hours or something, then it's not a terribly difficult choice. (Having to make this choice at all, of course, means you should be engineering something better. But we don't have the luxury of infinite time.)
And having all the uptime in the world won't help you if your engineers can't do their jobs effectively because the tools you give them are insufficient. Sometimes the best option is to suck it up and try that patch.
It's a delicate balancing act, and I'm not by any means advocating running all your software out of unofficial repos. Sometimes you gotta make that call, though. And if I'm looking at github at all, it's probably because a package doesn't already exist, or because I need a fix for one specific bug.
And yes, I'm an admin for 15 years.
My experience is when software is bad, it's just bad. No packaging system will help it. If I have a suspicion it's bad, I want to see quickly just how bad it is and check if I can repair it in half of an hour or drop entirely. Github helps with such decision greatly.
Lots (if not most) of the code has documentation so poor, that there's no way to determine what it's really worth other than looking at the code, examples, tests. Github does it right by enabling you to browse the code right away and make your opinion.
This is also the reason why Sourceforge and other *forges are doomed - and to a lesser extent google code too. They present complicated interface but all in all you end up downloading the tgz only to determine later that in most cases it wasn't what you're looking for. All that buzz because of the premise that said package is actually worth your attention. Well, usually it's not (but probably is for someone else). So it is right and sane to give an opportunity to decide it as quickly as possible, by showing the code tree as quickly as possible.
git clone https://github.com/USER/PROJECTNAME
git clone git://github.com/USER/PROJECTNAME.git
Can you tell me off the top of your head how to checkout the source for $RANDOMPROJECT on sourceforge? What's the common URL to browse the sourcecode? One of my buggest complaints about sourceforge is that there is no easy way to grab an actual URL of a package for a project to download without manually editing it if you wanted to cURL or Wget it to a remote server you are shelled into. After enough years I've learned to download packages from sourceforge using this URL form: curl -O http://MIRRORNAME.dl.sourceforge.net/project/PROJECTNAME/SOMERANDOMFOLDER/PROJECTNAME-PROJECTVERSION/PROJECTNAME-PROJECTVERSION.tar.gz
My hats off to the guys at GitHub. They took usability to the next level.I can't. That was the point, I'm always lost there..
Zed Shaw is trying to divine the failures of Launchpad backwards. When you know the story behind it, it becomes brutally obvious. :-)
I disagree. Experienced programmers definitely care about bug trackers and version numbers. Once you get bitten by version skew or lose a day trying to reproduce a bug against a wrong version, you start to care about such things.
And small projects are just big project that haven't grown yet :)
The +junk feature sort of does this, but it's a lot more awkward to use than GitHub because viewers have to jump through flaming hoops to get to the code.
Ideally, there would be a http://junk.launchpad.net/~jmillikin/ that I could just ``bzr push`` random stuff to and have it show up.
† Zed suggests this is due to developer vanity, but actually I see no need to pollute the precious global namespace with half-baked code.
In Gitorious the project is the main resource. Developers can be working on a project and they get their own area where they can put forks of the project or other one-off stuff.
You can even easily (for a definition of easy as "doable with some effort") host one yourself for internal projects as it's available under AGPL.
It's still not as easy to use as github (due to the project hurdle and less refined UI) and the public service lacks what makes github especially good: the large community of users
Edit: If it's a Ruby Gem, you can also look up the gem on rubygems.org and click the Homepage link.
Then, because projects live under a person, if they want to transfer ownership, the whole damn project basically goes dead and you have to track it down again. Again, if I'm a sysadmin that sucks since I have to keep up on their internal politics. If I'm a programmer I go, meh, and just pull the new stuff.
Plus, I usually just let Moonshine/Puppet take care of the sysadmin part for me and trust that it will grab all of the right packages. The people who write the Puppet recipes would probably feel very differently though.
That's not the only problem.
Even with the network tree, you're still screwed, because Github's network graphs are incomplete. Take this brief conversation from ruby-talk last year:
http://www.ruby-forum.com/topic/203100
I challenge you to deduce the result of that discussion from the information available here: https://github.com/rightscale/right_aws/network
Right now, without delving into the code, I still can't tell which one is supposed to be canonical, if they've diverged irreparably, or if it just doesn't matter which I pick.The "top parent" project: https://github.com/pieter/gitx
Andre Berg's fork: https://github.com/andreberg/gitx
The Brotherbard fork: https://github.com/brotherbard/gitx
Which is "the project"? The answer is all of them AND none of them. That's the nature of GitHub. Zed's point is that for a sysadmin, all this obscurity is unacceptable. Having a canonical source for a package is important. That source should obscure away who the actors are making the package happen. If Pieter wants to hand the project off to Andre, who in turn hands it off to Nathan, that's great, but the sysadmin doesn't really want to track that for every package he/she installs on their server.
That is why launchpad is better for sysadmins. Not because it is better in any general sense. Just because it meets a different set of needs. These are not criticisms of GitHub, these are statements of the reality.
The closest thing GitHub has to a "project" abstraction is the organization:
https://github.com/blog/674-introducing-organizations
One could, conceivably, create an organization to manage a project's code, but that doesn't address all of the other package ecosystems that Launchpad executes more deftly.
I know Zed Shaw isn't saying one is better, but doesn't the popularity of Github compared these sites tell us something?
Projects start out as one person messing with code. Of course the project belongs to one person at that point. As more people join in you can re-structure the project into an organization with multiple owners.
Check out the announcement from June 2010 https://github.com/blog/674-introducing-organizations
"Really I think you need a 3rd system that's radically different."
I think he's right. I'm not sure what that 3rd system would look like. I wonder if a meta-service piggybacking on both Github and Launchpad would work?
But, sort of got stuck at how to do the client. I've recently relearned GUI coding and will probably dust the idea off and try it again soon.
a) It's slow. Pages seem to take an age to load.
b) I can never find anything.
My problems with github:
a) Fork queues never seem to work. Support will occasionally respond to complaints and fix a specific one, but never the general problem.
In a single piece of software, the compiler can enforce some degree of consistency between different components. In a distribution this is done manually. That's why it scales poorly.
Possible solutions:
* Cross-application consistency checks. This seems to be the way Singularity is heading.
* Smaller distributions -- or rather, standalone VM images that have a carefully curated mini-distro built around single applications.
I mean, you're absolutely right; but at a certain level it's irrelevant.
I don't think that's true. Having the name first is great for uniqueness of the fork, but has been a pain when finding the canonical version. I've seen plenty of projects that adopt the similarly named user account, which is great.
As for Zed main argument, I am not sure it is the whole story. I think the launchpad vision is great, but the delivery mostly a failure. The fundamental idea of being able to track downstream bugs in a project sounds really right to me, but launchpad UI is really a big mess: you need a lot of hoop to get the code. Sure, you can do lp:foo for project foo, but few people know bzr, and for a long time, there were numerous issues between different incompatible bzr versions (which have been fixed ever since I think). Forcing people to use bzr has been one cause of failure I think.
I also wonder how much differences can be attributed to how the things came to life: launchpad wanted to do many things from the start, wherease github grew organically.
I can tell you from personal experience though that github's bug tracking is stupid as all hell. Remember that whole blow-up over my book and people turning one damn bug into a massive flame war? That all happened because I couldn't figure out how to contact the project owner directly and figured the bug was the best way to do it. Little did I know that this would turn into a massive idiot festival with no way to turn the damn bug or emails off.
So, I disagree, launchpad's UI is only broken if you're into code. Github's is broken if you're into projects. Too bad they both can't just make both use cases a nice experience.
that said, i do think that launchpad has some excellent attributes, like a bug tracker that doesn't make me want to defenestrate its author.
As for launchpad UI, code browsing is indeed the worse part, but I find the whole thing difficult to understand. For example, we created a page for scipy quite some ago (https://launchpad.net/~scipy), and still today, there is no hierarchy in the information. For example, where can I download the software(and I do mean the releases, binaries if possible) ? A lot of the UI space is spent to convince me to subsribe to the project, or give me information that I really do not care about if I just want to use or install the damn thing for my users if I am an admin.
Also, stuff like email UI to subscribe/create bug has been horrible for a long time in launchpad(I have not checked recently, maybe it has been fixed).
And I agree with your serious statement. Yay, happy!