写点什么

这个曾领先于谷歌和微软的开源项目,为何盛极而衰?

2021 年 9 月 13 日

这个曾领先于谷歌和微软的开源项目,为何盛极而衰?

编译|核子可乐

编辑|燕珊


Firefox 正在不断流失用户,这是一个不争的事实。


来自 Firefox 的公开数据显示,自 2018 年底到 2021 年 8 月 30 日,桌面端 Firefox 的 MAU(月活跃用户数)下降约 18% 至 1.998 亿,大概少了 4400 万月活用户。进一步看会发现,其中有一半月活用户是今年内损失的(3 月至今减少近 2000 万)。



根据 Statcounter 在 8 月发布的统计,在桌面浏览器市场中,Microsoft Edge 和 Mozilla Firefox 目前正在激烈争夺第三的名次,其中 Edge 录得 3.57%的市场份额,Firefox 则是 3.55%。自从 Edge 浏览器转向 Chromium 内核之后,其份额就持续上升。


事实上,近几年关于 Firefox 衰落趋势的讨论络绎不绝。Firefox 曾一度是全球第二大浏览器,市占率高达 35%,而现实的情况是,它的市场占有率已经连续多年下降。


一位有近 40 年编程经验的开发者 Dan 近日就 Firefox 的衰落趋势发表了自己的看法,从几个方面阐述 Firefox 的不足之处。


在社区讨论中,一个获得不少赞同的观点是,因为不想让 Google 完全控制浏览器市场所以才用的 Firefox。但也有人表示,当 Firefox 越像 Chrome,自己就越没有理由继续使用它了。


Dan 认为,造成 Firefox 衰落的原因,始于 2009 年第三季度的一个致命决定……

以选项卡为中心

在做出强制推行选项卡中心设计的决定之后,Firefox 的市场份额就开始萎缩。当时,PC 上的所有其他程序都在使用针对活动窗口的选项卡,包括微软 Office 及 Adobe 等专有软件,Notepad++及 GIMP 等自由开源软件,外加 3D 设计、视频编辑器、十六进制编辑器等等。总之,这一切都是当时最标准、最合乎逻辑的设计思路。


之后谷歌决定把选项卡设定为 Chrome 浏览器中的核心标准,但这款浏览器其实主要是为移动设备、而非台式机所设计。这套方案在智能手机上确有意义,毕竟这里没有完整的桌面式菜单布局空间。但在台式机上,整个体系就显得很反直觉,而且破坏了其他程序的操作流程。


台式机代码与手机不同,因此 Firefox 其实没理由要把这种强调移动端的 UI 强行推广给台式机用户。面对高达 400 万行的代码库,Firefox 当时针对其中两行代码给出的“原方案太难维护”的理由纯粹是在侮辱用户的智商——代码又不是草坪,几个礼拜不管也不会变黄。


面对用户如海浪被涌来的投诉,一位不愿透露姓名的主要开发者给出的回应是,“我们有几亿用户,5000 人的不满并不能代表大多数使用者。”但他们没有意识到,人们在抱怨中流露出了这样的意见——如果我想让自己的浏览器看起来像 Chrome,那我就直接用 Chrome 了。没错,他们也确实这么做了。

不断删除“没人使用”的功能

Firefox 做出的每项变更都遵循着相同的模式——修改掉默认功能,但却没有任何菜单设置供用户执行恢复。接下来,把菜单设置删除掉,用户只能通过 about:config 执行变量。之后是删除 about:config 选项。用户群体的每一次抗议得到的都是相同的回应:“你只是极少数,大多数人喜欢这种变化。


而且每轮调整都会赶走更多用户,没人愿意再度遭受 Mozilla 工作人员傲慢、居高临下的态度给自己留下的“心理创伤”——所以,他们永远也不会回来。认真关注用户数量,大家可以发现每次删除之后 Firefox 的份额都有明显下降,只有在第三方加载项或 CSS 恢复变更方案出现后才会稳定下来。年复一年、周而复始,Mozilla 显然没有吸取任何教训。


好像是觉得删除设置还不过瘾,Firefox 又继续对插件和主题进行中立化处理,强制集中签名并最终弃用了 XUL,而且根本不给能够补充这些丢失功能的 webextension api。


面对这些变化,我再次与之前那位主要开发者交谈,他的回答是“大家不用 Firefox,就是因为这里的插件太多了。我们的遥测结果显示,80%的用户从未安装过任何插件。”但问题在于,任何懂点技术的人都会优行关闭遥测功能,他们不希望浏览器监视自己的行踪,所以这种调查结果明显就不靠谱。


即使是在 UI 设计中做出的一项重大举措——拖放式可定制 Australis 界面,也因为糟糕的默认布局和 CSS 选项太少而没能得到用户们的肯定。可怕的倾斜选项卡(直接抄袭自 Chrome)也是 Mozilla 唯一亲口承认没能做好的 UI 变动。更让人意外的是,就连 Chrome 自己后来都取消了这项功能,Firefox 却一路坚持到底。


直到今天,Mozilla 仍声称自己非常重视用户的意见。但 12 年过去,他们的态度冷漠依旧,糟糕的「默认 Proton UI」则是强迫用户的最新手段。(如果大家觉得我的判断有失偏颇,请在 Google 上输入「Firefox Proton」看看其他用户是怎么评价的。)虽然这方面问题可以通过 userCHrome.css 得到很大程度修复,但我已经厌倦了这种一有更新就得修复一番的感受。

糟糕的编码范式

Mozilla 的源代码也是噩梦一场。例如,默认配置文件位置被定义了 3 次,使用的是 3 种不同语言的不同变量,其中之一还是由不同文件当中多个变量组合而成的。其中有一个全局变量,要通过 6 个不同的文件共同定义。


