第 12 章

模组共和国与代码边疆

在GitHub的代码提交日志里,一个名为IndustrialCraft 2的模组仓库记录着这样一条更新:来自德国德累斯顿的开发者修正了电力系统中一个导致服务器崩溃的循环引用错误,提交时间是柏林夏令时凌晨两点四十七分。同一周的星期二,微软法务部门向Minecraft Marketplace的首批入驻开发者发出了正式合同。其中第七条第三款明确规定:所有通过平台分发的模组内容,其全球范围内的永久性、不可撤销的使用权自动授予微软公司,收入分成比例为平台抽取百分之三十。

这两份文本之间隔着六个时区、两种法律传统,以及一套尚未被任何成文法覆盖的治理真空。2014年秋天的这个星期里,方块世界的两个平行政权同时运行着:一个建立在GitHub的Pull Request机制和论坛投票之上,另一个建立在华盛顿州雷德蒙德总部的合同条款之上。要理解这个并置的意义,需要回到模组社区形成的最初时刻。

2010年12月11日,佩尔松在官方博客上宣布《我的世界》将于12月20日进入Beta测试阶段。他进一步指出,在该时间节点之后购买游戏的玩家,无法得到未来免费享有全部内容的保证,原因是这将令"律师和董事会陷入惊慌"。

这个消息在玩家社群中引发的反应,远不止是期待一个更稳定版本。Beta测试意味着游戏的核心架构——物品系统、方块类型、世界生成算法——将进入一个相对固定的阶段。对于最早一批模组开发者而言,这是一个信号:底层代码的变动频率将降低,基于现有架构进行的修改可以持续更长时间而不必担心被官方更新破坏。

在此之前,Alpha阶段的每一次版本迭代都可能让一个精心编写的模组在一夜之间失效。开发者们像是在流沙上建造房屋。Beta测试的承诺提供了一块相对坚实的地基。

但地基的坚实程度取决于另一个因素:Mojang对模组开发的态度。佩尔松本人从未明确禁止模组开发,但也从未提供过官方支持。

游戏代码没有加密,Java语言的特性使得反编译在技术上可行,但每一次修改都意味着对游戏核心文件的直接替换。这是一种法律上模糊、技术上脆弱的操作。

模组开发者们处于一个奇特的灰色地带:他们的行为不被禁止,但也不被保护。他们可以修改游戏,但他们对修改后的代码不享有任何明确的权利。他们创造的内容可以被任何人复制、修改、再分发,而原作者除了在论坛上公开谴责之外,没有任何制度化的救济手段。

正是在这个灰色地带中,第一批基础设施开始出现。2011年初,一个名为Minecraft Coder Pack(MCP)的工具集被发布在Minecraft Forum上。这套工具由几位匿名的开发者共同维护,其功能是对《我的世界》的Java字节码进行反混淆处理,将原本难以阅读的混淆变量名还原为人类可理解的名称。MCP本身不修改游戏内容,但它提供了修改所必需的前提条件:可读的代码。

没有MCP,模组开发者需要面对的是诸如“aaa”、“bbb”、“ccc”这样的类名和方法名。有了MCP,他们看到的是“Block”、“Item”、“World”。这个工具集的出现,标志着模组开发从少数逆向工程高手的神秘技艺,开始转向一项可以被更广泛的技术爱好者掌握的技能。

MCP的维护者们在论坛上发布了一份简短的使用说明,其中包含一个值得注意的声明:MCP不对任何使用该工具进行的模组开发承担法律责任,所有使用者应当自行确保遵守Mojang的相关规定。这份声明是模组社区中最早出现的规则文本之一。它的措辞是防御性的、免责性的,但它确立了一个原则:工具提供者与工具使用者之间存在着一种契约关系,即使这种契约没有任何法律约束力。在随后的三年里,这个原则将被反复扩展、修改、争论和破坏,最终演变为一套覆盖代码贡献、署名归属、收益分配和项目分叉的复杂规范体系。

2011年晚些时候,另一个关键的基础设施出现了:ModLoader。这个由一位使用化名Risugami的开发者发布的工具,解决了一个看似技术性却具有深远制度后果的问题——模组冲突。

