uBlock Origin 之死
1Google将在8 月 31 日起从 Chrome 商店中移除所有 Manifest V2 (MV2)扩展程序,其中包括大名鼎鼎的广告拦截插件——uBlock Origin。
事实上在去年Google在chrome就已经默认禁用了MV2,你需要开启开发者模式才可以使用uBlock Origin,在当时我就嫌弃chrome死活配置不好Fcitx5加上我不想装改uBlock Origin像西天取经就跳槽到了Firefox。
这次Google又显然的挨大骂,当然也有人为Google喊冤——MV3取代MV2是先进取代落后,是uBlock Origin自己不与时俱进。所以换掉Manifest V2的Google,骂挨的冤不冤?
为啥非uBlock Origin不可?
任何市场都有替代品,在广告拦截上一样,uBlock Origin有一堆替代品,但在这一领域的替代品为何都无法撼动uBlock Origin?

开动脑筋
其实答案很简单——大伙都开动脑筋搞商业化了。死掉的家伙满坑满谷,包括但不限于:
- Adblock Plus——搞“可接受广告”(Acceptable Ads)计划。表面上地宣称“这为了帮助小网站生存,我们放行不打扰用户的良心广告”。实际上是要付钱给Eyeo GmbH作为白名单费用,2支付者包括Google,微软,AWS等等
- AdBlock——靠名字好自带自然流量,不过2015 年 10 月原作者宣布将 AdBlock 出售给了一位拒绝透露姓名的匿名买家,3然后就是宣布 AdBlock 将全面参与前面说的Adblock Plus的Acceptable Ads计划,直到2021 年 4 月,Adblock Plus 的母公司 Eyeo GmbH 正式对外宣布全面收购 AdBlock 及其背后的公司。
- Ghostery——他的母公司 Evidon 本身就是数字营销行业的成员,Ghostery和很多开源应用一样会鼓励用户开启一个数据分享计划“帮我们收集追踪器数据以优化拦截”,可4实际上如果你看了天书一样的条例会发现这些数据被卖给广告商。
- uBlock——uBlock Origin曾经不叫uBlock Origin就叫uBlock,维护者gorhill图方便在 2015 年把
uBlock这个项目名和所有权转让给了一个叫 Chris Aljoudi 的开发者。结果这货立马开始搞修正先是开了捐款,还试图加入Acceptable Ads计划。
图 :Adblock Plus对可接受广告的示意图
UBO为何独善其身?
gorhill在上面的uBlock这件事情后立马重上井冈山,并把新项目命名为uBlock Origin Origin在英文中意为起源和血统。至于分裂后的uBlock遭AdBlock开发商收购。
至于为啥非uBlock Origin不可?uBlock Origin的开发者gorhill并不缺钱。uBlock Origin按照GPLv3开放源代码,uBlock Origin的隐私条款十分简单,主要就是:
- uBO has no home server.
uBO没有主服务器。- uBO doesn’t embed any analytic or telemetry hooks in its code.
uBO的代码中没有嵌入任何分析或遥测钩子。- uBO doesn’t accept donations or any other form of financing.
uBO不接受捐款或其他任何形式的融资。
除了不接受任何捐款(他们更希望把钱捐给屏蔽规则的维护者),UBO甚至没有中心服务器,它连CDN都是去中心化的——UBO选择了四个免费提供商(cloudflare,Github,jsdelivr,statically)每次更新规则会随机抽一个CDN拉取。
现在还在的竞争者就是AdGuard和Brave。AdGuard是一家专门经营此类服务的公司,类似proton的感觉,AdGuard是引流产品你会频繁看到他们的广告,推销他们更高级的 AdGuard Premium 独立客户端,不过好歹是良心钱。6Brave也有黑历史比如企图把拦截掉的广告换成自己的,不过貌似改了,当然Brave不是插件是整个的浏览器,和UBO很难直接对比。
所有,总结来说: 如果你希望用极低的内存消耗屏蔽所有广告和追踪器,而且你不希望卖掉你的隐私给商业公司,就是非uBlock Origin不可
Google挨骂冤枉吗?
Google挨骂的主要原因是换掉Manifest V2 。善意解读下最好的辩护理由就是Google在做技术升级,这就牵扯到了第一个问题
MV3都改了啥?
抛开UBO不谈,MV3的确是有技术升级,最重要的就是安全性的改进:

