惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
AI
AI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
F
Full Disclosure
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Help Net Security
Recorded Future
Recorded Future
N
News and Events Feed by Topic
雷峰网
雷峰网
V
Vulnerabilities – Threatpost
Schneier on Security
Schneier on Security
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Project Zero
Project Zero
罗磊的独立博客
G
GRAHAM CLULEY
腾讯CDC
P
Privacy International News Feed
V
V2EX
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
H
Heimdal Security Blog
L
LINUX DO - 热门话题
Forbes - Security
Forbes - Security
美团技术团队
MongoDB | Blog
MongoDB | Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
宝玉的分享
宝玉的分享
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog

DemoChen's Clip - Latest posts

https://t.co/vLmiBKTtX3 美国是如何实现软着陆的?- 作者:诺亚-史密斯 我们实际上只使用了不到 10% 的大脑 通识千书书单:聪明的阅读者 Sam Altman 创业手册 Putting the “You” in CPU 千古壹号前端图文教程 How to Do Great Work? 提问的智慧 认知偏差手册 写作只能塑造真实的自己(PDF 格式,可下载保存) 模型基础理论 GPT 提示词大全:可直接改写和复用的指令库 如何找到你热爱的工作? 模型即产品 什么时候应该买保险?(附计算工具) Anthropic CEO 谈Claude、AGI 以及人工智能和人类的未来 诺贝尔奖的重大问题 如何打招呼? 通过信息架构提升用户体验 为什么当价格以0.99结束时,你会花更多的钱 如何制定战略的起点? 简单真理:生活中重大问题的明晰温和指引 如何运用可能性思维? LLaMA 3:大模型之战的新序幕 如何才能开发出革命性的思维工具? Muse App 从零到一发展历程 LLMs 和「不」的问题 你不需要记录一切 关于人工智能未来一年 构建通用AI爬虫 关于结肠镜检查 病榻上的人生启示 罗伯-派克的 5 条编程规则 OpenAI 真正想要的是什么? 使用正确的 noopener、noreferrer 和 nofollow 属性防止反向标签抢注攻击 为未来的流行病做好准备:从 Covid-19 中学习 统一内容商业模式 收集和整理资料很好,我们应该多做一些 • Buttondown 理性主义话语的基础 AI 的硬件问题 在充满挑战的市场中筹集资金的 16 条戒律 免信任协议优于信任协议 进化如何使人类更像鸟类而不是其他哺乳动物 医疗保健市场平台,你在哪里? 你和你的研究 自然语言是懒惰的用户界面 探索发现阶段 21 世纪最好的 100 本书
Why GitHub Actually Won
Scott Chacon · 2024-09-09 · via DemoChen's Clip - Latest posts

A few days ago, a video produced by @t3dotgg was posted to his very popular YouTube channel where he reviews an article written by the Graphite team titled “How GitHub replaced SourceForge as the dominant code hosting platform”. 

Theo’s title was a little more succinct, “Why GitHub Won”.

Being a cofounder of GitHub, I found Greg’s article and Theo’s subsequent commentary fun, but figured that it might be interesting to write up my own take on the reasoning behind the rise and dominance of GitHub and perhaps correct a few things that were not quite right from their outside analysis. 

Being at the very center of phenomena like this can certainly leave you with blind spots, but unlike these youngsters, I was actually there. Hell, I wrote the book.

Unboxing of the first batch of the first edition of my Pro Git book, 2009

So here’s an insider’s take on why GitHub won.

If you want a very short read, here is the quick version of why I believe GitHub won and why you’re probably using the site to this day.

I can boil it down to exactly two reasons that happened to resonate with each other at the perfect frequency.

  1. GitHub started at the right time
  2. GitHub had good taste

All four GitHub cofounders had flops both before and after GitHub. Chris and PJ couldn’t quite make FamSpam work before GitHub, Tom and I couldn’t quite make Chatterbug explode after GitHub. I think both of these ventures had good taste and great product, but it wasn’t the right place or time or market or whatever for them to become GitHub level. 

At the time GitHub was starting, distributed open source version control tools were starting to get useful, solid and adopted and there was nobody around to seriously (much less commercially) host them. Big hosts didn’t care and smaller players weren’t serious.

Furthermore, the players (Sourceforge, Google Code, etc) who eventually did care, after seeing Git and GitHub rising in popularity, simply had no taste. They could never have competed with a developer tools company whose cofounders were all product-focused open source software developers.

