Article cover

Sneakerweb:互联网的脆弱与韧性

把一个完整内容打包并且携带到另外一台设备上,这件事情在史前时代是很容易的。 Authorware 可以直接输出可执行文件,SWF 文件也可以输出可执行文件,Flash Player 更是一个二进制附一下就带走了,那个时候甚至 PowerPoint 都可以直接打包成二进制。

后来随着一切上云一切都变服务,这件事情变得很难。

PDF 算是一种延续至今的标准,但是它的表现力相当有限,而且除了 Adobe 之外 也没有几个厂商把 PDF 标准实现到百分之百完美(比如 PDF 里面自带脚本怎么办)。EPUB 算是一种可以用的标准?但是整个 EPUB 生态几乎没跟上 Web App 的步伐。您想要在 EPUB 里面插点交互元素?不存在的兄弟,插个公式或者插个 SVG 图都有一万个阅读器不支持。为了折腾 EPUB 里的公式渲染我甚至写了一套完整的渲染方案

这大概是我看到过的最浪漫的东西:古巴的 El Paquete Semanal。人们通过硬盘和 U 盘人工分发的离线内容系统,靠背包里的移动硬盘和 U 盘,把内容传递到古巴各地的用户手中。硬盘里的内容每周更新,分发方式类似口耳相传,从一位「信息贩子」处购买,再传给朋友邻居。内容包括最新专辑、杂志、正在院线上映的好莱坞电影,还内置持续更新的杀毒软件,甚至包含本地分类信息网站 Revolico 的完整离线镜像。

这套系统兴起的背景是古巴当时只有 5% 的人能接入完整的移动互联网,网速很慢,全国仅有 175 个公共WiFi热点,且上网费用相当于官方月薪的 10%,所以催生了这套依靠人力和物理介质流通的替代网络。

然而,目前这套系统虽然还在运作,规模和地位却已不如其鼎盛时期,因为在古巴移动数据网络已经开始慢慢普及。在城市地区,能直接联网下载的人越来越多,因此 Paquete Semanal 的影响力已经不如从前。但在网络接入仍然稀缺昂贵、家庭宽带流媒体不现实的地方,它依然是许多古巴家庭获取娱乐内容的主要途径之一。

不难发现,随着高速互联网的不断普及,人们似乎不再想要浪费硬盘空间,把庞大的资讯存储在自己的硬盘里,特别是现在硬盘贵的要死!但我认为,在当下这件事情依然有必要。

首先,架网站维护服务器是需要持续投入金钱的,这种维护成本决定了不是每一个内容都适合 serve 成网站;另外,网络审查、网络服务的脆弱性也都是严重的问题。我曾经也有上网的东西永远都不会消失这个天真的想法,直到很多以前习以为常的东西再也找不回来,我才意识到互联网这个媒体的流动性。内容会消失,它可能因为服务器忘记续费而爆炸、可能因为域名忘记续费而爆炸、可能因为作者心情不好而爆炸、也有可能因为公权力心情不好龙颜不悦而爆炸,互联网档案馆也没有办法提供完整快照整个互联网的承诺。

我对这样的互联网感到不安。我对钥匙卡感到不安、我对订阅制感到不安、我对电子授权感到不安,我对 Figma、Canva 这种我无法完整拥有的东西感到不安。倘若一款产品不再活跃,那么维护者将其撤下是非常合理的行为。但这也意味着电子授权背后的所有内容都会在一瞬间化为乌有,因此人们讨厌钥匙卡、讨厌索尼不再生产蓝光光盘。这种情绪几乎是天经地义的,没人希望自己没办法掌控自己珍视的东西,失控感是不幸福的重要推手。作为一种资源托管手段的互联网是相当脆弱的,我们需要一种能够把它固定下来的方法。

Sneakerweb

所以我大概能够理解仓鼠症患者喜欢写爬虫把一些东西全都存到自己的电脑上。但爬虫是一个非常烦人的东西,它无比吃资源,且对内容发布方几乎不会有任何好处。我一直在找一种方法,可以让我便利地把内容完全转制成离线包分享给全世界。

最近冒出来了一个崭新的项目 Sneakerweb,这东西虽然目前非常粗糙但是潜力很大,特别是 spec 中的这段话很有力量:

… and we further recommend to only exchange such files through physical media or local area networks.

Sneakerweb 是这样的一个系统:你的网站编译完毕之后可以直接把直接交给 Sneakerweb,打成一个 SNK 包,其他人导入到设备上就可以直接无痛 replay。能做到这件事情的工具有很多,但是 Sneakerweb 有很独特的优点。

首先,它底下的存储协议是同步协议 Willow,尽管同步算法本身还处于草案状态,但是在成熟之后你能通过它获得免费的多设备同步功能。这增添了很多可能性,比如数据发布方式将与狭义互联网彻底解藕。你可以用 U 盘、可以用蓝牙、可以用红外线、可以用二维码,可以在互联网不可访问的时候使用任何一种方式同步两个网站之间的内容。内网当中的设备也可以利用 Willow 的结构彼此同步离线副本,达成多端访问或者备份的目的。

在 Sneakerweb 当中,你可以随机生成一个稳定的、自己的地址,如果你知道朋友的 Sneaker 地址,那么你们二者甚至可以有互动(如果你富甲一方甚至可以用 GPU 摇出来一个有趣的域名,但是你不能凭空指定自己的域名是什么)。每台现代设备上几乎都有完整的浏览器实现,而浏览器几乎是开发成本与表现力权衡的最好的一个平台,直接把它变成下一代内容打包的媒介非常聪明。