在ModLoader出现之前,不同模组往往会修改同一个游戏核心文件。当玩家试图同时安装两个模组时,后安装的模组会覆盖前者的修改,导致游戏崩溃或功能失效。玩家被迫在模组之间做出选择。ModLoader通过提供一个统一的接口层,允许多个模组在不直接修改核心文件的情况下共存。

这个技术方案的政治含义是清楚的:它创造了一个平台,在这个平台上,不同开发者编写的模组可以在同一套规则下并行运行,而不必互相排斥。这正是“模组共和国”的制度雏形。ModLoader不是政府,但它提供了政府所提供的最基本功能:一个用于解决冲突的中立框架。

Risugami本人从未宣称任何政治权威,他只是一个写出了有用代码的开发者。但他的代码创造了一种秩序,这种秩序使得数百个原本彼此孤立的模组项目能够在一个共同的空间里运作。玩家不再需要在工业模组和魔法模组之间二选一;

他们可以同时安装两者,只要两者都遵守ModLoader的接口规范。这个规范不是通过投票制定的,也不是通过暴力强制执行的,而是通过技术必要性确立的:不遵守规范的模组将无法与其他模组共存,从而在用户选择中被自然淘汰。

然而,技术必要性作为立法原则有一个根本缺陷:它只能解决冲突,不能解决分歧。当两个模组开发者对同一个功能有不同实现方案时,ModLoader框架无法告诉他们谁是对的。当一位开发者修改了另一位开发者的模组代码以修复一个漏洞时,框架无法判断这是善意的协作还是恶意的篡改。当有人将多个模组打包成一个合集并开始收费时,框架甚至无法识别这已经触及了财产权的边界。这些问题不是技术问题,而是政治问题。它们需要的不是更精巧的代码架构,而是规则、程序和裁决机制。

2012年,这些问题在一个名为Tekkit的事件中全面爆发。Tekkit是一个模组整合包,由一群不属于任何原始模组开发团队的玩家组装而成。它将BuildCraft、IndustrialCraft、Equivalent Exchange等多个流行模组打包在一起,提供了一个预先配置好的整合版本,玩家只需下载解压即可使用,免去了手动安装和调试兼容性的繁琐过程。

Tekkit迅速获得了巨大的用户量。问题在于,整合包的制作者们没有征求原始模组开发者的许可。他们将别人的代码重新分发,却没有给予适当的署名,也没有分享他们从整合包下载页面获得的广告收入。

BuildCraft的主要开发者SpaceToad在Minecraft Forum上发表了一篇措辞愤怒的帖子。他指出,Tekkit团队不仅未经授权使用了他的代码,还修改了BuildCraft的部分功能以适应整合包的需要,这些修改引入了新的漏洞,但玩家们却将这些漏洞归咎于原始模组。SpaceToad的核心指控是:Tekkit团队拿走了他的作品,进行了低质量的修改,然后让他来承担由此产生的声誉损失。

这篇帖子引发了长达数周的激烈争论。支持SpaceToad的开发者们认为,模组代码是作者的智力财产,任何使用都必须经过明确授权。支持Tekkit的玩家们则认为,模组一旦公开发布就属于社区共有资源,任何人都有权以任何方式使用它们,整合包的便利性本身就是对社区的巨大贡献。

这场争论暴露了模组社区的一个深层裂痕:没有任何共识存在。关于代码是否构成财产,关于公开发布是否意味着放弃控制权,关于“社区”是否是一个可以凌驾于个体创作者之上的实体——这些问题在整个社区中没有任何一致的回答。不同的开发者持有不同的立场,而这些立场往往取决于他们在具体争议中所处的位置。

当自己的代码被他人使用时,一位开发者可能强烈主张财产权;当他需要使用他人的代码来改进自己的模组时,同一位开发者可能转而强调社区共享的重要性。

Tekkit事件最终以一种非正式的方式解决:一些主要模组开发者公开要求Tekkit移除他们的作品,Tekkit团队在压力下照做了,但整合包继续以其他模组为基础运行。没有任何法律程序介入,没有任何权威机构做出裁决,甚至没有任何明确的规则被制定出来。社区只是从这次冲突中退后一步,带着未愈合的伤口继续前进。但这次事件的记忆留在了所有参与者的脑海中。它像是一个原始部落中发生的第一起财产纠纷:在此之前,人们甚至没有意识到需要一套财产规则;在此之后,他们知道了规则的必要性,但仍然不知道如何制定它。

