文件、链接与一件被忘掉的事:发布
如果把今天的“做一个网站”拆开,常常会得到一张很长的清单:选框架、接数据库、做身份、搭部署、配域名、接分析、处理缓存、决定怎样让搜索引擎读到内容。这个清单并不荒谬。问题只是,它很容易让人忘记最先要解决的事情其实很小:我有一份内容,怎样让别人可靠地读到它?
早期 Web 给出的答案接近得近乎朴素。一个文档有一个地址,地址可以相互链接;一台服务器把某些资源通过 HTTP 暴露出来,浏览器就能读到它们。1989 年的 Web 提案、1990 年最早的浏览器/编辑器与服务器实现,当然不是为了给每个人建个人主页。但这套模型后来产生了一种重要的社会后果:发布不必先是一项“应用开发项目”。
HTML 也是这个后果的一部分。早期的 HTML 是 SGML 的一种应用,却以更小的文档语言把标题、段落、链接和媒体组织给作者。Web 的扩散从来不是 HTML 单独造成的,图形浏览器、跨平台软件和开放实现条件同样重要。可它确实给了人们一个很直观的做法:把想说的话写成可读的结构,再给它一个别人可以访问的地址。
目录不是 Web 的本质,却留下了正确直觉
后来许多人是在 Unix 和 Apache 的个人目录发布模式中感受到这种直接性。Apache 的 UserDir 可以把类似 ~alice 的 URL 映射到 Alice 的某个目录,常见约定是 public_html。macOS 也曾有 Personal Web Sharing,让用户的 Sites 目录可以被内置 Web 服务公开。它们不是同一项技术,也都不是“自动给每个人一个公网网站”:服务器配置、网络条件和安全策略仍然存在。
把这个场景想得具体一点。在一台已经配置 UserDir 的共享 Unix 主机上,一个学生、研究人员或员工有了自己的 shell 账户。他在家目录下建立 public_html,写一个 index.html,再把一张图片和几条链接放进去。别人收到一个类似 http://host/~alice/ 的地址,在浏览器里打开的不是“某个平台中的个人页”,而是 Alice 放在那处空间里的内容。它可能朴素,可能只有文字、图片和一串超链接,但作者、资源和 URL 的关系一眼就能看清。管理员仍要开启这种映射,机器也必须能被外部访问。
它们重要的地方,不在于今天还应不应该照搬目录名,而在于它们把作者、内容与发布空间放得很近。一个用户先拥有内容和空间,再决定怎样分享。一个站点在这种模型里首先是资源的组织,服务器只是让这种组织可以被读取。
这与今天常见的心智模型不同。现在的作者往往先创建一个平台账户,再在平台允许的页面里写内容;或者先初始化一套应用,再把内容接进去。两种方式都可以工作,也都提供了便利。但第一种把身份与发布空间的控制关系交给平台账户,第二种把发布变成一段软件交付流程。前一种改变了作者对空间的控制边界,后一种容易让简单发布背上不需要的工程负担。
这也是为什么“把文件系统带回 Web”并不是足够准确的表述。文件本身不会自动解决搜索、版本、权限、身份、结构化数据或互动。一个真正可用的发布系统必须有这些能力。早期目录模型留下的不是实现方案,而是一个更值得保留的问题:这些能力究竟应该逼着每个作者自己拼装,还是应该成为作者可调用的公共环境?
从 Gopher 到个人主页,关键不是谁更“先进”
在 Web 大规模普及之前,Gopher 是重要的互联网信息导航方式。把它和 Web 放在一起,容易产生一个过于简单的故事:某个更先进的协议取代了另一个协议。历史并不支持这样的单线叙事。不同系统各有适用场景,Web 的扩散来自多种技术和社会条件的组合。
但两者的对照仍值得保留。信息网络不仅要解决“信息在哪里”,还要解决“谁能自然地把信息放进去”。Web 的链接文档与浏览器让呈现变得更直观,个人主页又让发布看上去像一种日常动作。这种直觉后来反复出现,具体产品与工具会在后文和编年参考中展开。
ARC 讨论 Web Device 时,并不需要把这些产品逐一奉为前身。它们的共同意义是提醒我们,普通人对发布空间的需求从未消失。真正变化的是,能够安全、可靠、专业地发布一份内容所需的周边能力越来越多,而这些能力很少被当作计算环境本身的职责。
AFS 保留的是“拥有资源”的起点
AFS 不是把传统文件夹换一个名字。它是一种文件系统抽象:内容、配置、数据源和可调用动作都可以通过同一套路径语义被发现和组织。它可以挂载数据、索引、缓存或其他 provider,因此不要求每个站点把一切都塞进本地磁盘。
这种抽象之所以适合发布,不是因为它否认数据库或应用代码,而是因为它先给出一个共同的事实面。作者的内容、站点声明和可供呈现的数据不需要先被复制进一个完全独立的 CMS,才能变成页面。Web Device 可以从这些声明和资源组装可发布的输出,而不是要求作者先手工搭一条新的站点管线。
这仍然不是“任意目录自动成为网站”。发布型站点需要明确的 .web/ 声明、页面和内容约定;需要特殊行为时,也仍可能需要自定义组件或 provider。区别在于,作者面对的第一层不再是一套必须从零运营的 Web 应用,而是一组可以被系统理解的发布资源。
下一篇会讨论这条直觉为何没有停留在静态文档。URL 一旦开始调用程序,Web 获得了真正重要的新能力,也开始把“资源”和“应用”放进同一个请求里。ARC 的问题不是要撤销这一步,而是怎样在保留它之后,仍让发布保持直接。