有很多类似的产物,但我觉得 Sneakerweb 提供的功能是最为完整的,下面是一些备用选项,以及我个人的权衡与偏好(这非常个人):

相较 WACZ 格式 Sneakerweb 有一些很棒的优点,比如打包更加方便,且格式是一个正儿八经的网站,不是一大堆散装的页面要你从列表里面找,这在用户体验上也要更好一些。

相较 Kage 是一种基于爬虫的实现,本意是帮助网站访客归档一个网站,它的目标受众并非网站所有者。如果你是网站所有者,Sneakerweb 会更加环保一些,毕竟网站是你的,你已经有了所有内容,何必还要再爬一遍。

相较直接把网站打一个 ZIP 包,你多了 Willow 数据结构(当然现在这个数据结构的性能非常糟糕,作者团队已经意识到了这个问题,并且会在未来推进对它的优化),这意味着你在未来会获得同步功能,而且这个同步是增量的、可以做真删除的(大多数同步算法都基于墓碑做不到真删除)。

另外,WACZ 和 Kage 这类方案都有一个问题,不同 Archive 之间没有办法互相连接。但在 Sneaker 的世界里面,你的域名就是你的公钥,这和洋葱域名很像。这个域名相当的稳定,可以和其他 Sneaker 网站组成由超链接构成的,互相交织的网络。当然代价是它又臭又长,想要通过摇号的方式得到好看的域名一般人撑死也就能控制前九位,剩下的字面意义上就是天书了。

相较 Web Bundles 标准, Sneakerweb 对内容所有者的校验完全不依赖权威证书签发机构,不存在一个信任链的问题。要知道打包网站的目的是长期归档,用于签名归档的证书是不应该过期的(除非你能接受每年对所有归档重新签签名一遍分发一遍,这也太不现实了)。一个有权威、且理论上不应该过期的证书看着就很吓人。你已经看过无数 CA 乱玩整个互联网对它的信任,最后被厂商从信任列表里面移除的惨案。

作者已死

看到 Sneakerweb 之后,我构想了一种新的半中心化的博客订阅形式。有一个中央的博客列表,所有博客维护者把自己的公钥提交到列表上,然后每次更新博客就直接把全站快照传 IPFS 上,所有客户端可以自己决定自己想要订阅谁的博客,你订阅了你就自然 Serve 这个网站最新版本的副本。在这个构想的软件中,有一个界面按照最新更新的网站排序。

这和 RSS 有明显区别。RSS 这个标准老实讲有点过时而且也带来一些麻烦。比如标准死板没办法支持丰富的视觉表达和交互式,就算你硬塞很多 RSS 阅读器也会把它剥了。在博客领域折腾模板和交互是一门显学,我想很多博客作者都很难接受自己的设计被人剥个精光。

但是可惜,Sneakerweb 可能和很多方案一样,最终会变成小众玩具,因为它在某种意义上是反互联网的,电子物权也不是一个广泛存在的需求。Zeronet 已经死了,仰卧起坐了好多次最终还是倒下,我找不到 Sneakerweb 比 Zeronet 多些什么。唯一多的可能是更符合我的品味,但是没人在乎我的品味 :)

不过如果你在乎电子物权,并且给自己的网站发布了 Sneakerweb 版本,请让我知道,说不定未来 cool boy 和 cool girl 多了,我们真的可以搭建起来这样一个有趣的网络结构。

作为参与社区的一部分,我参考 MS CHM 阅读器的界面风格给它做了一个很糙的 GUI,这个浏览器很小,只有不到 10 兆。它就是一个基于 Tauri,把 Sneakerweb 一起编译进去的界面工具。它直接使用你系统 Webview 的工具,不会四处拉屎,便于携带,就像 SWF 播放器一样。

Walky6,一个基于 Sneakerweb 的浏览器
Walky6,一个基于 Sneakerweb 的浏览器

本站现在被打成了一个大包,包括评论区也都爬了回来。你现在就可以在博客的右下角,捐款按钮边上看到这个 Archive 看到这个包。但请注意现在一个包有近 300M,这不是一个很小的数字,这意味着我不希望你开一个机器人每天下载一遍这个内容,我希望你至多每个月同步一次,且在同步前检查档案页面的最近打包日期,在没写新文章的时候我是不会更新这个包的。

很多朋友看到 Sneakerweb 的时候感到非常诧异,因为人们甚至都不需要写爬虫了,有一个 SNK 包就可以直接把网站的内容全都下载下来。但我的想法是:在一个有机的互联网世界中你阻止不了爬虫。激进的反爬虫策略会极大牺牲用户体验。被 Cloudflare 的配置拦下、被 Google 的找机车游戏烦到要死的人肯定知道我在说什么。

另外一个值得担忧的事情是这会削弱我博客的流量。坦白讲我在乎流量,但是我更在乎对内容的安全感,我的 SneakeyWeb 域名是 eeeeeeeebad9a5e4b24e74cb55e829fb82c8244c0a5a3bae585179575af33bb0。前面的八个 e 是用 GPU 算出来的,而 bad 则是某种运气使然。我非常喜欢这个人事、天命相聚的时刻,所以欣然将其作为我的主域名来使用。尽管这个域名丑陋且不可能被人记住,但这个域名不会因为我忘记续费而消失。只要你得到了它,它就永远是你的。

最后,发布 Sneakerweb 包裹的行为某种意义上更加深度的践行了作者已死的精神,这个行为意味着作者主动将内容交给了读者,放弃了一部分对它的控制权(但当然不是著作权),让它在「不可撤回」这件事情上走得更远。这是一件很酷的事情,完全符合我对另一个世界线里万维网的想象。

Comments

Loading animation

Loading comments...