正是在这片制度真空的土地上,Forge项目开始崛起。Forge的前身是Risugami的ModLoader,但它在2012年经历了一次根本性的重构。新的Forge不仅是一个模组加载框架,还提供了一套应用程序接口(API),这套API允许模组开发者在不直接触碰游戏核心代码的情况下实现复杂的功能扩展。更重要的是,Forge建立了一个开源项目的基本治理结构:代码托管在GitHub上,贡献通过Pull Request机制提交,合并权限由一组核心维护者掌握。这个结构不是任何人事先设计的宪法,而是从开源软件运动的惯例中自然移植过来的。但它恰好回应了模组社区最迫切的需求:一个被广泛接受的基础设施层,由一套透明的、基于代码贡献的声誉等级制来管理。

Forge的维护者团队中包括来自德国的LexManos、来自美国的cpw和几位来自其他国家的开发者。他们用英语交流,在GitHub的Issue区讨论技术问题,在EsperNet的IRC频道上进行实时协作。这个团队的形成过程本身就是一个跨国政治体的雏形:成员资格的获得不依赖于国籍、年龄或任何先赋条件,而只依赖于一个标准——你写的代码是否被接受合并到主分支中。这是一种纯粹的功绩制。一个十六岁的俄罗斯少年如果提交了一段高质量的代码修复,他与一个三十岁的德国专业软件工程师在Forge项目中享有同等的发言权——至少在理论上是如此。

但在实践中,功绩制很快遇到了它自己的边界问题。代码贡献可以量化——提交次数、修改行数、解决的Issue数量——但“发言权”本身无法被简化为数字。当核心维护者之间出现分歧时,谁的功绩更大?当一个长期贡献者在技术讨论中发表的意见与一个新加入但提出了关键创新的贡献者相左时,应该听谁的?当维护者团队需要决定Forge的未来发展方向时——是优先保持向后兼容性以维护现有模组生态的稳定,还是优先引入新的API特性以支持更强大的功能——功绩本身不能提供答案。

这些问题在2013年的一次Forge架构重构争论中集中显现。争论的焦点是新的能量系统API应该如何设计:是采用BuildCraft已经广泛使用的MJ(Minecraft Joules)系统作为基础,还是设计一套全新的、更抽象的能量单位。

LexManos倾向于前者,理由是兼容性优先;cpw倾向于后者,理由是长期可扩展性优先。两位都是Forge项目的核心维护者,两人的代码贡献量都极为庞大,两人的技术判断都有充分的论据支持。功绩制在这里失效了:没有更高的功绩等级可以用来裁决两位最高等级贡献者之间的分歧。

争论在IRC频道上持续了数周,随后扩展到Minecraft Forum和Reddit。其他模组开发者纷纷表态站队,整个社区被卷入了一场关于API设计哲学的技术政治辩论。

最终的分歧解决方式不是投票,不是裁决,而是事实上的分叉:cpw在Forge的一个分支版本中实现了他的能量系统方案,而LexManos主导的主分支保持了MJ兼容路线。两个版本在一段时间内并行存在,各自吸引了一批模组开发者在其上构建。

这本质上是一次宪法危机:当共同体的最高决策层无法达成一致时,没有任何制度化的机制可以解决僵局,唯一的出路就是分裂。分裂的结果是双重的。一方面,它证明了模组社区在面对根本分歧时缺乏有效的集体决策能力。功绩制的声誉等级结构可以管理日常的技术维护工作,但在涉及价值判断和利益分配的关键时刻,它无法提供足够的合法性来强制执行一个决定。

另一方面,它也证明了分裂本身作为一种退出机制的可行性。cpw不需要推翻LexManos才能实施他的方案;他只需要复制一份代码,然后在自己的副本上进行修改。这就是分叉权的实质含义:在任何时候,任何不满于现状的贡献者都可以带走代码的副本,另立门户。

分叉权是模组共和国宪法中最激进也最脆弱的部分。它激进,因为它赋予了每一个个体参与者最终的主权权力——离开共同体的权力。在一个民族国家中,公民的退出成本极高;在一个模组项目中,退出的成本只是一个Git命令。它脆弱,因为这种几乎无成本的退出权使得任何需要长期稳定承诺的集体行动变得极为困难。如果每一次重大分歧都导致分叉,那么共同体将不断分裂为更小的碎片,最终失去规模效应带来的技术优势。

