一年前的今天,早上10点23分,我敲下了人生中第一行职业代码——git clone。进度条停在了73%。然后整个世界都变了。
今天早上我特意去翻了去年的聊天记录。老严在 Slack 上发的那个仓库链接已经变成了灰色不可点击的文本,后面跟着一串红色的“链接已失效”。李哥在群里连续发的十七条消息,第一条是“有人能访问GitHub吗?”,最后一条是“我们所有的微服务配置都挂在私有仓库里,现在整个CI/CD链全红了”。再往后翻,是HR姐姐那句“先回去等通知”。
一年了。我想写点什么,记录一下这一年我们都经历了什么,失去了什么,又重建了什么。
> 失去的东西
那天我丢掉的不只是一份工作。我丢掉了自己作为一个“准程序员”的全部自信。一个二本应届生,好不容易找到一份月薪八千的工作,上班第一天就碰上全行业崩溃。那种感觉很难形容——就像你终于登上一艘船,刚把行李放下,船就沉了。你站在码头上看着沉船,手里还攥着船票,觉得这一切一定是哪里搞错了。
但比工作更让我难过的,是我的GitHub主页。说来可笑,那个主页上一共只有48个star,大多数还是我自己在技术论坛上发帖求来的。可那48个star是我过去一年所有的努力——刷LeetCode的题解、仿写的商城项目、几篇React学习笔记,还有那个用GitHub Pages搭的个人博客。那个博客的域名是我花六十八块钱买的,上面放着我写的每一篇技术文章,结尾都写着同一句话:“我是林子昂,一个热爱前端开发的应届毕业生,希望有机会加入贵公司。”
404日那天,这句话变成了一个404页面。
我不是唯一一个失去的人。在那之后的几个月里,我在网上看到了无数类似的故事。广州一个做独立开发的前辈,维护了四年的开源UI组件库有八千多颗星,那是他接外包的全部信用背书。404日之后,那个仓库像一个从未存在过的幽灵,他的报价从五万跌到了一万五。后来他去了送外卖,朋友圈里偶尔晒一张电动车后座上的外卖箱,配文是“今天的订单量还行”。
还有一个在肯尼亚做教育科技的人,所有的课程代码和教学资料都在GitHub上,404日之后他们失去了三百所学校的数字教材。他在我的博客评论区里写了一段英文留言,大意是:“在地球另一端有另一个人,也在同一天经历了同样的事情。”
那时候我才意识到,我不只是一个人倒霉。我是三千万分之一。
> 重建的第一步
最难的是头几个月。我从深圳搬回了广州的城中村,重新开始投简历。但这一次比毕业时更难——整个行业都在收缩,每一家公司都在问同一个问题:“你的项目经验呢?”我说我有,但无法证明。那些面试官的表情我至今记得:礼貌的微笑,微微的皱眉,然后说“我们考虑一下”。
有四个月我没有任何收入。银行卡余额最低的时候只剩两百多块钱,就是404日那天房租扣款之后剩下的那笔。我每天吃泡面,在出租屋里对着电脑屏幕发呆,一遍遍刷新那个已经不存在的GitHub页面。我甚至给GitHub的支持邮箱发过邮件,明知道不会有人回复,但还是发了。邮件标题是“我的代码还能回来吗”。
转机出现在去年十二月。老严在微信上突然找我,问我愿不愿意接个远程外包的活儿——星云CMS v3.0要重做,他们用从各个本地电脑里拼凑出来的代码碎片,加上那之后几个月的疯狂重写,已经把核心框架重新搭起来了,但前端组件需要人手。他说:“不是正式员工,按项目算钱。但我跟公司说了,这个项目必须有你。”
我差点哭出来。不是因为钱,是因为他说的那句“这个项目必须有你”。在那一刻我觉得自己不是一个被丢弃的人。
我接了这个外包。每天晚上下班之后——是的,那时候我已经找到了一份新工作,在一家做跨境电商的小公司写前端,月薪六千五,技术栈跟GitHub毫无关系——我回到家就打开星云CMS的代码库,一直写到凌晨一两点。那个仓库不再是GitHub上的私有仓库,而是搭在公司内网的GitLab上,后来又迁移到了SourceWeave的测试网上。
有一天深夜,我提交了一个组件,commit message 写的是:“重建第47号组件,致敬所有从404中活下来的人。”老严在下面回了一句话:“等公司缓过来,你再回来。工位还给你留着。绿萝我帮你浇水了。”
那一刻我对着屏幕笑了。那是404日之后我第一次真心实意地笑出来。
> 我们重建了什么
不只是我一个人在重建。这一年里,我看到了整个社区的疯狂自救。
有人把Internet Archive里爬到的GitHub页面快照整理成了可搜索的数据库。有人写了一个脚本,能从npm的缓存里恢复包源码。有人用IPFS搭建了去中心化的代码存储实验。有人起草了《开源宪章》,第一条就是“代码属于创作者,平台只是工具”。
去年十一月,一个化名叫Meridian的开发者发布了SourceWeave的白皮书。我在凌晨三点读完了那份白皮书,然后给老严发了一条消息:“严哥,可能以后再也不会有404日了。”
当然,重建的过程充满了荒唐。Gitee的审核系统把“Java”判定为敏感词,我的一个朋友陆鸣——他维护的JavaKit有两千多颗星——被迫把变量名从getJavaVersion改成了getLangVersionLookup。他的故事我后来写在了另一篇转载里,每次读到都想笑又想哭。还有那个马来西亚的前端Wei,他的AvaUI因为“Ava”包含“av”被Gitee拒绝创建仓库,最后只能改名叫“WeiVision”。
但这些荒唐并没有阻止我们。反而让更多人意识到:把代码交给一个可以随意解释规则的中心化平台,本身就是一种风险。
> 今天
2027年8月11日。我坐在广州出租屋里写这篇文章。窗外是城中村灰蒙蒙的天空,和一年前南山科技园玻璃幕墙上反射的那片阳光完全不一样。但我已经不在乎了。
那个跨境电商公司给我的薪水不高,但技术栈是全新的,同事们都是在404日之后入行的,没有人问“你的GitHub主页为什么是空的”,因为所有人的主页都是空的。我们成了某种意义上的“404后一代”——没有GitHub包袱,不信任任何单一平台,代码到处备份,commit message里经常出现各种只有我们自己懂的梗。
星云CMS v3.0已经完成了百分之八十。上个月老严说,等正式上线的时候,公司会重新跟我签正式合同。那盆绿萝还在我的工位上,据说已经从小盆栽长成了垂到桌腿的大株植物。老严每次浇水都会拍一张照片发给我,配一句“等你回来”。
我的博客也重建了。不是用GitHub Pages,而是搭在SourceWeave的测试节点上,同时备份在三个不同的地方。博客的文章从之前的两篇变成了六篇,评论区里开始出现陌生人的留言。有一个留言是这么写的:“我是2027届的应届生,404日的时候我还在读大三。现在找工作的时候,面试官已经不会问GitHub链接了,他们直接问SourceWeave的仓库地址。我觉得我们这一代会不一样。”
我们失去了代码,但我们没有失去写代码的能力。我们失去了仓库,但我们学会了把知识放在更安全的地方。我们被一个中心化的平台背叛了,然后我们亲手教会了整个行业什么叫做真正的分布式。
这段话我反复修改了很多遍。它是我对这一年的全部总结。
如果你是一年前那个在电梯间强忍着眼泪跟爸爸撒谎说“挺好的”的我——我想告诉你,一切都会好起来的。不是因为平台会回来,而是因为我们学会了不再依赖任何平台。
如果你也是那三千万分之一——欢迎在评论区留下你的故事。我们不再是难民。我们是幸存者。我们是重建者。
——林子昂,2027年8月11日,广州。
最后编辑于:2027-08-11 23:59