工具
精华
|
战斗力 鹅
|
回帖 0
注册时间 2023-3-31
|
开源软件是个很复杂的问题,我从注册 GitHub 帐号到现在在开源圈打酱油得有十一年整了,一些观察写下来,东西很多,组织得可能比较乱。
开源软件能做起来有一个大前提,就是大多数的技术之所以看上去牛逼,主要是因为 marketing 吹得牛逼,它们核心的 idea 往往很简单,业内的人多少都会透过 marketing 猜测具体实现方式。
这个在一定程度上可以视为组织上的草台论在技术领域的扩展。但是东西简单不代表谁都能做,首先简单是说告诉你了之后很简单,让你自己想你不一定想得出来,其次核心算法变成产品,需要大量的外围工作,包括额外的功能、性能优化、测试、对各种乱七八糟场景的适配等等。
一个例子是这两天韩国人搞的“室温超导”,当然这个 99% 是假的,不过科学史上类似的事情不少,比如什么苯环,石墨烯之类的:一个问题大家都不知道怎么解决,但是突然有一天就有人用很简单的方法解决了,搞出来之前都觉得是什么牛逼的问题,搞出来之后草原来就这。然后一个科学发现到最后应用到产品中,还有很长的路要走。
总体来说开源软件,或者说刻板印象中“为爱发电”的开源软件,在以上方面是不如商业软件的。比如 mp.weixin.qq.com/s/fRFWFOPIZPu-9Forg3HDow 红帽:我们为什么要改变RHEL源码的发布策略? 这篇蓝帽子的广告文明确表示,蓝帽子的商业价值很大一部分来源于做 backport、兼容性、技术支持、安全验证等外围工作,这些工作在技术上往往不那么 interesting,开源社区很难有人会免费做,但是现实中有很大的需求。通俗地说就是钱难赚屎难吃。Linux 桌面的故事更加说明开源软件在外围工作上不如,甚至是远远不如商业软件。商业软件的重要客户来了需求你是必须要做的,“it works on my machine“不是一个可被接受的理由,大公司养着专门的性能优化团队,每个季度都有一定的 KPI ... 这些都不是为爱发电的开源软件能比的。
在提出新的 idea 方面,开源软件表现得稍微好一点,因为创造性最终来源于个人。但是就算如此,在大公司中掌握资源的个人也比孑然一身的个人更有优势。因为很多 idea 没有真正实验过就没有意义,而实现一个 idea 往往需要一定的资源。最直接的情况,比如一个领域中最聪明的头脑往往本来就集中在顶级机构中,他们的创新也往往最先应用到相关的产品中。而且很多东西本来就是在解决实际问题中蹦出来的,被 KPI 逼出来的。
开源软件有一点表现得不错,就是对一个已有的 idea,做一个 working 的实现——因为 idea 是现成的,本身也并不复杂,这个也不需要做太多外围工作。看上去是 trivial 的一个事情,但是往往很关键,因为 有 比 没 有 好。只要有人做了一个能用的基础,就有可能形成社区加速开发。虽然更大可能最后维持在一个不温不火的状态,不过在条件合适时有可能做到很强。最成功的开源软件之一 Linux 就是典型,Linux kernel 本来是 Linus 本科看了圣诞树先生的书写的玩具项目,当时他绝对没想到会变成现在的巨无霸。(但是我对那段时间的历史了解还是有限,我知道 UNIX 被商业化,BSD 在打官司,GNU 在摸鱼,不知道当时有没有其他竞品,所以我暂时无法解释为什么*偏偏*是 Linux 火了起来)
Linus 本人确实也很有开源特色,"
Testing? TESTING? Why do you think I do open source? I like the programming part. I even like the debugging part. But testing - that's what users are for. No?" 这是他仅一个月前发在 LKML 的暴论。这就要谈到另一个对开源软件的刻板印象了,就是只有”贡献代码“才算贡献。实际上帮助写文档、分析 bug、做翻译、做测试都是贡献。不要小看测试,有些比较特殊的项目(操作系统内核中的某些模块就算)需要特定的硬件,连测试环境都难搞。有些项目测试流程比较复杂,比如做闭源软件的插件,你得先开软件再载入你的项目,很麻烦的。有人报了个 bug 给你,但是测试数据超级大,跑一遍一个小时,根本没法 debug,想办法减小测试数据,定位到问题所在,也是很重要的工作。这些不仅开源软件,商业软件也适用,只不过开源软件的环境才允许人光明正大地说”testing - that's what users are for“罢了,微软实际就在这么干,但是人家绝对不会这么说。
以上所提到的”开源软件“大多数指”刻板印象中‘为爱发电’的开源软件“。然而开源软件不只有这一种形式,开源软件还有绕不过的一个话题就是它和商业的关系。
很多开源软件实际上直接或间接地来源于商业软件和闭源软件,形式也五花八门。比如:
* LibreOffice 是 OpenOffice.org 的 fork,而 OpenOffice.org 来自于 Sun 买了 Star Division 的 StarOffice 之后开源出的代码(IBM 曾经 fork 过 OpenOffice.org 出了商业产品打上 Lotus 的标,后来不做了代码贡献给 OpenOffice.org)。
* Eclipse IDE 来自于 IBM 的项目。Eclipse 的部分核心开发者后来去做了 VSCode。IDE 界另一巨头 JetBrains 本来就是半开源的。
* 现在 C++ 最流行的 build system CMake,开发者是做图像和可视化软件的 Kitware,CMake 最开始是他们用来构建自己项目写的内部工具。
* 跨平台 GUI 库 Qt,最开始也是为了做某个应用软件造的轮子。
* 最早的现代文件系统 ZFS,来自于 Solaris。(另外给 Mac 做 NTFS 驱动的 Paragon,前两年把驱动代码扔给了 Linux。Linux 原来也有 NTFS 驱动,不过效果并不理想,我现在已经不在 Linux 上用 NTFS 了,不知道 Paragon 做得怎样)
* 苹果生态底层用的动态跟踪框架 DTrace,同样来自于 Solaris。(这东西 Linux 上也能用,但是最近风头被 eBPF 盖过去了)
* 思科买来的 ChezScheme,IE 以前用的 ChakraCore,不想做了,扔出来开源了。
* 老得要命的 MS-DOS,Photoshop 1.0,命令与征服1,源码也扔出来了,突出一个情怀,诶,就是玩儿。
* .NET 很早就内有 SSCLI,外有 Mono,后来自己也开源了。
* OpenWrt 等一干路由器固件,来自于 Linksys 草台在 WRT54G 用了 Linux 但是不想遵守 GPL 规定,被人翻出来之后被迫开源。结果大家都知道路由器是怎么玩的了。
* Netscape 被 IE 打败,Netscape 的代码则秽土转生为 Firefox。现在 IE 先是换了皮叫 Edge,又是换了 Chromium 的肉。而 Firefox 还勉强苟着(虽然也是个忒修斯之船)。Firefox 里面现在还留着关于这段历史的彩蛋。
* 现在浏览器霸主 Chromium 直接来自于苹果的 WebKit,WebKit 一开始是”拿“了 KDE 项目的 KHTML 和 KJS。当然这俩忒修斯之船程度可能比 Firefox 严重十倍甚至九倍(我现在严重怀疑 KHTML 和 KJS 这俩货当时就属于”勉强 working 的实现“的级别)
* Flash(就是那个 Flash)里面的 ActionScript VM 代码被 Adobe 开源给了 Mozilla,Mozilla 拿来做了 Firefox 里面 JS 引擎的部分模块。所以某种意义上 Flash 依然活着 ...(虽然不知道现在还有没有在用,各家 JS 引擎都是在迭代的)
* 顶尖的游戏引擎 Unreal,本来只有 UDK 给爱好者用用,后来干脆开放源码(注意 Unreal 的 license 不是 OSS license,因此不是严格的”开源“,只是 shared-source)。另一个曾经名噪一时的竞品 CryEngine 混的不太好,命运多舛,最后新版本也成了 shared-source,而老版本竟然转生为 Linux 基金会旗下项目 Open 3D Engine。
* 曾经拿来黑 N 卡的物理引擎 PhysX,后来部分开源了。
* 目前最流行的编译器框架 LLVM,一开始是 UIUC 的研究生做的项目,苹果正好需要一个代替 GCC 的 Objective-C 编译器,就相中了这玩意并把他请来组建团队开发。积累了一批人用到后来 Swift 设计新的语言并把实现开源。
* 而 LLVM 之前编译器圈最火的仔 Open64,来自于 SGI 开源的 MIPSPro 代码。
这还不算现在到处爬的商业公司开发一开始就开源的项目。
就连 V8 等一干 JIT 编译器的老爹,牛逼哄哄的 Java HotSpot VM,一开始也是闭源的。
需要注意的是虽然上面有些开源软件有闭源软件的原型,但不代表现在的软件还是原来的那样。项目在开源之后可能开发者已经换了若干批了,开发活动活跃的话可能代码库经过了大量的重写和增补。列这么多,主要还是图一乐。
最典型的是楼主提到的 Blender,这货现在不仅仅是能用且活着,并且活得越来越好。这东西本来是尼德兰一个工作室的做的内部工具,工作室做得貌似还不错,但是应该是因为内部不和解散了,原开发者另开了家公司就卖这个软件,结果这个软件公司反而倒闭了。开发者思路清奇,搞了个”免费 Blender“的众筹,成立个基金会然后把 Blender 的版权买回来然后开源,结果 TM 还真让他搞成了。Blender 基金会到现在还在尼德兰(欧洲程序员工资本来就不算高,所以大概拿的钱还比较正常?)。
Blender 感觉很长时间一直不温不火,不知道为什么前两年貌似突然火起来了( 官网的数据各种不完善凑合看吧 https://www.blender.org/news/blender-by-the-numbers-2020 )。在 Blender 高速增长的这两年里面,微软、苹果、FB、AMD、NVIDIA、Adobe 等大公司甚至尼玛的阿迪达斯都开始为 Blender 基金会提供赞助(我也不知道大众跟这玩意有个鸟关系 ...)。
当然,挂一个名很便宜,也就几千上万刀的事情(有些好像挂了两年就不挂了)。这里面真明确可查谈得上下本的大概就是 EPIC,Blender 基金会的报告里 EPIC 是单列的,有时一家的给的比好几家加起来还多。o宇宙什么的我不懂,不过 EPIC 的战略,很重要的一点应该就是用尽各种手段扩张 Unreal 的市场,从开源 Unreal,到收购 Agog Labs,Quixel,RAD Game Tools,ArtStation,然后做 EGS,EOS,EGP,跟苹果打官司,暗线是打通 gamedev 以及o宇宙内容创作的全链路,把更多的人卷进来,然后自己靠 Unreal/EGS 收税(EGS 很能说明问题,EPIC 一直是站在开发者视角)。而如果内容创作的关键节点 DCC 套件被自动麻将桌这样昂贵的专有软件卡脖子,那这就是完全的死局。所以这么看赞助 Blender 应该是 EPIC 这盘大棋里面微小但关键的一步。不得不说 Tim Sweeney 这套商法比起各种”高端商战“X来X去简直是人间之鉴。
想要搞事的不仅仅 EPIC 一家,Adobe 传统上主要做 2D 的东西,但是近年对 3D DCC 市场也是虎视眈眈,虽然 PS 的 3D 功能貌似是被砍了,不过 Adobe 收购了 Allegorithmic,发布了 Dimension,并利用这些产品猥琐发育。不确定 Adobe 是不是会做全功能套件,但是 anyway,一个可能的逻辑是他们认为如果 Blender 能做起来,用户不需要为套件付费,就能把钱转来买自家的东西,不然用户那点钱全被自动麻将桌吸走了他怎么混 ...
NVIDIA 虽然今年主要看点是 AI 以及拉得不能再拉的 40 系中低端,不过每次出来都要提一嘴他们的 Omniverse 生态。Omniverse 也是同时面向个人和机构。另外,游戏的硬件需求是开发时专门阉割过的,除非非要跑 8k 或者 2077 path-tracing 这种,主流卡基本够用。但是 DCC 的硬件需求是无限的,并且高性能的 GPU(尤其是硬件 RT 性能好的)对 DCC 使用体验提升挺大的。作为用户,把钱花在显卡上比给自动麻将桌更划算,NVIDIA 大概也更希望你这么做。
育碧、网易等明显应该是自动麻将桌的带客户,每年上供的钱应该不少,这些钱投入 Blender 的开发,然后免费用,长远来看比给自动麻将桌的股东更划算。
这么盘下来发现,除了自动麻将桌自己之外,所有人都是它的敌人 ...
Blender 最近两年还在做 Blender Benchmark,这东西在 PC 硬件评测的地位也是直追 Cinebench(Cinebench 背后的公司 MAXON,我感觉正在慢慢崛起为自动麻将桌和 The Foundry 之后的重要玩家,自家有 C4D,最近收购了 Redshift 和 Pixologic)
顺便,Blender 和 LLVM 等项目之前一直用的 Code Review 工具 Phabricator,一开始也是 FB 的内部工具,后来开源,原开发者出来自己做了一个公司(前两年倒闭了)。
这些大多还只是表面的东西,Blender 其实并不只 Blender 自己的人在开发。Blender 使用了大量开源库,软件之间有相互依赖很正常,但是 Blender 使用的某些库很有趣。
Blender 基金会是 Academy Software Foundation (ASWF) 的成员,这个组织的目的是推进业界的开源软件*基础*,注意不是全都用开源软件,这并不现实,是基础软件使用开源软件。”基础软件“可以参考 Visual Effects Society 的 Technology Committee 推出的 VFX Reference Platform,它的目的是统一 VFX 业界常用开源软件的环境。这里有个很有意思的问题,都说 Linux 是程序员系统,但是 VFX Reference Platform 一开始只有 Linux 的环境,这倒是正常,毕竟 Linux 的环境问题出了名的蛋疼,但是他们还指出”Linux is prevalent in VFX, particularly in the larger studios where they build sophisticated automation pipelines that integrate multiple different software vendors’ products together.",说明大概业界有很多人用 Linux,不过同一个页面还写着“We also hope that by making it simpler for vendors to support Linux we will see more applications available on Linux in the future.“,说明大概 Linux 环境是有些问题。毕竟常用软件基本是二分的,Maya、The Foundry 全家,Mudbox,XSI(如果还活着的话)基本是 Windows、Mac(个别不支持),Linux 都支持,Adobe 全家,ZBrush,C4D 是只支持 Mac 和 Windows,然后剩一个主要做厕所瓷砖的 3ds Max 只支持 Windows。(Blender 在 VFX 行业用得还很少,所以不算)
ASWF 旗下一个很有代表性的项目是 OpenVDB,提供流体的基础库,是 DreamWorks 开源的。使用 OpenVDB 的软件也是一拉一大串,Blender 由于咖位不够压根排不上号。
DreamWorks 今年还刚刚开源了驯龙高手3等动画使用的 MoonRay 渲染器。
类似项目还有由 SPI(索尼)开源的负责颜色管理的 OpenColorIO,ILM 开源的处理 EXR(大概类似于 RAW?)格式的 OpenEXR,SPI 开源的程序贴图 DSL OSL,ILM 开源的规范材质格式的 MaterialX,以及抽象各种图像格式的 OpenImageIO(这个比较奇葩,原作者在 Pixar 写了一遍,后来去 NVIDIA 又写了一遍类似的东西,但是 NVIDIA 不想开源,他就自己出来又重写了一遍)
这些是 ASWF 下面的,还有不归 ASWF 管的。包括 Pixar 的 OpenSubdiv,ILM 的 Alembic,Khronos 的 Collada,Intel 的 TBB,Embree 和 OpenImageDenoise,OpenPGL。Blender 能有今天也少不了它们。
部分项目的贡献者会出现自动麻将桌的名字,四舍五入相当于自动麻将桌给 Blender 做贡献。
顺便,这些项目的介绍有些会出现”Academy Award-winning“,因为奥斯卡有一个不太受人关注的 Sci-Tech 奖,授予为电影制作技术做出杰出贡献的人。
以上提到的项目高频率地出现了一个模式,就是公司在完成业务范围内的工作时会造轮子,这些轮子最后可能会成为开源软件。毕竟我造家具的,我开源一个好用的锤子碍不着我卖家具。当然也不是所有的锤子都会开源,比如 DreamWorks 开源了 MoonRay,但是 Pixar 的 RenderMan RIS 到现在还是闭源但免费用。这些副产品有时会比产品本身有意思,Weta 当年做指环王,就搞出一个模拟大规模军队的轮子 MASSIVE,然后单独搞了个公司,复联还在用这货,然后还搞出了 Mudbox 给了自动麻将桌。自动麻将桌后来收购过来的 Arnold,早期则是和 SPI 一起搞的。达索造飞机,造出个 CATIA。
说起 CATIA 就正好说到一些开源很难做到的事情。其实大概无非还是开头那两点,没有足够多的优秀的人,没人愿意做 shitwork。
CATIA、SolidWorks 这类 CAD 软件和 Blender 这种 DCC 在底层技术上有非常明确的分野,Blender 的建模是 polygon/subdivision surface 模型,而 CAD 是 NURBS(相关技术名词和细分领域很多,暂时用 NURBS 来统称)。Polygon 建模比较方便,但是只适合于看个乐的娱乐和可视化领域还有 3D 打印玩玩,真造东西需要更精确的 NURBS。CAD 软件中包含这些关键 NURBS 数据结构和算法的部分,和浏览器以及 OS 一样,叫做 kernel,不过以我一个行外人的观瞻,这个 modeling kernel 可能比浏览器和 OS 的 kernel 难搞十倍不止。
世界上算上各种玩具项目,内部项目,各种大大小小的 OS kernel 怕是不止 114514 个,而浏览器内核之所以被垄断主要还是因为标准太复杂卷得又太厉害,能砸钱还是能搞的。这些大多数其实都在 CS 主要课程 cover 的范围之内,并且都有开源的代码参考。Polygon 和一般 gamedev 之类的技术是相通的——polygon 简单处理一下就是游戏喂给显卡的 triangle,相对比较简单。而 NURBS 涉及到较多的数学,同时还需要一定的工程能力(其中一些比较基础的问题还是没有解析解的 bbs.saraba1st.com/2b/forum.php?mod=viewthread&tid=2145660&extra=page%3D1&mobile=2 原来飞机为啥能飞还是未解之谜啊啊?)。CAD 这边一般认为第一个 kernel 是 70 年代末由剑桥的 Ian Braid 等一组人开发的 Romulus(精 ... 精罗?),他们后来也是自己搞了公司,被转手若干次卖到了西门子手上。不过 Romulus 早就淘汰了,这帮人在此期间开发了 ACIS 和 Parasolid。自动麻将桌从 ACIS fork 出了 ShapeManager,现在 AutoCAD,Fusion 360 和 Inventor 都在用。西门子自然是用 Parasolid,达索自己搞了一个 CGM,据说也是跟 ACIS 有关系。也就是说剑桥那帮人的东西一直忒修斯之船到现在还是半壁江山。毛子自己搞了两个内核,不过毛子和法国这种本来就数学爆强(贝塞尔曲线的贝塞尔就是雷诺的人),折腾出啥都不奇怪。东大有几个公司貌似从外面买了若干小内核过来做。这些 kernel 有些压根不对外开放,有些你可以花钱买授权。
这还只是一部分,还有 constraint solver 之类一堆乱七八糟的东西。这块有兴趣可以看看 Bézier Award。
那么这么牛逼的领域,开源表现如何呢?
这么说吧,开源连靠谱的 polygon 代码都难找 ...
不过,机会还是有的,因为和 Blender 类似的故事在 NURBS 这边也表演了一次。这次是一个法国大公司 Matra 开发了一个 CAD 软件,也是没几年就不做了,卖给了达索。不过他们的 kernel 给开源了,叫 OpenCascade。然后搞了一个公司也叫 OpenCascade 提供商业服务,维护这个 kernel。后来 OpenCascade 社区的一个人基于它做了 FreeCAD。OpenCascade 开源的比 Blender 还早几年,FreeCAD 和 Blender 差不多时间开始,但是两者后续发展明显和 Blender 差距巨大——尽管 OpenCascade 到现在一直是唯一一个功能较完善的开源 kernel,而 FreeCAD 也是唯一一个凑合能用(?)的开源 CAD。OpenCascade 现在大概也就是一些有定制需求不想花钱的公司,还有做相关方面研究的人在用。原因嘛,我个人猜测首先 OpenCascade 这玩意就不咋好用(当然行外人主要是道听途说哈),比如最近两年刮起了一阵在 gamedev 和概念设计等非 NURBS 传统的领域用 NURBS 部分代替 polygon 的风气,并出现了 MoI、Plasticity 等一些试图将 CAD 工具改造适合娱乐行业美工使用的软件,主要是 polygon 也有其局限性,NURBS 在做形状规则凹凸细节多的硬表面模型时有优势,但是这些新的软件基本都是使用的商业 kernel,没有用 OpenCascade 的。其实这种风气的出现本身就是思想开放的一种体现,那思想都这么开放了,为啥开发者宁愿花钱买 kernel,也不愿意用免费开源的 OpenCascade 呢?肯定有原因的嘛。另外还有 OpenCascade 是以公司形式运作的,有盈利需求,商业考量可能会影响开源社区的工作。最后不排除这货本身功能和性能指标相对于新一代商业 kernel 早已经过时了。
不过我觉得最根本的,还是这行门槛高,没前途,能做的人少。并且一个真正能投入到生产中的软件需要考虑上下游生态的支持,一个本来就冷门的东西用的人会越来越少(Blender 有同样的问题,不过依赖 ASWF 的开放生态并且飞轮已经转起来了会越来越好),这些都超出开源软件所擅长的”简单的核心技术“的范围了。
这表现了开源世界另一个明显的规律,就是开源的普及度与领域高度相关。一般来说,程序员多的领域开源的东西数量多,比例高。最典型的就是 meta 领域 - 就是程序员自己用的工具(以及看上去跟它们没啥关系但各种边边角角需要依赖的东西),另外,在开源爆发后处于风口浪尖或曾经处于风口浪尖的 Web 开发、移动开发、以及 AI 等,这几个共同构成了目前开源世界的中心(桌面开发明显就要差一节)。如果你只看这几个你会觉得开源的大厦就差最后一层了,但是如果从井里跳出来看看,外围的领域虽然开源越来越多,但目前总体来说还是一个比一个荒废的状况。
另外,你可以找到一千个开源的可商用的 Web 框架,但是很难找到一百个开源的完整商用 Web 项目。大多数商业项目的主要商业价值往往并不是技术层面的,自然就不在开源的范畴之内。
有人提到模拟器,这涉及到开源另一个薄弱的领域。现在几乎所有主流编程语言都有主流的开源实现,其中一些知名项目如 GCC,HotSpot,V8 都是顶尖级别的,但是在反面,即反编译和架构之间转译等方面并没能达到类似的高度,毕竟开源的闭环里面没有这些东西的位置。
Gamedev 领域的生态则非常奇怪,一边 Unreal 把源码发出来了,完全开源的 Godot 光看吹的牛逼俨然要成为 gamedev 的 Blender,但是实际上没几个人真用 Godot,生态最活跃的是方便入门的闭源引擎 Unity 衍生出的开源生态。而且虽然看上去 Blender 有很多人玩,开源社区也有很多人写代码,但是这两群人明显玩不到一块去——所谓开源游戏的美工普遍十分捉鸡。关于成品游戏的开源要写又要一大坨,简单说结论就是游戏这个东西大多数情况玩法设计和美工之类的一般都比技术重要(尤其独游非 3A 游戏),目前体现不出太多开源对玩家的直接好处。而且现在一堆 Unity 独游,不开源也有 mod 社区整的 Harmony hook 满天飞。开源游戏最活跃的其实是老游戏的逆向工程,基本是老游戏粉丝群体业余活动产物,这同样集中体现出了开源社区在非技术方面能力的缺失。而且 Blender 弄个猴子和开发一个完整的独立游戏完全不是一个等级的工作量,能做完的基本直接上 Steam 了。
开源硬件,这块有个好处是做开源软件的那帮人会有一部分自然溢出到开源硬件领域,但是需要三次元的一些成本技能,有一定门槛,并且很多工具也都是闭源的。感觉人不少,开源不多。
还有,上面又是 Linux 又是 Blender 的,需要警惕统计学意义上讲这些基本都是个例,绝大多数开源软件,就算只算用户量较大的那些,没有商业背景的话活得没那么滋润。也有些明星项目,圈外不太有名的也能拉到比较可观的赞助,OpenSSL 那段时间还小小地刷了一波存在感,还有比如 Dear ImGui,现在在 gamedev 用得很多,也拉到了一些公司赞助,Redis 作者 antirez 的故事 https://blog.brachiosoft.com/posts/redis 也很值得一读。但是你要是以为你自己去搞,干起来既有意思又有钱赚,那大概想多了。
我感觉开源这个事情和 IT 这个行业本身的特性分不开,能吃到资本的一些边角料,但是同时头部效应很明显。背后的问题很大程度上是开源用户的经济基础,大家都紧着过日子,支持个别项目可以,但是现在开源遍地开花,随便就能用上一堆,支持一堆项目做不到。顶尖的开源人大概跟 YouTuber 差不多,但是一般的开源人真还不如给陈睿打工。另一方面做开源把自己做破产的也是少数(至少 ChatGPT 之前能做出一定水平开源项目的是不愁工作的,而只能开源些垃圾项目的人搞不搞开源其实都没啥意义)。
倒是有一些比较奇葩的故事,比如 vim 把用户的捐款转给乌干达儿童。还有狠人 Phil Zimmermann,为了对付西大的监控开发了加密软件 PGP 开源,结果西大告他违反出口管制,他就钻法律空子把源码印在书上出版,一折腾就火了。
BTW,陈皓,至少在约十年之前的看法与本回复立论有一些相悖的地方,他认为闭源软件的”技术含量“比开源大得多,详见
https://zhihu.com/question/24616693/answer/28430044 如何看待陈皓在微博上对闭源和开源软件的评论? - 陈皓的回答 - 知乎
其对”闭源软件“”开源软件“和”技术含量“的限定和定义大概和我有些不同。他作为一个商业软件开发者,觉得屎山也算”技术含量“的一部分,我则觉得十分有必要普及”技术草台论“。而且该言论后面的”大多数开源软件都在抄闭源的商用软件“和我的意思倒大概一样的,我上面写了这么一大段都在讲开源和商业之间的事情。陈皓这个话主要一个是没有展开细说这一块,他也举了一堆例子,但没有指出有些开源软件不仅仅是抄闭源软件的 idea,甚至连代码都是来自于闭源软件的,这种项目想不抄都不行啊,人家就是要硬塞给你抄的。开源和商业的关系也不是他简单说的二分,牛逼的项目最重要的不是它不是开源的,而是有没有牛逼的人,大公司养牛逼的人做牛逼的项目开源出来,既开源又有商业性质,这种模式早就很成熟了。
另外,陈皓的话里是有一定的逻辑不一致的,他认为商业利益会让商业实体选择闭源,从而推出闭源永远赢开源。但是他无视了他自己旁边说的商业利益同样会驱使商业实体选择开源的现象。比如你是个小公司,你做的东西大公司已经有了类似的开源项目,你可以做出一定的差异化,但是在大公司的资源面前竞争优势不明显,这时开源哪怕并没有多少人来贡献,就是为了在开源这一点上不落后也是有必要做的——就好像现在要搞什么 ESG,要不带充电头,哪怕是象征性地念经也要做做样子。也就是说开源这个事情也会内卷,我上面说的开源的四大支柱领域,很大程度上也是这么卷出来的,其他领域之所以不兴开源,一个是因为各种客观条件限制,另一个就是还没有卷起来。
Unity,NVIDIA,EPIC 这些公司,不管本身做的东西开不开源,他们会花大量的资源培养开源生态,这同样是商业利益,把生态做好就是把客户留住,而在做生态的过程中自己的东西自然会变得越来越开放。BitKeeper 早不开源,结果被 Git 和 Mercurial 替代掉,IE 不开源,但是竞争对手开源的 Firefox 和 Chromium 做到了比 IE 更好,RAR 不开源,但是 FB 开源的 zstd 大多数情况比 RAR 表现更佳。马一龙一发巨魔,还把推特的算法给“开源”了呢(虽然这事干得实在意义不明)。
开源薅的也不光是社区志愿者的羊毛,相反,在有些项目里,个人贡献者的占比是很小的。上面很多项目的 contributor 清单一拉,还是这些公司的人。你用了这个项目,你就可以薅竞争对手的羊毛,然后你在使用的时候遇到问题,贡献到社区,你也被薅一次羊毛,大家就这么互薅过来,项目能健康地运行下去,最后其实都赚。如果你自己做一个,要养一个团队,做的还不一定比人家一堆公司共建的好,不产生直接业务价值,有什么意义呢?
有不少开源项目由单一公司主导,在外人看来是铁板一块的,不过就微观上吃饭的问题来说依然不是绝对的,因为所谓的单一公司依然是由人组成的,而人事是会变化的。VSCode 的个人贡献者贡献多了就被收编了,现在国内社区说起 React 就是 Dan Abramov,但是人家一开始是在外面独立开发 Redux,然后被 FB 的人找来,2015 年底才加入 React 团队。
一些人认为就应该以”最纯粹的目的“搞开源。开源本身就有浓厚的左翼色彩,RMS 自己说过他认为自由软件同时包含了共、安和资的元素。众所周知,左翼无限可分。广义的开源运动中不同的人有不同的想法很正常。再放眼现在这个右翼不断扩张而左翼群魔乱舞的世界,不得不说开源已经算是搞得比较好的了。
说到底就是资本主义这东西,唯一的好处就是竞争。闭源和开源,都可以是竞争的手段。商业和开源结合产生的一些乱象,不只是由开源造成的,可能更关键的是商业本来就是很矛盾的一个东西。
陈皓更大的问题是私自对“高精尖的地方”下了定义,为啥开源的东西就不能是“高精尖”的呢?
这不是我一个年轻人非要在一个小论坛上欺负一个已经没法说话的人。分析陈皓的话,最终还是为了更理性地认识开源这个事情。比如从这一点,咱们就再可以把话题转到开源社区的另一重要成员,甚至可以说是自由软件和开源软件的起源——学术界。虽然咱们一直强调牛人的重要性,但是牛人并不是都在大公司。
这里的学术界包含高校实验室、政府背景的研究机构、产业界的研究部门等。陈皓所推崇的 UNIX,包括伴生的 C,衍生的 BSD 等,都是来自于学术界。Linux 一开始在圣诞树先生的 MINIX 上开发,显然也是学术界产物(并且 Linus 当时就是个学生)。苹果的 OS 内核最后缝合了 BSD 和 Mach 两个学术界产物用到今天。而 RMS 现在好像还在 MIT 混日子。
互联网最开始来自西大军方,后来从高校扩散开来,Web 则来自 CERN。高德纳就为了给 TAOCP 排版,花了八年写 TeX 和 Metafont。后来的开源数据库软件 PostgreSQL,和 Berkeley 有很大的关系。最近几年的 Spark,又是来自 Berkeley。现在的 AI,学术界也有很多开源成果,PyTorch 是来自 FB 的研究团队,而 PyTorch 的基础 Torch 则是来自研究机构,MXNet 是若干大学联合开发的成果。目前最好的内存分配器之一 mimalloc 是微软研究院的人为了实现编程语言原型开发的。命令与征服1的 C# 复刻 OpenRA,主开发者是英国的一个天文 PhD。NumPy, IPython 的发起人也是教授(GvR 写 Python 时其实也在一个研究机构工作),现在主要的开源 BLAS 库 OpenBLAS 是中科院 fork 西大大学的项目,OpenMPI 一开始也是大学的超算项目,OpenStack 有 NASA 的参与。其他专业领域也有很多学术背景的开源项目,比如化学的 GROMACS, LAMMPS, NWChem, 流体物理的 OpenFOAM, 生物信息学的 Bioconductor,医学影像的 Slicer。
不过这些都是次要的,学术界的特点在于它是最擅长提新 idea 的。当然有不少人直接拿去商业化了(比如 Romulus),但是更多的被”模仿“走了。开始说了很多 idea 需要实现出来才有价值,所以很多成果在产出的过程中就有了一份官方实现。
于是就出现了乔布斯一边”模仿"着 Engelbart 和 PARC,一边骂 Android ”模仿“他。纵观历史,牛人们复用前人成果本来就是很自然的事情。开源则是这种现象的一个延续,这里面的奇点,我觉得是由于互联网的普及,在虚拟世界可以实现接近零成本的拷贝和通讯,不仅让普通人也可以参与进来,大规模的跨地域协作也有了可能。 |
|