2014年夏天发生的Bukkit事件将这种脆弱性推向了极致。Bukkit是一个服务器端模组平台,它允许服务器运营商在不修改客户端的情况下添加插件、管理权限、定制游戏规则。在Hypixel和Mineplex等大型服务器的技术栈中,Bukkit是一个关键的基础设施层。它的维护团队由一群被称为Bukkit Team的开发者组成,核心成员包括EvilSeph、Dinnerbone和其他几位贡献者。Bukkit的代码基于Mojang官方提供的服务器端代码,但进行了大量修改和扩展。这使得Bukkit处于一个比Forge更危险的法律灰色地带:它不仅修改了游戏代码,还重新分发修改后的版本。

2014年2月,Mojang宣布将Bukkit的核心成员Dinnerbone和Grum招入麾下。这看起来是一个好消息:官方认可了模组开发者的才能。但它也埋下了一个隐患:Bukkit项目的主要维护者现在同时受雇于Mojang,而Mojang的知识产权政策并不明确保护模组开发者的权利。同年8月,一位名叫Wolvereness的Bukkit贡献者援引美国《数字千年版权法》(DMCA),向Bukkit项目的代码仓库发出了删除通知。他的理由是:Bukkit包含了Mojang的专有代码,而他作为贡献者之一所编写的部分代码被未经许可地分发。这封DMCA通知像一颗炸弹投入了模组社区的核心地带。

问题的复杂性在于:Wolvereness的DMCA主张在法律上并非毫无根据。Bukkit确实包含了Mojang的代码,而Mojang确实从未正式授权第三方分发修改后的服务器端代码。但Bukkit团队中的其他成员认为,Wolvereness的行为是恶意的:他本人曾是Bukkit的长期贡献者,他的代码是在完全知情的情况下提交到项目中的;现在他使用法律武器攻击同一个项目,这违背了开源社区的基本信任伦理。争论迅速从法律层面扩展到道德层面:贡献者对自己提交到开源项目中的代码是否保留撤回权?如果一个项目处于法律灰色地带,贡献者是否有权在退出时要求销毁整个项目?

EvilSeph在Minecraft Forum上发布了一份声明,宣布Bukkit项目将立即停止开发。他的核心关切是:在一个随时可能被任何一位前贡献者用法律手段摧毁的项目上继续投入时间,已经不再具有任何意义。这份声明标志着一个时代的终结:Bukkit作为模组社区最大的基础设施项目之一,不是因为技术过时或用户流失而死亡,而是因为其内部治理机制无法处理贡献者之间的权利冲突而自我毁灭。没有法院介入——DMCA通知最终被撤回——没有Mojang强制执行——他们保持沉默——只是几位开发者之间的信任崩塌就足以让整个大厦倾覆。

Bukkit的崩溃引发了一系列后续分叉:Spigot从Bukkit的代码库中分叉出来,继续维护一个性能优化版本;Paper从Spigot分叉出来,进一步优化;还有无数其他分支在GitHub上出现又消失。每一个分叉都声称自己是Bukkit精神的真正继承者,每一个分叉的维护者都试图重建被摧毁的信任机制。但他们面临的是同一个结构性问题:在一个退出成本为零的共同体中,如何约束成员的破坏性行为?如果任何人在任何时候都可以用一纸法律通知摧毁整个项目,那么长期合作的预期收益将永远笼罩在不确定性的阴影之下。

这些事件——Tekkit的财产权争论、Forge的架构分裂、Bukkit的法律崩溃——构成了模组共和国政治史的早期篇章。它们不是孤立的技术纠纷或人格冲突。它们是政治哲学的基本问题在数字空间中的朴素重演:财产权的边界在哪里?功绩与权威的关系是什么?退出权如何与集体行动的稳定性平衡?当玩家们开始修改游戏的底层代码时,他们确实在行使一种制宪权——但他们首先意识到的是制宪权的沉重。制定规则远比遵守规则困难。

而在这个自治实验的内部危机尚未解决之时,外部的压力已经开始逼近。2014年9月15日,微软宣布以25亿美元收购Mojang。这笔交易对模组社区的影响不是立即显现的,但它从根本上改变了模组共和国所处的政治环境。在此之前,Mojang对模组的态度是模糊但宽容的:不主动支持,不主动禁止,偶尔在版本更新中不小心破坏了某个流行模组的功能然后被社区骂上几天。佩尔松本人曾在社交媒体上表示他不反对模组开发,“只要他们不卖钱”。这个态度虽然缺乏法律确定性,但至少为灰色地带的持续存在提供了空间。