编译后、下载历史、访问过的页面、书签等等,都被一股脑塞进了混淆文件当中。最终结果是,我们只能从历史记录中一个个删除这些条目。要是能把它们放在同一个独立的文本文件中,不是几秒钟就能清理完吗?为什么非要这么搞?想要更改图标外观,或者为自定义搜索添加新图标?这些 PNG 图像也被混淆并保存在 omni.ja 文件当中。


我觉得但凡脑回路正常的开发者,都会支持用指定的编辑器在几秒内完成变更。但 Mozilla 偏偏要求用户安装并学习 Eclipse 之类的大型编辑工具,并在每次变更时重新编译文件。问题实在太多了,这里不再赘述。


难怪 Mozilla 的编码人员在查找和修复 bug 方面表现得如此步履维艰,他们自己造就了更糟糕的编码范式、迫使他们为了修复 bug 而记录下所有内容。恶性循环就此展开。

内存管理不善

如果某个程序待在那里什么都不做,它的内存使用量应该不会改变。看看我的内存管理器,里面有 40 个进程都遵循着这样的原则。但有个程序在什么都不做时仍在不断读写磁盘,猜猜它是谁?


没错,就是 Firefox。


它运行着 13 个进程,而且每个进程都在不断活动。我有 40 年的编程经验,其中 30 年面向 PC 平台,所以我多少还算懂计算机工作原理。这类问题只能归结于糟糕的底层设计,任何流于表面的修复都治愈不了这么深的病根。


代码范式也成为 Firefox 性能糟糕的根源,他们也压根不打算解决。我敢打赌,性能也是 FirefoxOS 遭遇失败的一大原因。FirefoxOS 的想法很好,但差劲的执行与编码实践带来了太多 bug,导致成品根本无法使用。

一边说“我们重视您的隐私”,一边大肆侵犯用户隐私

遥测。即使点击“禁用遥测”也无法禁用隐藏遥测。此功能会先运行 ping、再强制进行插件签名,还有无法关闭的自动更新会每 10 分钟再 ping 一次。我们甚至得单独做出明确选择才能退出“实验”项目。


现在 Firefox 最新的“花样”是要求用户必须使用双因素验证登录至 Firefox 插件账户,才能制作自定义主题。但如果不是强制推广插件签名,本来不需要这么麻烦的。


总之,Mozilla 对用户隐私丝毫没有尊重,正如对我们的反馈意见丝毫没有被尊重一样。

写在最后

不愿承认错误、不愿听取不同意见的组织或个人必然会停滞不前、慢慢腐朽。Mozilla 的决策者们似乎就是这样,所以我对 Firefox 的未来也不抱太大希望。希望 Mozilla 中能有人从过去的错误中吸取教训,克服顽疾、走向复兴。毕竟一款产品的成功来自为用户提供他们想要的、而不是告诉他们应该要什么,盲目复制竞争对手只会让自己迷失方向。


原文链接:

《Here’s Why Firefox is Seeing a Continuous Decline for Last 12 Years》

2021 年 9 月 13 日 16:241

评论

发布
暂无评论
发现更多内容

第三周总结

Geek_ac4080

第三周作业

Geek_ac4080

看动画学算法之:linkedList

程序那些事

数据结构和算法 看动画学算法 看动画学数据结构 算法和数据结构

各角色如何从DevOps中受益?

禅道项目管理

DevOps 产品经理 测试 开发 运维工程师

~~寒露节记~~

wo是一棵草

国庆期间,我造了台计算机

yes

计算机 底层

Python时间序列分析简介(2)

计算机与AI

Python 时间序列

架构师训练营第一期 - 第四周课后 - 作业一

极客大学架构师训练营

基于区块链技术实现“资产通证化”

CECBC区块链专委会

资产证券化 流动性

线上服务平均响应时间太长,怎么排查?

小Q

Java 程序员 测试 Jmeter 性能调优

架构师训练营 第三周作业

haha

极客大学架构师训练营

第四周

Geek_fabd84

如何使用 dotTrace 来诊断 netcore 应用的性能问题

newbe36524

微服务 .net core netcore ASP.NET Core

关于代码审查的一点体会

KJ Meng

敏捷开发 研发管理 代码审查 Code Review

节日快乐…吗?

小天同学

个人感悟 国庆中秋 假期 节日

MySQL-技术专题-问题分析

李浩宇/Alex

SpringBoot-技术专题-启动原理

李浩宇/Alex

手把手教你锤面试官 03——Spring怎么那么简单

慵懒的土拨鼠

如果朋友圈没有点赞功能,你还会发朋友圈吗

彭宏豪95

微信 产品 互联网 写作

Python时间序列分析简介(1)

计算机与AI

Python pandas 数据处理 时间序列

架构师训练营第三周:系统架构

m

这可能是GitHub上最适合计算机专业学生看的编程教程

小Q

Java 学习 编程 面试 基础

Nginx 整合 FastDFS 实现文件服务器

哈喽沃德先生

nginx 文件系统 分布式文件存储 fastdfs 文件服务器

MySQL-技术专题-主从复制原理

李浩宇/Alex

架构师训练营1期第三周作业

木头发芽

字节跳动 Flink 单点恢复功能实践

Apache Flink

flink

私有云PAAS平台的思考

8小时

区块链技术最重要价值所在

CECBC区块链专委会

区块链 数字经济 经济

「剑指offer」27道Mybatis面试题含解析

Java架构师迁哥

开源的意义与价值

Braisdom

Java 开源 ORM

JavaScript 语言通识 — 重学 JavaScript

三钻

Java 前端进阶

这个曾领先于谷歌和微软的开源项目,为何盛极而衰?-InfoQ