We cared about the developer experience and had the creativity to throw away assumptions about what it was supposed to be and build how we wanted to work. Everyone else tried to build what they thought they could sell to advertisers or CTOs.

That’s why GitHub won.

Now that that’s out of the way, if you’re interested in some storytelling, let me lead you down the path of how some of this actually unfolded from the inside.

Let’s go back to the beginning of the story. 

I’ll dig a little more into the “GitHub started at the right time” theme from the point of view of a software developer circa 2005. This is when Git had it’s first commit by Linus and Mercurial had it’s first commit by Olivia.

My Windows Vista, Ubuntu and Mac Tiger desktops, circa a stupid long time ago.

What was it like to develop software almost 20 years ago and how was this an environment where Git could win over people and a GitHub could be born?

Mac OS Tiger, released in 2005. If you were using a Mac, it looked something like this.

If you were a software developer in 2005, you were probably (hopefully) using a centralized version control system like Subversion. I professionally used RCS, CVS, Subversion and Perforce before Git came along. Hell, I was actually in a company that FTP'd it's PHP files directly to the production server.

Now, if you were working on proprietary commercial software, centralized version control systems like SVN honestly wasn’t the most horrible thing. It was pretty simple to checkout, make changes, check back in. Branching and merging completely sucked but in a lot of situations it could basically be avoided (I’m not sure I ever really used branching in Subversion or Perforce). 

People probably complain more about Git today than they did about SVN back then, to be honest - the user interface and mental model is arguably simpler than in Git.

Perforce 2005.1 visual client. I spent a loooot of time hating this software.

The big problem that I think started coming to a head around this time was not in the world of professional development within closed, trusted teams. The big problem was within the growing world of open source.

You see, open source was barely a thing before this time, especially compared to today. Most of you kids probably don’t remember a time where there weren’t millions of open source projects around, but the phrase was only coined in 1998. 

To get a sense of scale, Dirk Riehle published a paper in 2008 analyzing global open source project trends and they estimated that there were a total of 18,000 active open source projects in the world at that time - in 2005, certainly far fewer.

Total open source projects. From “The Total Growth of Open Source”, 2008, published by Amit Deshpande and Dirk Riehle

To put this in perspective, there are over 280 million public repositories on GitHub alone today.

So, why did open source help usher in the era of Git and GitHub?

Because open source was growing fast and centralized version control systems were particularly bad at open contribution strategies. That is, you couldn’t easily share a project publicly and then take contributions back into it in a simple manner.

Really, how bad could it have been?

If you would like to see me talk about what open source contributing was like via my AWS Tokyo keynote 10 years ago, check it out and then you can skip the next few paragraphs:

Me talking about how we used to contribute to open source before GitHub. I recommend watching it at 1.5x, I had to speak slowly for the translators.

Basically, you could make your Subversion server read only for unauthenticated users, this is generally how you hosted an open source project (or you put a tarball somewhere occasionally).

If you wanted to contribute, essentially you had to:

  • checkout the latest version
  • make your changes
  • generate a patch file with GNU diff
  • upload that patch file to a ticketing system or email list used by the project

Then the maintainer needed to:

  • pull down that patch file
  • apply it to their project to see if it
    • applied cleanly
    • worked properly
  • either submit feedback, make changes, or commit the change

There are still artifacts of this around the internet. I used the Trac project at some point for this type of project, you can still see their Submitting Patches guide and an example of how a change would be suggested

It was a goddamn nightmare.

The Rails project, as well as my friends (and future GitHub cofounders) at Err used a similar ticketing system called Lighthouse (which is mind-blowingly still up) and one of my earliest open source projects was a command line tool called git-lighthouse that could simplify the process of pulling down and applying attached patches from tickets you wanted to test out. 

Here is an example of 3 different versions of a patch that were submitted to the Rails project in the early days.

This process sucked enough that when something came around that simplified it, it was quickly embraced. And that something was GitHub. But first, we needed a Git.

Git actually started from the fact that Linus Torvalds really liked an (at the time) commercial version control system called BitKeeper. It was actually built specifically to help simplify the existing kernel development process.

If it had been open source or had better licensing terms, there probably would have been no Git or GitHub.

However, what happened instead was that one of the Linux developers reverse engineered the protocol, breaking the licensing terms, and BitKeeper and Linus determined that the spat that followed was untenable and they mutually decided to part ways.

So Linus took some of the concepts that BitKeeper opened his eyes to, threw together the simplest thing he thought would solve his problems with those principles in mind, and called the new project Git, the “information manager from hell”.

