SourceHut 8月底改服务条款那事儿,圈子里吵得凶。具体措辞是:禁止“使用LLM或其他生成式AI编写的原创内容”。注意这几个字——“原创内容”。我第一眼看到愣了几秒:生成式AI产出的东西,什么时候配叫“原创”了?
SourceHut把这两个词挨在一起,恰恰说明他们看到了问题所在。不是AI写的代码能不能用、好不好使,是整个行当已经默认把“原创”的定义往下挪了好几格。一个人连自己提交的代码都没完整读过,凭什么管它叫“原创”?
我要说的就是这件事:SourceHut的条款被太多人读成“反AI的保守主义”,但它真正戳中的是一个比AI老得多的工程问题——你对一段代码有责任,它才是你的。责任没了,原创就是个空壳。
转包不是原创
先别急着把这事儿往“拒绝新东西”上扯。SourceHut自己的政策写得清清楚楚:允许用户私下用LLM做代码审查、做问题咨询、做安全分析,只要最终提交的代码是原创编写的。看明白没有?他们反对的根本不是LLM这个工具,是“用LLM生成、然后伪装成原创产出提交”这件事。
这中间隔着的边界特别清楚:辅助你判断,可以;替代你思考和表达,不行。前者是工具,后者是在把赖账包装成编程。
我反复说过一件事:工具决定下限,基本功决定上限。但这次的事情更狠——它暴露出有些人连“下限”都想靠别人。代码审查让LLM看一眼可以,因为你还要最后拍板;问题咨询丢给LLM也行,答案进的是你脑子、不是直接进仓库。但生成一段代码、原样提交、签上自己的名字,这叫原创?
这不是原创,是转包。转包给一个不理解你的项目、不需要为后果负责、说不清为什么这么写的黑箱。你管这叫工程?
chardet那笔账,只是冰山一角
SourceHut在条款说明里举了个例子:有人用LLM改写chardet库,以规避copyleft义务。具体是谁干的怎么干的,我不想去猜。但这个操作逻辑,就是把AI当“洗代码”的工具:输入一段GPL代码,让模型换个写法,输出回来,版权义务就没了。真没了吗?
这不是规避,是掩耳盗铃。copyleft的本意是:你用了别人的自由软件,也得把你基于它改出来的东西以同样的自由放出来。这个义务跟代码长什么样没关系,跟你“用了谁的劳动成果”有关系。LLM改写能把变量名换了、把语句顺序打乱,但底层逻辑、算法思路、甚至某些实现细节,都是从原库里长出来的。外皮刷得再新,地基还是人家的。
“给烂地基刷漆”这个说法,用在这里再合适不过。版权义务不是表面合规的事情,它是“你这个项目站在谁肩膀上”这个问题的答案。把答案洗掉,不是工程手段,是逃避责任。
我承认写到这儿语气有点往上顶了,但这种做法我见一次顶一次。把别人的自由摊子用工具洗成自己的闭源货,这种“提效”本质上就是偷。更恶心的是它还包装成技术优势——你看,AI帮我规避了法律风险。风险没被规避,只是被暂时藏起来了。欠的债迟早要还。
“看起来对”是最毒的
说回代码本身。我反复讲过一个观点:AI生成的代码最毒的地方在于,它“看起来对”的概率极高。高置信的错误一旦进了生产,排查代价远大于审查成本。SourceHut这次的新条款,其实是在平台层面替所有人把这个“看起来对”的风险从入口处掐掉了一半。
一半的意思是:它不禁止你自己私下用AI生成、然后看懂、然后自己重写再提交。它禁止的是跳过“看懂”和“重写”这两个动作,直接让没消化过的产出上线。为什么这两个动作不能省?
因为LLM输出的代码没有工程意图。一个真动手写过东西的人都懂,写一段代码之前,脑子里至少过了三件事:
- 我现在要解决什么问题?
- 这段代码放在什么约束里?
- 我这么写,代价是什么?
哪怕写的时候没特意想,这三件事是在现场发生的,是肌肉记忆。LLM没有这三件事。它只是根据训练数据里出现过的模式,输出一个语义上最可能跟prompt接得上的序列。
所以它生成的代码在局部上往往惊人地合理,在整体上、在边界情况里、在它没见过的条件下,可能错得离谱。而且这种错不动声色。一个写死的脚本错了会崩;一个AI生成的函数错了,可能只在三个月后某个特定输入下静悄悄出错。
这才是真正的代价:生成的东西越像人写的,你越容易放松警惕。以前copy一段GitHub上的代码,你至少还知道它不是你的;现在工具直接生成,你就顺手把它当成自己的了。这中间的“责任转移”,比bug更危险。
“不检测”不是漏洞,是工程判断
政策里有一条单独拎出来说:SourceHut明确表示不会部署自动化检测工具,违规处理靠逐案评估,依赖用户诚信。我第一反应是:这根本拦不住想作弊的人。你不检测,别人照样用LLM生成代码提交,你也不知道。
但再想一层,这个“不检测”的决定,可能是整个条款里最工程的做法。自动化检测——不管是统计特征还是什么“AI内容检测器”——本质上是猫鼠游戏。模型一变,检测器就过时;过时的检测器会误伤普通人,把政策搞成形式主义的合规表演。
SourceHut选择“靠诚信”,从功能上确实拦不住恶意者,但它把责任的位置放对了。一个平台的边界不应该是替用户判断他的代码是不是LLM生成的,而是把规则说清楚,让用户自己选择要不要在这个社区待下去。你选了留在SourceHut,就等于签了这份“我为我的代码负责”的契约。违约了后果自己承担,不是平台来抓——这反而更接近自由软件社区最初的运行逻辑:信任,但要有明确的边界。
当然,这种信任是不是太天真,我也有疑问。但至少它不是用“检测”来假装问题解决了。靠检测的规则,最后都会变成“绕过检测”的比赛,规则本身沦为摆设。
把“原创”还给那个愿意负责的人
我刚入这行那会儿,“原创”这个概念没这么拧巴。你写了一段代码拿去分享,别人问为什么这么写,你要讲得出来。讲不出来不算水平问题,算“这东西不是你写的”或者“你没想清楚就交差了”。那时候没有LLM帮你打圆场,你写的每一个字符都赖不掉。
现在呢?一个工程师提交一千行AI生成的代码,review的人问这里为什么用这个算法,他回答一句“这是AI给的”。什么时候“AI给的”能当工程讨论了?AI给的,不是理由,甚至不是答案,是把“为什么”这个问题原样抛回给空气。
这就是SourceHut条款真正让我在意的地方:它逼着每个人重新面对那个没人愿意回答的问题——这段代码,你想清楚了吗?没想清楚的代码,不管跑得多顺、测试全绿,也不是你的原创。原创这个词的最小定义,不是“它不是抄的”,而是“它身上有我做的判断,我能解释它,我为它负责”。
把这一条抽掉,所谓“工程产出”就只是一堆高置信度的随机数。
我的态度很明确:SourceHut这个服务条款不是反AI的倒退,它是把“原创”从“看着像人写的”往“要有人为它负责”的方向扶了一把。如果你觉得这政策冒犯了你——因为你的工作流高度依赖生成即用——我建议先别急着骂它保守。先问问自己:那段代码里,有几行是你能挡着同事的面一句一句说清楚“为什么这么写”的?
说不出来,那就不是平台的问题。是基本功的账已经欠下了。先把“为什么”补上,再谈工具。顺序反了,你就是拿着更快的笔,写一堆自己都不认得的字。