第二幕 · 溢出
第七章 · 开源宣言
那天上午他没有出门。阳光从窗口移进来,在桌面上停了一个多小时,然后移走了。他坐在那道光里,把平台的首页信息流从头翻到了尾——不是看自己那篇的回应链了,那篇还在生长,但他没有再往下翻。他开始看别人写的东西。一篇一篇地看,不看标题也不看时间,只是顺着往下滑。手指累了换拇指,拇指累了换回手指。他在读别人的第一句话,读他们的开头,读他们愿意放出来的那个瞬间——有人写"今天早上我在地铁上看见一个人哭",有人写"我父亲去世三年,我昨天才第一次梦见他的脸",有人写"我不知道这篇会不会有人看,我写完了就不会再看了"。
他读到不知道第几篇的时候,发现了一个规律:那些写得最"敞"的文章,往往是最短的。没有铺垫,没有背景介绍,没有"我需要先说明一下"。就像一个人站在门口,门开了一半,他直接说了门里面的样子。然后他走开了。没说"请进来"。只是让你看见了。
有一篇文章的标题叫"当代码与思想相视——一篇关于两种开源的散乱札记"。作者"一舟"。他点进去,这次没有跳读,从第一行开始。
"代码开源和思想开源不是同一个东西。代码开源是你把一个工具交给别人使用。思想开源是你把一个状态交给别人感受。前者可以被下载、编译、运行。后者不能被下载。你只能进入它。"
林觉把这句话读了两遍。他做"开源"相关的工作做了七八年,他参与过代码审核、版本管理、社区运营,他比大多数人都清楚"开源"这个词的技术含义。但他从来没有想过"思想"也可以被"开源"。不是作为一个比喻,是作为同一个动词的不同宾语。开源的对象不同,开的方式就不同——代码是"给你用",思想是"给你看"。
他继续往下读。
"我试过写很完整的文章,把我自己所有的思考轨迹都画出来,清清楚楚,一条线连一条线。写完之后我发现,那篇文章是'对的',但它没有'我'了。因为'我'不是一个线性轨迹。'我'是那些没有被连接起来的点之间的空。那些空的区域就是我没有说出来的部分。后来我学会了不再把那些空填满。我留一些空。那些空不是缺失,是邀请。"
他停下来。那句话像一根针,沿着他某条神经慢慢地走。"那些空不是缺失,是邀请"——他想起自己发的那行字,没有标题,没有前言,没有结尾,只有一句话。他当时没有意识到自己为什么那样写。现在他知道了。他留了一个空。那个空不是因为他写不出来,是因为他知道那个空可以被别人走进来。已经有几十个人走进来了。他们走进来的方式不是"评论",是"续写"。他们把他留的那个空当作一扇门,推开了,走进自己的房间去了。
他关掉那篇文章,回到信息流,看到一篇没有标题的文章,只有一个字——"开"。点进去,正文是空的。下面只有一条回应。回应者的ID是"拂晓",内容说:"什么意思?"发帖人没有回答。但再往下翻了一层,有人在那条"什么意思"下面接了一句:"意思是:门已经开了。你不一定要进来。但门已经开了。"
他盯着那行字看了很久。"你不一定要进来。但门已经开了。"他在想自己过去的十一年里,有没有做过类似的事情——开一扇门,不要求任何人进来。他开过很多门,但那是因为他的工作要求他开,门的另一边是产品、是KPI、是日活数据。他没有开过那种"你不需要来,但门已经开了"的门。
他站起来,走到厨房重新烧了一壶水。水烧开的时候他站在灶台前,看着蒸汽从壶口涌出来,在抽油烟机灯下散成白雾。他想起昨天晚上那杯凉掉的茶——它们都是水,只是一个凉了,一个正在沸。他倒了一杯热水,端回电脑前,没有喝,放在桌角,杯口的热气在屏幕光线中慢慢往上飘。
他打开一个文件夹,名字是"archived/prophet_core"。里面是他参与开发"先知"系统时的核心逻辑文件。有些是他自己写的,有些是别人写的他负责审核的。这十一年里他在那堆代码上做过无数次删改、优化、迭代。每一行代码都留有他的指纹——不是署名,是风格:他的注释习惯是短句,不加连接词。他在一个复杂的条件判断后面总是空一行再写下一段。这些指纹连他自己都不常注意,但他一直带着它们。
他把文件列表往下拉,翻到了一个子文件夹——"pre_5.0"。里面是他辞职前最后三个月写的部分,"先知5.0"的核心底层逻辑。那段代码还没有被公司正式注册专利——按照流程,会在上线后三个月内提交。现在刚上线,还差两个月。他还有时间。
他打开主文件,光标停在了第一行。他低头看着那段代码。那段代码很干净,干净到让它旁边的人几乎意识不到它正在做什么。它的每一行都指向一个目的:让系统更准确地"预测"一个人接下来会想要什么。但"预测"这个词在注释里写了八年,直到最后他都没有改过——他从来没有写过"推荐"这个字。他写的都是"匹配"。他知道自己在回避"推荐"这个词,因为"推荐"藏着一种姿态:"我建议你要这个。"而"匹配"是中性的:"你恰好和这个像。"他写过无数行代码去掩盖这件事——他在帮系统假装自己没有立场。
他把手从键盘上拿开了。不是因为他不想继续看,是因为他忽然意识到一件事:这十一年里,他在注释里写的每一个字都是在替系统说话——系统自己不会说话,所以他在替它说。但他从来没有在注释里替自己说过话。
他打开了一个新的文本文件,在最上面打了一行字:"我为什么写这些。"然后他停下来,想了一会儿。然后他开始打字,很慢,像是在用自己的手重新拉一遍那些年他走过的线。
"我写这些是为了让系统更准。准的目标是什么?我没有问过自己。现在我问。准的目标是让人看更多、停留更久、产生更多的数据。但'更多'不是'更好'。'更多'只是'更持续'。我用了十一年让东西更持续。但我从来没有停下来问:这个东西该不该持续。"
他打了大约三百字,然后停下来,重新读了一遍。然后他把那三百字删了一半,剩下一百五十字。他没有重新加回去。他回到那个代码文件夹,选中了"pre_5.0"整个目录,右键复制。他打开了一个新文件夹,命名为"open/source"。他把那些代码粘贴了进去。然后他在那个文件夹旁边又建了一个文本文件,名字叫"说明.txt"。里面他只写了一行:"这些代码不属于我。也不属于任何公司。它们属于所有想看到'它是怎么工作的'的人。使用前请阅读'why_i_wrote_this.txt'。"
他把"why_i_wrote_this.txt"打开,把刚才剩下的一百五十字粘贴了进去。然后他靠在椅背上,看着那两个文件——代码文件夹和说明文件,它们在一个叫"open"的新目录里并排站着。他还没有把它上传到任何地方。他还需要做一个决定。但他已经做了那个决定的一部分——那部分比他想象的重,但那一部分现在不在了。它从"archived"移到了"open"。他觉得自己的胸口好像少了某样东西,不是空了一块,是原来撑在那里的东西被拿走了,拿走之后剩下的空间有风吹进来。
他登录了那个平台。在"撰写新文章"的界面里坐了一会儿。光标在那里,和往常一样。他打了一行字:"我准备开源'先知5.0'的核心逻辑。不是为了证明什么。是为了让'它怎么工作的'这件事被看见。如果有人想知道,他可以看到。如果没人想知道,它也还是在那里。"他没有发。他把那行字留着,切出去,把"open"文件夹里那段代码重新看了一遍。他看到其中一段注释,是某天凌晨写的。注释的内容和代码本身没有直接关系,只有一行字:"如果有一天这个系统停下来,我想去一个没有屏幕的地方。"
他记得自己写过这句注释,但已经不记得是哪一天了。可能是某个通宵之后的凌晨,天刚亮,他对着屏幕发了十分钟呆,然后在注释里打了那行字。他不知道自己当时为什么没有删除它——那段代码后来被审核过无数次,没有人提过"这一行注释和功能无关应该删掉"。可能他们看到了,但没有删。可能他们知道那行注释不是写给"使用者"的,是写给"某一天会打开这个文件的人"的。那个人会看见这句话,然后知道写代码的人那天晚上在想什么。
他回到那个平台上的撰写界面,重新打了一行字:"我开源的不是代码。是我这十一年。放在那里。谁都可以看。"然后他按下了发布。页面刷新了。那篇文章出现在信息流最上面。
他关掉电脑,站起来,走到阳台上。午后的阳光落在他的肩膀上,他背对着窗站着,风吹过来,他感到自己的衣服被风吹动了,贴了一下后背又松开了。他拿出手机,打开那个平台,刷新了一下。那篇文章的标题是"我开源的不是代码"。下面多了一条回应。ID是一串陌生的字符,内容只有一个数字:"1。"
他不知道那个"1"是什么意思。但他没有把它当成"什么都不是"的东西。它就是一个"1"。可能那个人想写点别的,后来只打了一个数字。可能那个人在测试自己还能不能打出键盘上的第一个键。可能那个人觉得那句话不需要任何"评价",只需要一个"我看见了"。
他回到屋里,电脑屏幕已经暗了。他没有重新点亮。他站在客厅中间,手机放回口袋,两只手自然下垂。阳光从窗户照进来,在他脚前的地板上铺了一块长方形的亮斑。他低头看着那片光,没有挡它。他就站在那片光的边缘,既不进去,也不后退。
Comments (0)