Sindre Sorhus 人物记:GitHub 榜一大佬的开源之路
Category(分类): git Status: 已读
本文整理自三个来源:
- GitHub的榜一大佬(Sindre)晒出存款后,大家却想给他捐钱。(差评,2023-12,微信原文经虎嗅转载版核对)
- Between the Wires: An interview with open source developer Sindre Sorhus(freeCodeCamp,Vivian Cromwell 采访,2017)
- Sindre Sorhus - Open Collective(数据于收录时核实)
人物名片
- 身份:全职开源开发者(Full-Time Open-Sourcerer)、独立开发者(Indie Maker)
- 标签:高产、极简主义、JavaScript、Swift、macOS Apps
- 成就:GitHub 全站 star 数最多的个人用户;维护 1200+ 个 npm 包;发起现象级的 Awesome Lists(20 万+ stars,全站前三);开发 Dato、One Thing、Actions、Hyperduck 等 40 余款 macOS 应用
- 收入模式:GitHub Sponsors、Open Collective 社区赞助 + 应用销售
- 主页:sindresorhus.com · GitHub @sindresorhus
一、"晒出存款"的故事(2023)
从一款小众软件说起
故事从 Hyperduck 开始——它可以把 iPhone 里正在浏览的网页投到 Mac 上。软件很小众,评分人数才 7 人,开发者就是 Sindre Sorhus。巧的是,在他的其他作品里,还能发现不少正在被广泛使用的好东西:One Thing(菜单栏放一行文字的极简工具)、Actions(把 iPhone 15 Pro 侧边按钮 Action Button 利用到极致的神器)。
他的主页上,一共做了 43 款 App,其中 37 款完全免费,不少还是开源的。即便是付费软件,如果你是学生、开源维护者或者负担不起,只要跟他说一声,他就免费送。
小而纯粹的坚持
Sindre 软件的特色是体积小:One Thing 1.7 MB、Plain Text Editor 1.6 MB、HEIC Converter 3.2 MB——在安装包动辄以 GB 计的年代,这些软件连 5 MB 都不到。
体积小的原因在于功能简单。用户提的一些需求,他往往会拒绝,理由是不符合自己初衷——当初就是单纯解决某个需求才做的这款 App。妥协只有 0 次和无数次,很多开发者就是在不断妥协的路上,亲手把软件喂胖喂肿。
但"高傲"的另一面是滚烫的细心:
- 保留各个历史版本,付费软件的老版本免费提供;
- 考虑到有人无法访问 App Store,额外提供安装包并隔段时间手动更新;
- 每个软件的常见问题都在官网做了详细说明,Hyperduck 一个小众软件的 FAQ 就写了 1200 字——而这些软件绝大多数根本没收费,他其实没义务做这些。
GitHub 榜一大佬
Sindre 是 GitHub 上拥有最多 stars 的个人用户。最知名的项目(Awesome)收藏数高达 27 万,全站前三;在维护的 npm 包有 1200 多个,Webpack、Babel 等流行工具以及一堆大厂都直接或间接依赖他的包,被称为"npm 之神"——用圈内人的话概括:他的一举一动,都会影响社区内数以万计的顶层工具。
晒存款与"去资助那个好项目吧"
1989 年 Sindre 出生在挪威,7 岁接触 Windows 95,10 岁做出第一个网页。上大学前被招进挪威武装部队的网络防御单位。2012 年因兴趣做起开源项目,2014 年觉得办公室上班太过安逸,辞掉工作背包来到东南亚,靠积蓄一边旅居一边维护开源项目。
2015 年时他已是圈内知名人物。网友对这位年轻大佬充满好奇:长什么样、用什么设备、甚至有多少存款。对这些提问他来者不拒,还细心整理成 PDF 方便大家查看。
对于"到底有多少积蓄",他直接放出存款截图——大概还剩一万多美元。他表示自己开销不大,钱还够花 1 年。但毕竟全职做开源没有收入,很多网友问怎么资助他,他的回答是:
"不用,去资助这个好项目吧。"
点开"好项目"的链接,跳转的是 Girls Who Code——一个助力女性走进科技领域的非盈利机构。
好在 2018 年,他的主页终于出现了 GitHub Sponsors 和 Open Collective 的链接。在踏入开源世界的第 6 年,那些受益于他的组织和个人,总算等来了资助他的机会。
传奇大佬的日常
工作日他一般 9 点到 11 点起床,冲个澡后散步到一家咖啡馆,开始"hack":回答 GitHub issue、敲代码、看邮件、刷推特。下午 5 点女朋友下班后一起吃晚饭、逛商场、看电影;女朋友睡觉后,他再继续 hack 2 小时。
在网络世界拥有传奇成就的 Sindre,现实中并非活在代码里的极客怪人,而是和大多数人一样喜欢旅行、宠物、美食和生活的人。
二、Between the Wires 采访编译(2017)
童年与启蒙
Sindre 在挪威奥斯陆郊区长大,小时候痴迷乐高,每年生日和圣诞都收乐高,房间里搭起过一座几乎占满整间屋子的乐高城市——"建造东西"的兴趣很早就被点燃。
7 岁那年家里有了第一台 Windows 95 电脑。几年后接入互联网,他花大量时间在别人网页的留言板写字、收集 gif。某天他好奇网页是怎么运作的,发现了浏览器的 "查看源代码"按钮——这个发现对他来说是颠覆性的:右键、查看源码,就能看到一切是怎么做出来的。虽然一开始看不懂,但反复看同样的东西,慢慢就理解了。
10 岁时他做出了第一个网站:五颜六色、星空背景、带背景音乐,用 Microsoft FrontPage 做的。有次闲着无聊,他在爸爸电脑上创建了几千层嵌套目录把电脑搞崩了,爸爸既佩服又恼火——第一个网站也因此丢失。
上学期间他迷上 Flash 游戏,但 Flash 没有"查看源码"按钮,于是他反编译 swf 文件(没有混淆,很容易),从别人的作品中学习:修改别人的游戏、重画所有角色、加新敌人、加高分榜。"当意识到别人真的在玩我拼出来的游戏时,那是一个骄傲的时刻。"
军旅五年
高中毕业后他被征召入伍,进了媒体部门,大部分时间在内网办公室工作。晚上住在营房没事干,就开始做东西。他此前的经验多是复制粘贴别人的 PHP 和 JavaScript,并不真正理解;直到偶遇 Python 和 Django——文档和教程质量远超 PHP——他开始每天读教程、在工作中做东西,"真正的编程"由此开始。
义务兵役结束后,他本计划旅行,但收到了网络防御单位的offer,一待就是 5 年。
TodoMVC 与 Yeoman
2011 年前后他开始用 GitHub,但只是消费者:逛仓库、star 看着有趣的项目、修过 README 的错别字。直到某天遇到 TodoMVC(帮人挑选 JS 框架的项目)。他后来说,最先记住的其实是 TodoMVC 那个好看的 logo——听起来很肤浅,但正是 logo 让他留下来看了看,发现缺一个 jQuery 实现,就周末写了一个提交 PR。维护者 Addy Osmani 很快合并,对新手来说是超棒的体验;几周后 Addy 直接把他加进了项目。
"这让我真正对开源产生了兴趣。之前我只是被动的消费者,但 TodoMVC 让我尝到了维护大项目的滋味——工作量很大,但学到很多。"
几个月后 Addy 入职 Google,第一个项目是 Yeoman(现代 Web 应用脚手架)。因为 TodoMVC 合作愉快,Addy 邀请他担任外部贡献者。他们的初衷是做一套人人可用的 Web 应用工具,后来才明白:一个工具不可能解决所有人的问题,Web 上的用例太多了。 Yeoman 最终演变成一个流行的配置生态,开发者写 generator 来扩展。Create React App、Webpack 的历史也在重演——最初想解决一个问题,需求各异,只好加配置。关键是平衡:你得会说"不",并且知道什么时候说"不"。你会让一些偏门用例的用户失望,这是做工具最难的部分,在开源项目里更难,因为反馈太多了。
为什么热爱开源
"我认为开源是构建软件最有效的方式,因为它让我们能在彼此的工作之上继续建造。任何一个人解决了难题,所有人都受益。"开源让他得以和全球不可思议的人共事,做对社区重要的事,而不是围着营收转。
开源可持续性
采访时他已全职开源三年,没有收入,靠积蓄生活。他认为 Evan You 的 Vue.js 是开源可持续的典范:做了大家都想要的框架、被大量公司用在生产环境,于是公司和个体都有动力投资。关键是让你的项目变得"可靠/值得依赖"。他个人认为仅靠个人捐赠不足以 sustain 一个项目。他长期抗拒 Open Collective 这类平台,担心"有人投钱就会产生期望、要求优先处理他们的需求",但看到 Webpack 在 Open Collective 上运营得不错,也在考虑尝试。当时他住在泰国,觉得月开销低于 1500 美元就能活。
1000+ npm 包的"乐高哲学"
"这是个误解。人们看到 1000 个包的数字,以为我生产力逆天,但没意识到大部分包都很小、很模块化,发布时基本就完成了。我喜欢把编程比作搭乐高:我造大量乐高积木,可以组装成更大的构造。发布前我会先在自己的项目里用,确保它们解决我的问题。也正因为包足够小,用户不会提交一堆 feature request——他们需要更多功能时,再造一个模块就是了。我 90% 的时间花在最大的 10 个项目上。"
如何应对 demanding 与 toxic 的人
做开源六年,他已"皮糙肉厚":" Beginners 因为一点毒性就退出的例子太多了。开源本该是快乐的事,不该成为你生活的压力源。 别让互联网上的陌生人影响你的情绪和动力,不值得。有退出的选项就用——善用取关按钮。开源维护者要记住:用户不是付费客户,我们是在自己的空闲时间里免费提供东西。"
"对 toxic 的人,你要永远做格局更大的那个。听起来不对,但我的做法是 kill them with kindness——尽可能开放和友善,绝讽刺、绝不居高临下。Troll 靠你的恼怒和争吵为食,这些没了,他们自然就走了。哪里有静音选项我就用哪里,尤其是 Twitter。"
给项目设计 logo
他给 XO、AVA 等项目设计的 logo 广受好评。他从跟教程做特效开始,用过 Illustrator 后来转 Sketch。他认为更多程序员应该试试设计:写了几小时代码后,换一种方式做创造性工作是很好的休息;而且 有 logo 的项目更容易被使用——乌克兰开发者 Vadim Demedes 就是因为 AVA 的 logo 才提了 PR,后来干脆加入了 AVA 团队。
为什么搬去泰国
准备 Google 电话面试的那天,他突然决定:要旅行就趁现在,否则永远不会发生。于是取消了面试,第二天递交辞呈,买了张单程机票飞泰国。在东南亚背包半年,遇到了女友,最终定居泰国。他每周三天在咖啡馆工作(有人围着效率更高),平时 9 点到 18 点做开源,大多数日子要处理 20+ 个 PR 和大量 issue。
AVA 的诞生
他写大量模块需要测试,用 Mocha 不满意:注入的全局对象没有定义、Node.js 的异步 API 用起来别扭。于是某个周末动手,周日晚就把 AVA 0.0.1 发到了 npm。AVA 利用 Node.js 异步 IO 并行的特性并发跑测试,测试文件还作为独立进程并行执行,IO 密集型测试收益尤其大。起初它只是私有项目,一年半后他给 AVA 做了 logo、清理仓库、补了大量文档才公开发布。"我只是挠自己的痒,结果发现别人有同样的问题,并且喜欢我的方案。"
转向 macOS 开发
某年一月他冒出一个 Mac 应用的点子,有点空闲就直接上手 Swift——他学新东西的方式就是这样:先有想做的东西,再倒推需要什么技能。想法先于计划。 Swift 比 JavaScript 入门难,但强类型 + optional 用对了编译后几乎不会崩。他写了 Lungo(菜单栏防休眠)等生产力应用上架 App Store。
JS 生态与独角兽梗
他认为 JS 生态已经很好,但浏览器端仍有大量怪癖:为了发一个简单应用要维护巨型构建脚本。"除非修好平台本身,而不是在它上面垒一堆方案,否则我看不出轻松的出路。浏览器原生支持 modules 之后会好很多,到时很多场景可能就不需要构建步骤了。"
至于 JS 开发者为何痴迷独角兽:这个梗其实源自 Django 社区——有人提 feature request,核心开发者回复"不,你不能拥有小马!",独角兽运动由此而来,后来不知怎么传到了 JS 社区。"像独角兽这样有趣又傻气的东西,能帮我熬过编程和开源里的起伏,提升士气。傻乎乎的 gif 同理。"
三、Open Collective 赞助现状
截至收录时核实的数据:
- 累计收到资助:$123,546.52
- 累计支出:$107,477.91
- 支持者:133 人
- 主要企业赞助方:Retool($30,000,自 2021 年 1 月起)、Gitpod($15,500)、ESLint($9,650)、Indeed($9,000)、Logto($9,000)、Strapi、Bower、Airbnb 等
- 赞助档位:Backer $5/月、Silver Sponsor $100/月、Gold Sponsor $500/月、🦄 Sponsor $1,000/月
- 自述:2012 年开始做开源,2014 年起全职(每天 8–12 小时),代表作 Awesome、AVA、XO、Chalk、Got、np、Gifski、electron-store、ky 等
从 2015 年"存款只剩一万多美元、让大家去资助 Girls Who Code",到今天累计获得超 12 万美元社区资助——这条全职开源之路走了十年。
结语
凭他的实力和履历(军队网络工程师背景、一堆火爆的开源项目和软件),找一份高薪工作唾手可得。可他偏偏选择开源并坚持了十多年。为什么?他在一次采访里说过:
I just like making stuff and I don't care much about money.
我只是喜欢做东西,不太在乎钱。