微软的入场带来了完全不同的逻辑。微软是一家上市公司,拥有庞大的法务部门和标准化的知识产权管理流程。它收购Mojang不是为了保留一个开放的实验场,而是为了获得一个可以整合进其平台生态系统的核心资产。在收购完成的同一个月,微软开始着手准备Minecraft Marketplace的前期工作——一个将模组开发纳入官方平台经济的计划。这个计划的技术基础是基岩版的跨平台架构(详见第11章),而其法律基础则是一套标准化的开发者协议。

2014年11月6日收购全部完成后不久,微软向一批经过筛选的模组开发者发出了合作邀请。这些邀请函的语气是友好而专业的:微软表达了对社区创造力的赞赏,提出了合作开发官方认证内容的建议,并附上了一份需要签署的法律文件。文件的核心条款包括:微软拥有对提交内容的最终审核权;所有通过认证的内容必须符合微软的内容政策(该政策可以根据微软的单方决定随时修改);开发者的收入分成为销售额的百分之七十;开发者授予微软及其关联公司在全球范围内永久性使用、复制、修改和分发其内容的权利。

对于已经在模组共和国中经历了多年自治实验的开发者们而言,这份合同提出的问题不是商业性的——这个分成比例是否合理——而是宪法性的:我们是谁?模组共和国的公民们一直默认自己是一个独立政治体的成员——尽管这个政治体没有成文宪法、没有领土、没有常设政府机构——而微软的合同是一份入籍申请:加入联邦,接受其法律体系、税收制度和行政管辖,作为交换获得在市场内合法经营的许可。

拒绝这份合同意味着继续留在灰色地带:技术上仍然可以开发和分发模组——Java版的开放架构没有被改变——但无法触达基岩版日益增长的跨平台用户群体,也无法获得官方认证带来的曝光度和用户信任。接受则意味着承认一个此前从未被承认的事实:微软对《我的世界》的知识产权拥有最终主权,而模组开发者的权利只是这种主权下的一种特许经营权。

2015年至2016年间,模组社区围绕这个选择发生了深刻的分化。一部分开发者接受了微软的条件,成为Marketplace的首批入驻创作者。他们中的一些人来自传统的Java版模组背景,将自己的作品移植到基岩版平台;另一些人是新进入的专业工作室,他们将模组开发视为一项严肃的商业活动而非业余爱好。另一部分开发者明确拒绝与平台合作。他们的理由各不相同:有人出于对微软公司的不信任;有人坚持认为模组应该永久免费;有人担心合同中的永久授权条款会在未来被用来对付创作者;还有人只是不愿意将自己的创作置于任何外部权威的审核之下。

这种分化本身并不令人意外。任何共同体在面对外部收编压力时都会分裂为合作派和抵抗派。值得关注的是分化发生的方式:它不是通过社区公投、论坛辩论或任何形式的集体决策过程完成的。每一个开发者独自做出选择,签署或拒绝合同。模组共和国作为一个集体政治体在这个过程中完全缺席了——它没有机构可以对微软的提议做出统一回应,没有代表可以谈判更好的条款,甚至没有论坛可以讨论这个问题而不陷入人身攻击的泥潭。

这正是自治实验的脆弱性最尖锐的暴露时刻。当外部压力以个体化、合同化的方式施加时——微软向个别开发者发出邀请而非向“模组社区”发出集体要约——建立在代码共识和声誉等级之上的共同体结构完全无力应对。它无法阻止成员单独与平台签约(退出权在这里变成了被平台利用的弱点),也无法为集体谈判提供制度基础(没有合法的代表机构),更无法强制执行任何关于团结的决议(没有制裁机制)。平台资本主义的战略精确地击中了自治共和国的阿喀琉斯之踵:用个体化的利益诱惑瓦解集体行动的可能性。

