代码是什么?

这是与@virushuo 的一个讨论,整理一下,发在这里。起因是他发的一系列tweet,以及我的回复。 https://twitter.com/virushuo/status/1527705558194835456

Code 的最早含义

这里介绍得比较清楚,Code最早的含义是“a set of principles”,常用的说法是:法律准则(legal code)。

到了 1808 年以后,Code 才开始被用来指代加密通信系统中的编码。

等到计算机诞生之后,Code 才开始与编程语言,源代码(Source Code)产生联系。

Code Repository & Code Hosting

具体到我们讨论的话题,其实是代码托管平台上的那些代码仓库。问题的复杂也在于:在代码仓库里,存放的不仅仅是机器可以编译、运行的程序代码,还包括readme、document之类的文档。甚至有些仓库,就是一个纯markdown项目,放的全是文字,机器都没法执行。

Code is Code

在计算机诞生的早期,代码就是代码,有人写代码,有人阅读并修改代码,然后在计算机上运行。没有版权(Copyright)的概念,没有授权(License)的概念,没有专利(Patent)的概念,没有商业、没有法律、没有知识产权,只有一帮计算机科学家,在探索硬件+软件的组合,能够做哪些事情的边界。

Code is Speech

有一本很不错的人类学家的书《Coding Freedom》,介绍了很多Debian社区,以及早期开源社区的历史与文化。

其中介绍了一段有关DeCSS的历史,简单摘录如下:

DeCSS是一个用于解密DVD碟片的自由软件。在DeCSS发布之前,基于Linux的电脑系统都无法播放DVD视频。

来源与历史

1999年10月:DeCSS最初由不知名人士从互联网的LiViD(Linux Video and DVD)mailing list发表。

2000年:程序开发者之一的挪威15岁少年约恩·莱克·约翰森(Jon Lech Johansen,又称“DVD Jon”)(三名作者中唯一公开者)遭挪威警方搜索其家庭,并且被起诉,面临可能的两年有期徒刑及高额罚金。

2003年初:Jon Lech Johansen获判无罪。

2003年3月5日:挪威上诉法庭以Jon Lech Johansen触犯挪威刑法的“黑客防治条款”(Norwegian Criminal Code section 145 (the hacker law))再审此案,理由是检察官提出新的证人。

2003年12月22日:Jon Lech Johansen再度获判无罪。

2004年1月5日:挪威政府的经济与环保犯罪调查与起诉机关Økokrim宣布不再追究此案。

法律行动

1999年11月,第一个针对提供DeCSS下载的网站的法律威胁出现,引起了镜像DeCSS的运动。次年1月,在另一起官司中法院签署了初步禁令。作为对法律威胁的回应,社区开发了一个不相关的同名程序,其功能是从HTML页面中过滤CSS标签。有次一家学校误把这个程序当作原版DeCSS,移除了包含此程序的学生页面,受到了大量的负面媒体关注,而社区开发这个程序就是为了通过这种形式让MPAA上钩。

世界知识产权组织著作权条约的契约国都立法禁止了可用于绕过著作权保护的软件,而一些社区成员则提议了各种分发DeCSS算法的方法作为抗议。这些方法包括隐写术、多种互联网协议、T恤衫、MIDI文件、俳句等,甚至还有所谓的非法质数。

简单总结:为了营救被捕的开源项目作者,黑客们喊出了一个口号:“Code is Speech”,这是一个政治宣示,背后的逻辑非常清晰:代码是一种言论,言论应该自由,一个人不应该因为自己的言论被捕,所以这个程序员应该被释放。

但是,写任何代码并将之开源,都不违法吗?甚至就算是言论,所有的言论都可以是自由的吗?

Code is Law

1999 年在 Lawrence Lessig 出版的一本书《代码 2.0》中,提出了一个重要的观点:代码已经成为规制手段,code is law。

事实上,Lessig 在书中最主要的争辩对象,是互联网原教旨主义者。因为那些人认为:互联网(应该/必须)不受管制。而 Lessig 想要告诉我们的是:针对互联网的政府管制,一定会到来,而且会以 Code 的方式来实现。

用我们现在的话来说:网络不是法外之地。

简单总结:可以被执行的代码,是一种力量。这种力量可以为善,也可以为恶。可能掌握在政府手中,也可能掌握在普通开发者手中。

“Code is law” versus “code as law”,这篇文章值得一读。

Code is Weapon

这是最新出现的情况,因为俄乌战争,有人在自己的开源项目中“出于政治目的,恶意投毒”。甚至 OSI 都因此发表了一篇博客,批评说:“Open source ‘protestware’ harms Open Source”,并谴责这种“weaponization of open source”的现象。

Code 到底是什么?

在回复霍炬的推时,我说:代码首先不是言论,但可以是言论。更加严谨的表述应该是:“代码首先是代码,代码还有其他的性质,要根据实际情况进行判断,可能是言论,可能是法律,甚至可能是武器。

最近在读莱姆的《技术大全》,书中有这么一段话:我们现在可以在双极尺度上提出“所有可能语言”的模型分布。我们可以把一极称为“因果”,另一极称为“理解”。在这个尺度上,自然语言离“理解”较近,而物理语言在中间,遗传语言离“因果”较近。

代码的原始目标,是被机器执行,偏“因果”。但是如果代码中的内容,希望被人理解,甚至作者要传递某种观点,并被人理解,这时代码就成了言论。

回复霍炬的一段话

我换个表达方式吧,各国承认“代码就是言论”,是因为这样处理比较简单,而且同时适用于代码/文档/项目描述/样式,无需重新定义一套规范。如果不这么做就会变得非常复杂。如果想换一个定义方式,不等同于言论,那即使在法律极端明确的地方挑战也是巨大的。与其试图搞这个,不如搞从业人员备案制容易…

在我看来,在互联网与开源的早期阶段,“代码就是言论”的确是一种简单的处理方案。但是到了现在,情况在发生变化。要重新理解代码、言论与法律的关系。

我们是否应该审核 Code

首先需要判断,这个 Code 的性质。然后才谈得上是否应该审核,或者应该如何审核。

而且,我们还应该区分三类审核:项目团队内部的Code Review、平台的审核责任,以及国家的监察责任。

所以:仅仅将代码视为言论,言论应该自由,所以不该审查,肯定是一个过于简单的结论。关键在于:如何优化针对 Code 的审核?

现在的问题是:过度审核+不当前置审核+规则不透明。

所以,应该在这方面有所改进,如果能够增加更多的技术含量,减少对正常使用的干扰,就更好了。