It was fairly quickly embraced by several people in the Linux community and slowly grew into an actual, sort of, version control system.

There are several reasons why Git felt awesome at the time. They were:

  • branching and merging were dreams rather than nightmares
  • it was stupendously fast
  • permissions were vastly simpler

In the early days of Git, I would do talks where I would just go on stage, create a few branches, commit changes into them, switch between them and then merge them together, all in 60 seconds. I would literally see peoples jaw’s drop. Some of them would think I was faking the demo.

I just cannot tell you how magical it felt in 2006 to be able to switch and merge contexts that fast and easily. In Subversion this was a total nightmare.

Baby Scott talking about Git at RailsConf 2008

Not having to go over a network to negotiate a commit with a central server was also incredible. It felt like a rocket ship. Everything was so fast.

And probably most importantly, you could fork the repository incredibly easily, which meant that you could host your own copy of a repository and have your own write access and push changes there that other people could pull down into their fork. The Linux project started doing this early on - for larger changes, they could send a request to pull changes from a hosted fork and Linus could very easily do so.

In fact, if you’re wondering where the terminology “Pull Request” came from, this is it. Git has a git request-pull command that would format an email for sending to a mailing list to help make this process simpler. When GitHub added the ability to basically generate this same type of message, we decided that a request to pull should be called a Pull Request. (A little more backstory on that here if you’re curious)

Some people think that developers liked Git because it was distributed and you got the whole history when you cloned, which meant you could share locally, etc. I disagree. I don’t think almost anybody really cared about any of that. Distributed was cool because you could do operations fast and you could host your own full, writeable fork which made permissions much simpler.

It was cool because contributing went from a problem of who had permission to push into the simplicity of who had something interesting to pull.

And of course, this last point led directly to GitHub.

Late last year, I interviewed my GitHub cofounder Tom, and among the things we discussed, he told the story of how he got the initial idea of working on GitHub.

Essentially, when he was working at Powerset, Tom’s team started using Git internally. However, it was a pain in the ass to add other team members to the internal server, because Git’s main protocol was over SSH, which means you need a user with ssh privileges on the machine. For everyone. It was difficult and, for most of the team, not worth it. This spawned the concept for him of making this process as easy as possible. 

Git is awesome, Git hosting is a pain in the ass. This is why Tom started working on GitHub.

Why GitHub was started. To ease ass pain.

I went through my old emails to see if I could find the first time I heard about Tom’s “GitHub” project, and it was this email from Chris responding to a Git screencast I made in late 2007.

It was still a secret side project between the two of them at that point (also Chris… lower-case ‘h’?) and it’s when I started chatting with Chris and Tom about the Git/Ruby libraries that ran the site, and eventually how I wiggled my way into the project and company.

There are a few interesting things about this pitch. 

The first is that they compared it to the only other real public Git hosting site, repo.or.cz (which also miraculously is still running, if you want to see what the state of Git hosting was pre-GitHub), but made a crucial innovation over that site and every other hosting service like it, which is to make it user-centric rather than project-centric. Before this, if you wanted to host something on Sourceforge or whatever, you needed to grab the name. With GitHub, you can make any project you want named anything you want because it’s namespaced to your user.

The second was that they focused on a pull model rather than a push model (basically the permissions thing I talked about before).

The third is that “not ugly” was a core feature. GitHub had taste.

This is why Git was cool and why GitHub was started to make using it easier, but the question is, why did Git win? Lots of distributed systems sprang up during this time. Mercurial was similar in a lot of ways and better in many. Why did Git come out on top in the great DVCS war?

I think the answer there was “PR”. 

And there are two big PR gorillas fighting it out for the “why did Git win” answer. The first was Linux and by extension, Linus. The other was GitHub, and specifically the Rails community.

The Linux project using Git and Linus having started the project gave instant credibility to it.

Everyone knew Linux, everyone knew Linus. If he made an amazing operating system that everyone uses (at least for their servers, next year is the year of Linux on the desktop), he can certainly make a next-level version control system. And even if it’s difficult to use, that just means he’s smarter than us and we should try harder, right?

This video is one of the first talks about Git online, circa 2007. It's Linus talking about Git and distributed version control systems, then a brand new concept, at the Google campus.

It came out in between when I started using Git (late 2005) and when I started at GitHub (mid 2008). I watched it several times, as did millions of people. Who doesn’t like listening to the Linux guy say “CVS is the dumbest shit that has ever been thought of, and everyone who disagrees is ugly and stupid”? At Google

It’s just great PR.