.zip 插件包里,必须通过 Chrome Web Store 的静态和动态上架审核。极大改善了安全性。此外还有:Service Workers 替代 Background Pages,改为事件驱动可以缓解插件内存占用问题,插件闲置会休眠;MV2 充斥着极其恶心的回调地狱(Callback Hell) MV3推动Promise 架构方便开发者;引入了更强大的运行时可选权限改善了权限控制…
BUT,这不是Google可以被善意解读的理由,抛开UBO不谈?根本抛不开!
为啥“抛不开”?
UBO的运作流程:是是浏览器收到网络请求 拦截并丢给 uBO uBO 用自己的规则库匹配 告诉浏览器“放行”或“拦截”。这个过程严重依赖webRequest API。
而Google十分鸡贼的在技术进步中夹带私活的砍掉了webRequest API
Google在更新中直接砍掉了 webRequest 的修改功能,换成了 declarativeNetRequest (DNR) API。现在扩展不能直接拦截请求了,必须提前把过滤规则打包成一个死板的列表交给浏览器,匹配动作只能由浏览器完成。
这就完了?Google 在 MV3 中对规则数量设置了严格的上限(最初只有 3 万条,后来放宽但依然远不够用)。对于动辄加载几十万条规则的 uBO 来说,根本是地狱。uBlock Origin针对MV3推出了uBlock Origin Lite,但是在性能和成效上显著落后完整的UBO。
FIrefox呢?
首先mozilla就宣布Firefox对MV2的支持将是不限期的。

mozilla做的极其简单,把webRequest API加回来不就行了。于是UBO就又活了,就这么简单。Firefox和所有以Gecko为上游的浏览器都会支持MV2且哪怕MV2真的停止了支持,UBO可以不阉割的过渡到MV3。而Firefox的插件支持依然优秀,firefox of Android甚至有专用的插件体系,并且支持UBO。而mozilla的MV3运行到现在依然好好的,加回webRequest API完全不影响MV3。
所有我认为善意解读,是不生效的对于Google来说,它明白这么做会怎么样,但Google还是砍掉了webRequest API**这就是在技术进步中夹带私货。
这么做的影响
Google的行为所有依赖Chromium的下游浏览器都必须跟着当太监,无论是单独留下MV2,还是复刻mozilla在Gecko的行为都需要更改Chromium源代码,这需要巨大的精力。尤其对于很多一人计划,几乎不可能。
对于本身就看广告拦截器不爽的厂商太好了,比如Microsoft非常开心的宣布Edge会跟进。而Brave则表示会尽量支持MV2,但Brave又不一样Brave的拦截是直接在引擎里面的,用的是adblock-rust。对于个人开发者就是很难受了——如果不想跟着Google当太监,你要不用adblock-rust要不就改自己内核。而不是每一个开发者都有Brave的团队和盈利能力。
现在怎么办?
首先当然是推荐更换Firefox,事实上Firefox不弱于Chrome。

我从使用电脑时就在用Chrome,有很强的惯性,但是我还是换了Firefox——Firefox不弱,在性能上并没有啥明显的落后,比如在内存管理上更为保守和高效。在开启大量标签页的场景下,整体系统内存占用通常显著低于 Chromium,多任务处理更为轻盈。
具体到场景firefox很可能更适合你,比如说如果你用GNU/Linux,FIrefox有原生的Wayland,chrome用的是XWayland经常抽风,所有我干脆用的Chrome-bate(如果不是agy依赖我真想完全删除它)
我曾经最大的顾虑是我想要Google的同步,但是实际上mozilla同步更加隐私(Firefox密码工具默认开启了E2EE,Google需要手动)而且mozilla服务目前好像还没有被GFW屏蔽。包括密码,书签和浏览器扩展。
如果必须要用chrome可以尝试UBO为之开发的阉割版ublock origin lite但是UBO的开发者明确说了UOBL就是弱于UBO:
7> - Cannot use all filter lists simultaneously (rule limits apply)
不能同时使用所有过滤器列表(规则限制适用)
- No cosmetic filtering in the default mode
默认模式下没有外观过滤- No scriptlet injection by default
默认情况下没有 scriptlet 注入- Limited dynamic filtering capabilities
有限的动态过滤能力- Requires broader host permissions upfront
需要更广泛的主机权限
Footnotes
部分信息可能已经过时




