面向用户的软件应该服务于用户的需求,而不是服务于拥有几乎无限资源的大公司的需求。
分叉是确保软件保留用户的重要部分。当维护人员不能服务于用户需求时,分叉可以让用户解决这种情况。
对Xfre86领导地位的不满导致了X.org分支。分裂是由许可证引发的,但有对缓慢的进展速度和封闭的领导风格的不满。这个分叉将X11拖出了20世纪80年代,带来了动态可重新配置的多头、组合桌面和工作硬件加速--所有这些都在前几个版本中缩减了超过10,000行的代码库。
对GCC发展缓慢的不满导致了EGCS的分叉。EGCS为当代处理器添加了许多优化,改进了对C++的支持,增加了更多的前置功能,并对某些方面进行了总体改进。这个叉子非常成功,以至于原来的GCC停止了开发。东车更名为GCC,取代了原来的叉子。
还有许多其他成功分叉的例子。许多都是以前的Sun项目,它们是在甲骨文夺取所有权之后分叉出来的。
但是要使分叉成为可能,项目必须足够简单才能实现分叉。更好的是,它们需要足够简单,以便多个可选实现可以共存,所有实现都独立增长并服务于不同的环境。
复杂性会形成障碍。这些障碍可以通过增加维护分叉所需的资源来排挤替代实现。它们使社区更难形成,并为用户提供替代方案。
最重要的是,如果维护成本很高,就需要资金来源。这意味着要么是收入流,要么是希望从投资中获得回报的投资者,货币化变得必要。
这会导致反馈循环。那些没有赚大钱的实施者退出了。那些仍然站着的人增加了他们的市场份额。他们受益于复杂性的增加和随之而来的障碍。因为选择较少,他们可以进一步收紧螺丝以增加收入,这增加了他们为复杂性提供资金的能力。这可能会将实力较弱的参与者赶出市场,这样的循环就会重复。
其结果是,只有一小部分资金充足的实现幸存下来,它们都试图实现利润最大化。没有人能够维护可行的分叉,实现的所有者可以设定方向,用户被拖着走。
在这一点上,你们中的一些人肯定在考虑浏览器。浏览器只是一个警示故事。MANIFEST V3正在被强行通过,阻碍了广告拦截程序。如果用户有地方可去,这一改变将更难坚持下去。但选择的是Chrome、Firefox和Safari.前两个是由谷歌广告资助的。
但是由复杂性引起的问题并不局限于浏览器。网络协议、部署工具、操作系统、初始化系统和文件格式都有风险。随着复杂性的增加,拥有我们软件的能力会降低。
对于健康的生态系统来说,开放标准是不够的。这两种标准及其实现都需要足够简单,以便于派生和维护。