Beyond that, if you conflate Linux and Linus, which most people do, there is an argument that Linux itself pushed Git adoption indirectly through Android.

This is where I really don’t know how much impact my own efforts or GitHub’s efforts had compared to this big, quiet, behind-the-scenes side effect of Android becoming a thing at exactly the same time. Or even, my personal impact in either or both of these fronts, doing Git talks and corporate training for years.

In early September 2008, right as Android 1.0 was being released (like 2 weeks after this email, but before I did the training), Shawn Pearce, an early super hero of the Git ecosystem, wrote me this email asking me to help train the Google Android team on Git.

It’s difficult to determine what impact Android had in corporate Git adoption, but it certainly wasn’t zero. While the Google/Android team was the first that I did corporate training for under the GitHub banner, I also eventually did Git training for engineering teams at Motorola, Qualcomm, Ericsson and Broadcom, just to name the telecoms. And that was before we hired a team to do this for us full time.

Linus pushed Git with his broad ranging brand of superstar nerd PR that Mercurial never got, but Android furthermore pushed Git uniquely, via it’s dependance from the Linux kernel, into massive companies out of pure practicality that also otherwise never would have happened for at least another decade.

There is also, and I must say this with a grain of hopeful humility, a possibility that GitHub was the determining factor in the eventual dominance of Git over Mercurial.

GitHub had the incredible luck to have an amazingly supportive and hip community that embraced us right out of the gate, namely the Ruby community. Within months, everyone in the Ruby community put their stuff on GitHub. Rails was the hot shit at that time, it was cooler than PHP, JS frameworks weren’t really around, there was no Node, etc. So everyone was paying attention to what the hip cats in the Ruby community were doing, they were the bleeding edge of cool development in the software world. And they were using GitHub.

And it’s not just me, Linus himself also recently said that from his perspective, the Ruby community unexpectedly made Git explode overnight. He doesn’t credit GitHub for that by name, but I think it’s impossible for anyone to argue that the Ruby community didn’t adopt Git in a very large part due to us. 

By the transitive property and some speculation, I’ll make the claim that Linus in fact thinks that GitHub is the reason Git won. 😀

"...the Ruby people, strange people, started using Git and suddenly it just exploded..."

Of course, the Ruby community adopting GitHub wasn’t random. 

I remember all of us - Chris, Tom, PJ and myself - sitting at tables at Ruby conferences with all the guys in the early Ruby community, showing them GitHub, selling them on Git, doing talks, etc. We were all speaking at the same conferences, we all drank beers together after Ruby meetups in SF. These were the guys who started Rails, Heroku, Twitter, jQuery, you name it. 

It’s not that we were selling it, it’s that we were all sharing what we were passionate about. There was a high level of trust in this community, the GitHub founders were a deep and authentic part of it, and we all tried each others stuff and supported each other.

Me and PJ at Scotland on Rails in March 2009 with a table full of amazing early Ruby peeps

The Ruby community using GitHub meant that every conference talk everywhere had a GitHub plug in it. Free advertising everywhere. This meant that as more and more projects moved to or were started on GitHub, even people who liked Mercurial had no real choice but to use Git. After a while, it probably just wasn’t worth it. GitHub’s dominance in the hosting sphere just crushed Mercurial in just the span of a few years.

In Mercurial land, there was BitBucket, which was started for Mercurial hosting and written in the Django framework, but I think we just had too much of a head start and there wasn’t enough differentiation. The Python community just didn't adopt it as aggressively as our Ruby community did.

As early as December 2008, GitHub was hosting about 27,000 public repositories where BitBucket had a little over 1,000. It became difficult to catch up.

How do I remember those numbers you might ask? Well, I had a website I put up called whygitisbetterthanx.com and this guy named Jesper emailed me to say that one of my points was incorrect, where I argued that Git has GitHub and Mercurial and Bazaar didn't have a GitHub. I rather arrogantly argued that they're not in the same league.

Young Scott being a little bitchy. Sorry, Jesper.

To his credit, he never called me out on my response, which now seems real snippy of me in hindsight. But it turns out that Jesper in fact was the founder of BitBucket. Whoopsie.

A year or so later, we met up with him in Amsterdam, drank some nice whiskey together and have remained friendly ever since.

GitHub cofounder PJ Hyett and myself with BitBucket founder Jesper Noehr (black shirt) getting a friendly competitor whiskey in Amsterdam, circa 2009 or so. Always be friends with those you compete against.

In the end, whether it was GitHub that helped Git win, or Git that helped GitHub win, it was quickly over. 