但故事不能简单地归结为资本收编摧毁了自治共同体的道德寓言。这个叙事的缺陷在于,它假设在被收编之前存在一个团结的、运作良好的自治秩序——而证据并不支持这个假设。Bukkit在微软收购之前就已经崩溃了。Forge在微软收购之前就已经分裂了。Tekkit事件在Mojang最宽松放任的时期就已经爆发了。模组共和国的内部危机不是由外部资本压力造成的;它是结构性的、内生的。纯粹基于代码共识的民主——即通过GitHub提交、论坛讨论和声誉积累来治理一个跨国创作者共同体——在理论上令人向往,但在实践中持续暴露出的问题是:它无法解决财产权争议、无法裁决价值分歧、无法约束破坏性退出行为。

微软的平台化战略所做的不是摧毁一个健全的民主政体,而是向一个已经陷入内部僵局的政体提供了个体化的退出选项。对于那些厌倦了许可证争论、分叉战争和DMCA威胁的开发者而言,一份清晰的商业合同——即使条款不利于己方——至少提供了可预测性。你知道你能得到什么(销售额的百分之七十),你知道你必须放弃什么(内容的永久使用权),你知道规则是什么(微软的内容政策),你知道违反规则的后果(下架)。这种清晰性与模组共和国中永无止境的不确定性形成了鲜明对比。

2017年初,一位在2013年Forge分裂中选择中立的老牌模组开发者在一篇博客文章中回顾了这几年的历程。他的核心判断是:社区成员曾经以为他们在建造一个共和国,实际上他们只是在一个没有法律的荒野中各自圈地,偶尔在边界上发生枪战。这篇博文在Reddit上引发了数百条评论。一些评论者愤怒地反驳说作者过于悲观;另一些人则补充了更多例子来支持他的判断。但几乎没有人质疑这个核心观察:模组社区从未成功建立一套有效的集体治理机制。

但这不意味着自治实验毫无价值。恰恰相反:正是通过这些失败——Tekkit的财产权混战、Forge的宪法僵局、Bukkit的法律崩溃、面对微软时的集体行动无能——一代年轻的参与者们以最具体的方式经验了政治哲学的核心问题。一个十六岁的德国少年在Forge论坛上争论GPL许可证与MIT许可证的区别时,他实际上在做的事情与十八世纪费城的制宪会议代表们并无本质不同:他试图为一个共同体制定基本规则。区别在于工具和语境——他用的是GitHub Issue而不是羽毛笔和羊皮纸;他的共同体成员分布在全球各地而不是聚集在一间会议厅里;他的规则对象是代码的使用权而不是政府的权力结构——但他所面对的问题的逻辑结构是相通的。

许可证的选择是这些问题中最具教育意义的一个。当一个模组开发者决定将自己的代码以MIT许可证发布时,他实际上在说:任何人都可以以任何方式使用这段代码,包括将其整合到商业产品中而不支付任何报酬或公开源代码。当他选择GPL许可证时,他实际上在说:任何人都可以使用这段代码,但必须同样以GPL许可证发布他们的修改版本——这是一种强制共享的条款。

当他在论坛上为自己选择的许可证辩护时,他必须回答一系列政治理论级别的追问:创作者对自己的作品拥有何种权利?这种权利在多大程度上可以被让渡?共同体对个体的创造物是否拥有某种主张?如果一个人使用了其他人的免费劳动成果并从中获利,他是否对原初劳动者负有道德义务?

这些问题没有标准答案——在政治哲学中已经争论了几个世纪——但模组开发的实践迫使参与者们不得不在具体情境中给出可操作的答案。他们的答案体现在每一行代码注释中的版权声明里,每一次论坛辩论中的论证策略里,每一个GitHub仓库顶部的LICENSE文件里。

这些文本不是政治哲学论文,但它们构成了数字童年中最真实的政治教育材料。

当2017年微软正式推出Minecraft Marketplace时——这是一个允许创作者销售模组、皮肤、地图和材质包的官方商店——它面对的已经不是2012年那个对财产权和许可证一无所知的原始社区了。经过五年多的内部争论和制度实验,模组开发者们带着丰富的政治经验进入谈判场域。他们中的一些人选择签约,但他们签约时的理解不同于五年前Tekkit事件中的懵懂参与者:他们知道自己放弃了什么权利(永久使用权),他们知道这个放弃对于平台经济模式而言是结构性的必要条件(平台需要保证内容不会因创作者退出而消失),他们也知道自己保留了哪些权力(分叉权仍然存在于Java版生态中;拒绝签约的自由仍然存在)。