In 2006-2007, people were first learning about distributed version control systems and Git and Mercurial were starting to fight it out. 

In 2008, GitHub launched. 

In 2011, both Google Code and BitBucket added Git support, which I’ll mark as the year that the nail was in the Mercurial coffin. Git had won and GitHub was now essentially unbeatable. 

Just 4 years later, in 2015, Google Code just completely gave up and shut it’s service down. In the email they sent out, they basically said “just move to GitHub”. If I remember correctly, they even reached out to us for help with the migration.

Of course, while BitBucket started after us and so we had a head start, there were other hosting sites that existed before us. So why didn’t they win?

In early 2009, Google Code added Mercurial support and Sourceforge added both Git and Mercurial support. So if these industry monsters had a massive user head start and had DVCS support only months after we launched, why didn’t they wipe the floor with us little guys? 

Not only little, but also nearly completely un-funded. Chris was able to put a little bit of money in to bootstrap iirc, but the rest of us were totally broke and we didn't raise any outside funding.

When Google Code launched Mercurial support, we were still 4 developers working out of cafes in South Beach with zero VC investment. We struck deals with our buddies (May 2008) at Engine Yard for help with hosting costs because we didn’t really have the cash.

How is it possible that this tiny, unfunded team made Google Code fold in just a few years?

Side Note: GitHub Funding

As a side note, speaking of funding, the article I’m reacting to states “VC investment wasn't an option for the cofounders.” This is purely untrue. 

From the very first days, we were talking to VCs. When PJ emailed me in July of 2008 to say they wanted me to join them and we should all make the leap, quit our respective jobs, and make this a full time thing instead of a side project, he explicitly said “we've been talking to one VC in particular we like a lot and we want to raise a handful of money to do a few of things.” These were things like get an office, hire some people, etc.

It was always on the table, we could have done it at literally any time. We considered and thoughtfully rejected the idea constantly over the years. We didn't really need an office. We didn't really need more people yet.

Not only that, we actually nearly rejected the idea when we were considering our $100 million A round from Andreessen Horowitz, 4 years later. I remember vividly the night we all sat down for dinner at some restaurant on Folsum St in April of 2012 and argued very heatedly if we should take a capital round at all

We basically had offers from a16z, Benchmark, Sequoia and Bessemer (pretty much the best VC firms on the planet) on the table and meanwhile us four assholes sat around and heatedly yelled at each other about whether or not we should tell all of them “thanks, but no thanks”. Offers that other tech entrepreneurs would probably literally have killed for.

But the point is that it wasn’t that we couldn’t have raised money, but that we didn’t even need to in order to take down the entire field.

The original article is correct, the other hosts focused on distribution and revenue streams. We cared about developers. But it wasn’t about when they added Git, it never really mattered. They never had any taste. They never cared about the developer workflow. They could have added Git at any time and I think they all still would have lost.

You can try to explain it by the features or “value adds”, but the core takeaway that is still relevant to starting a startup today is more fundamental than if we had an activity feed or profile page or whatever. The much simpler, much more fundamentally interesting thing that I think showed in everything that we did was that we built for ourselves. We had taste. We cared about the experience.

We were developers and we built what we wanted in order to enable how we wanted to ideally work. We were the only tool in the space built by developers for developers without PMs or accountants or CEOs trying to optimize for revenue rather than for developer experience.

In the end we won because the open source community started to converge on distributed version control and we were the only ones in the hosting space that truly cared about how developers worked at all. The only ones who questioned it, approached it from first principles, tried to make it better holistically rather than just throwing more features onto something existing in order to sell it.

So, to sum up, we won because we started at the right time and we had taste. 

We were there when a new paradigm was being born and we approached the problem of helping people embrace that new paradigm with a developer experience centric approach that nobody else had the capacity for or interest in.

I guess the question is, what is the next sea change in developer workflow, and who will have good enough taste to make it explode in the same way?


PS: If you would like to watch me talk about Git and and some crazy things you can do with the Git internals, check out our YouTube channel.

Scott Chacon

Written by Scott Chacon

Scott Chacon is a co-founder of GitHub and GitButler, where he builds innovative tools for modern version control. He has authored Pro Git and spoken globally on Git and software collaboration.

Table of Contents

  • Contributing to Open Source in 2005
  • The Rise of Git
  • The Rise of GitHub
  • Maybe it was Linus/Linux
  • Maybe it was GitHub
  • The Competitive Field Collapses
  • GitHub Had Taste