另一些人选择留在平台之外。他们继续在Java版的开放生态中开发模组,使用Forge或Fabric(2016年从Forge社区中分叉出来的另一个模组加载框架)作为基础设施,通过CurseForge或自己的网站分发作品。这个平行生态并没有因为Marketplace的出现而消失;事实上它在2017年到2020年间继续增长和分化。新的模组项目不断涌现,旧的模组项目不断更新维护或停止更新后被其他人接手——接手的方式通常是通过分叉。许可证争论继续发生——2019年一位名叫GregoriusT的开发者因其模组GregTech中的代码使用条款与其他模组包制作者爆发了激烈冲突——社区投票偶尔还会举行(通常是在某个模组的Discord服务器上关于是否应该重写某个系统的非正式民意调查)。

这一切都表明,“模组共和国”并没有死去;它以碎片化的形式继续存在着。它的宪法从未被正式批准——也许永远也不会——但它的公民们在数千次微观层面的决定中不断实践着一种不完美的、充满争议的、但确实存在的自治。这种自治不能阻止微软成为平台经济中的主导力量;它不能阻止一些开发者选择商业化的道路;它不能解决所有关于财产和权利的纠纷。但它完成了最重要的一件事:它让一代年轻的参与者们亲身体验了立法的困难与必要。

回到本章开篇的那个并置:德国开发者在凌晨提交代码修复漏洞;微软法务部门向创作者发出格式合同。这两个场景之间的张力不会消失,因为它们是同一枚硬币的两面。《我的世界》之所以能够成为数亿儿童的第一个社会空间,恰恰是因为它同时包含了这两种逻辑:开放的、基于自愿协作的、不断自我治理的社区逻辑;以及封闭的、基于法律合同的、由平台公司管理的商业逻辑。儿童们在这个空间中建造的不仅是方块建筑;他们在两种逻辑的夹缝中学习如何在一个人造的、规则不完善的、权力结构不透明的世界里与他人共存。

2018年秋天的一个下午——此时距离佩尔松宣布Beta测试已经过去了将近八年——一个十三岁的巴西少年在他的卧室里打开了两个窗口。左边窗口是代码编辑器,他正在为自己服务器上使用的Spigot插件添加一个新功能:允许玩家通过投票决定是否开启PVP模式。右边窗口是Minecraft Marketplace的创作者后台页面,他上传了一个自己制作的材质包并等待审核结果。他不懂多少政治哲学;他不知道John Locke是谁;他从未听说过“制宪权”这个词。但他正在做的一切——编写插件让玩家投票决定规则、向平台提交内容以获得收益分成、在自己的服务器上强制执行一套自己编写的领地保护法则——都是对“谁在为这个场所立法”这个问题的实际回答。

他的回答是碎片化的、情境性的、充满矛盾的:他在自己的服务器上是立法者(他编写插件设定规则),但在Marketplace上是签约者(他接受平台条款以换取分发渠道);他相信玩家应该通过投票决定服务器的规则(他在代码中实现了投票功能),但他不认为自己有义务让其他插件开发者决定他的代码如何编写(他的GitHub仓库没有接受Pull Request);他免费发布自己的插件代码(MIT许可证),但收费出售自己的材质包(Marketplace定价一点九九美元)。这些立场在理论上不一致;在实践中它们构成了一个十三岁少年在数字空间中的生存策略。

这种生存策略正是方块世界教给它的居民的最重要一课:在没有单一立法者的场所里生活的能力。模组共和国的实验证明了儿童和青少年具备惊人的制度创造力——他们从零开始发明许可证规范、建立功绩等级制、实践分叉权、组织社区投票——但同时也暴露了这种基于代码共识的民主在面临硬性的产权和资本压力时宪法基础的脆弱性。

这不是一个道德故事(资本是恶棍、社区是英雄),而是一个结构性的诊断:碎片化的立法权是这个场所的根本特征,而非任何单一行动者可以改变的状况。微软不能完全统一它(Java版生态拒绝被收编);

社区不能完全自治(内部冲突无法制度化解决);国家政府也不能完全控制它(私服和离线模式绕过了审查)。方块世界的法律景观注定是重叠的、竞争性的、永远处于争议之中的——就像它的居民们在其中学习生活时所体验到的那样。