- 原文地址:The economics of package management
- 原文做者:ceejbot
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:Baddyo
- 校对者:LanceZhu, MarchYuanx
译者注:html
- 本文为 2019 年 C J Silverio 在 JSConf EU 大会上的演讲稿的译文版的下半部分。
- 若是你还没读过本系列的上半部分,请先阅读:GitHub 连接、掘金连接
- 演讲视频:Youtube 连接、优酷连接
而从 JavaScript 的层面来讲,这门语言的规范就是属于咱们开发者的公共资源的一部分。它由一个专门成立的组织所拥有,这个组织让全部的 JavaScript 利益相关者齐心合力来设计和构建这门语言。TC39 委员会在这方面功不可没。前端
全部的开源代码也都是咱们的 JavaScript 公共资源的一部分。Babel 的源代码、webpack 的源代码、TypeScript 的源代码,以及 React、Angular —— 成千上万的开源包构成了属于咱们的 JavaScript 公共资源。维护着这些开源包的注册中心一样也是 JavaScript 公共资源。有了注册中心,咱们才能与彼此分享,才能便捷地找到须要的源码。JavaScript 公共资源还包括命名规范、更新方式等一系列开发约定。android
但如今,全部这些,完彻底全被一家由风投资金赞助的私人公司所掌握。webpack
在去年的这个大会上,Node.js 的发明者 Ryan Dahl 再次登台演讲。他谈到了 Node.js 的设计误区。我在此引用他的一句话。ios
模块仓库的中心化(甚至由私人所控制)是一种不幸。—— Ryan Dahlgit
当我第一次听到这话,我很想就中心化的概念和 Dahl 辩论一番,但关于他说的私人控制的部分,我不得不信服。github
那咱们就说说私人控制。咱们赖以共享 JavaScript 代码的平台被私人掌控。其含义是什么?web
npm 的经营策略由一个公司来掌舵,JavaScript 社区对此没有话语权。那删除代码包是出于何种缘由?代码包的命名纠纷又该如何解决?这是一个有争议的话题!大家是否还记得 left-pad 事件?npm
该事件是这样的:left-pad 是另外一个依赖包用到的依赖包,当它忽然被从 npm 中删除,每个依赖于安装 Babel 的持续集成构建软件(CI build)都崩溃了。那为什么 left-pad 会忽然被删除呢?请我吃饭我就告诉你!但这种不公开的经营策略此前并不存在,它让咱们的生活愈来愈好,也愈来愈糟。后端
想要包签名功能?那可有得盼了!这个功能又不能给公司创收,所以大家不太可能看到它上线。也许只有对安全事故的畏惧,或者公众强烈抗议才能促成这件事。
请注意,我在这里仅仅是在说代码包注册中心。注册中心是闭源的,其经营策略不受咱们控制。npm 脚手架工具(cli)却是开源的,但这不是重点。npm 的 API 暂时仍是开源的,编写本身的脚手架所需的重要构建模块也都是开源的,不受 npm 公司的控制。不论如何,大家中有三分之一的人使用的是另外的客户端与 npm 交互。咱们能够认为脚手架工具不牵涉其中,由于在这方面,npm 公司须要社区来出力。
API 之因此开源,是由于该公司容许其开源。咱们根本没法控制其一分一毫。咱们没法对 API 产生影响,更没法作对 JavaScript 生态有益处的改变。
咱们碰不到对本身的资源的管理权。这种隔离状态会一直持续,直到该公司出于经济动机去改变它。你不知道他们会用你的代码包数据作什么 —— 你无从知晓。你只能选择信任这种不透明的管理机制。
但没有问责制就没有信任,而咱们作为 Javascript 社区成员,是没有途径去向 npm 公司问责的。
当我还在 npm 团队中时,我能够告诉本身说,我信任我本身,信任个人团队,我知道咱们的动机是为了社区好。而如今,这不是一个使人信服的答案,我一度对此的信赖是错误的。大家没有办法让我负责,也没有办法证实我是值得信赖的。
溜了溜了。
总之,npm 公司是一家私有性质的实体,是它控制着咱们的公共资源,而不是咱们开发者。这就必定表明它是十恶不赦的吗?不,也不尽然。但也一样不尽然使其积德行善。问它是否仁慈可算是问错对象了。
npm 公司可不是慈善机构。可能性为零。即便有那么一点可能性,也早就在接受风投资金而没有把它交给一个基金会或其余形式的社区全部权的那一刻消亡殆尽。那一决策把 npm 变成了金融工具。
我说这话,完彻底全就是字面意思。
所谓金融工具,就是资本方之间的货币合同。它们是能够用来创造和交易的小工具。npm 公司 —— 掌控着 JavaScript 生态和大家天天都在使用的 npm 的角色 —— 在其全部者眼里不过是一堆能换钱的猪肚罢了。他们签一份份合同,作一笔笔生意。
npm 公司就是其拥有者用来钱生钱的手段。
当你使用 npm 时,当你和 npm 方面的人打交道时,你最好记住 npm 公司的性质。个人意思是着眼于动机。在这个故事里,多数人的动机归根结底都是金钱。
一切向钱看。
商业公司并不爱你,即便是那些作出了让你爱不释手的产品的公司。
“Build amazing things”,这只是一句广告词,用来让你误认为金融工具是你的朋友。多年来,这句广告词一直很是见效,不是吗?给你一个抱抱熊吉祥物,给你一些好看的贴纸,再加上一颗红心表情符号,你就上钩了,对吧?
npm 公司并不爱你。它不可能爱你。npm 公司只是特拉华州的一家公司,只是少数人的摇钱树罢了。
当我开始决定与其躲在角落和朋友窃窃私语,不如在大庭广众之下振臂高呼时,我就知道我要打一场艰苦的战役。npm 这家风投资金赞助的公司大受欢迎,个人犬马之劳也是缘由之一。我参与了它的整个崛起过程 —— 我也贡献了力量。我也曾站在舞台上,面对大家你们,鹦鹉学舌地说出那句广告词。我也曾说“我,C J Silverio,爱大家全部人。”那是个人肺腑之言。
而如今,我不认为有人在大家面前大言不惭地说出 “npm 爱大家”还可以不被骂。过去几个月,npm 已经耗尽了全部的美誉。其实本不应如此 —— 都是公司运做者的决策致使的。他们作出了决策,并且押下双倍赌注,因而乎,咱们走到了这般田地。
这一切是怎么发生的?为何抱抱熊开始黑化?让咱们接着讲故事吧,好吗?
咱们从,呃,2018 年这个时间点拾起。大家你们一直从免费的 JavaScript 开源包中受益。但大家从没想过,或者在意过这些开源包是从哪里来的,是谁在为这些服务买单。大家只需敲出 install
命令,大家要的代码包就自动上门了。
但带宽是要花钱的,总得有人来出这笔钱。
就这样,npm 花着风投资本家给的钱来购买服务器和带宽。最终报应不爽,把风投资金归入囊中时种下的恶果就像堵在门口的债主同样开始敲门,清清嗓子准备连本带利地索要回去。“咳咳,还认识咱们吗?把咱们的钱还给咱们。” 咱们终于看清,靠风投资金赞助公司只是赚钱工具罢了。资本家们终会无所不用其极以获取 10 倍收益。他们每作一笔投资都要确保金主是最后的赢家。这种生意并不老是只赚不亏,但若是你不能保证保本,那你得有说服力足够的故事让金主相信你能确保赚钱的机器能一直运转下去。
从本质上说,我认为接受风险投资并无错。不少拉投资的企业的目标都和投资方的目标相匹配,而且并不是全部的投资方都是同样的。有些投资方喜欢放长线钓大鱼。像 Futureshape 这样的投资方是很明确想让世界变得更美好。但更多的投资方只看重收益。这就是他们的出发点:赚钱,把羊养肥卖给新主顾,赚个十倍利润。你拿了风投资金,就要迅速增加。要么作大,要么做古。
记住,npm 公司里是金主说了算,而不是那些为开源宝库添砖加瓦的开发者。
因此 npm 公司必需要盈利,不然就得忽悠更多的投资来拆东墙补西墙。
那位以为把 ypm 开源出来是个好点子的前 Yahoo 员工,他的想法没错,但他没有深思熟虑过开源以后的发展,事实证实,运营公司可不仅仅有个好点子就好了,还须要不少血汗。所以在 2018 年,他新雇了一位 CEO 为他运营公司,因而乎,这下可有得折腾了。新 CEO 上任的第一把火就是改变了 npm 的文化 —— 你懂的,就是那套一直作为广告语输出的文化。这位新 CEO 就位后,率先踢开的就是宽容、仁慈的 npm 文化。
结果搞得 npm 的公关问题路人皆知。咱们真是一个爱看热闹的社区。若是管事的是一位圣人,那可能我也不会站在这里。但可能我仍是会,由于即便一位正派的领头人处在这种位置,也有很大的问题急需解决。
这就是问题所在。
公开的注册中心 —— 全部开源包被索引和存储的地方 —— 是你们所关心的部分。这个注册中心极大地消耗着 npm 的预算,同时,这也是投资方以为有利可图的地方。它控制着全部 JavaScript 开发项目,由于全部 JavaScript 开发项目都自愿以其为代理。数据 —— 用户的使用数据 —— 也是有利可图的地方。每个 package-lock 文件都存放在亚马逊云存储中的某处,满载着关于用户偏好的有趣数据块。这也是影响 API 设计的强有力因素。npm 公司没理由下降客户端在安装代码包时向服务器发出请求的次数,由于这些请求都能产生有价值的数据。
注册中心是 npm 的负担。想要跟上持续的、近乎指数级的增加,就要付出同等的工做量。我在 npm 任职时,这种繁重的工做占用了小小的开发团队几乎所有的时间。为什么开发团队这么小呢?那时咱们没有资金,没法扩大规模。或许由于那时的 npm 团队不擅长向投资方讲动听的故事,或许那些潜在的投资者也知道咱们拿不出金光闪闪的赚钱方案。我不太肯定究竟是哪一个缘由。但总之,团队的资金只够维持免费的 JavaScript 服务,但无力作出像样的产品来卖钱。终于,创业资金即将给到期。终于,到了一个不成功便成仁的关口。
一切向钱看。
所以,咱们的处境变成了如今这样,npm 公司尚未彻底认清本身做为某些人的赚钱工具的命运,而这些人并非 JavaScript 开发者。也许它会成功,也许它会破产。也许它会用咱们都讨厌的方式赚钱,从大家每一个用户的大量宝贵数据中榨取利润。
如今,咱们都清楚 npm 并不爱咱们,也不爱它的员工。咱们对其怒目而视,却同时仍在用它安装代码包。我,我的来讲,对这种现状不能安之若素。我怀疑这种现状不会长久。
其实剧情没必要是这种走向。在近几个月及以前的过程当中,各位主演本能够选择不一样的道路。但如今却变成了这样。掌握着咱们的公共资源的角色,是不值得咱们信任的角色,由于其初衷并不与咱们这些 JavaScript 社区成员的诉求相合。
那咱们如何应对这种局面呢?
有一种答案是按兵不动,由于咱们反正也机关用尽。咱们的社区在 2013 年时就已经作出了抉择,而且一条道走到黑。咱们只能寄但愿于 npm 公司的倒闭,等它真倒闭了,咱们再用难熬的几个月时间来找到替代品。
我不太喜欢这个答案。
设想一下 npm 被某个海盗公司(专门收购不景气的公司并强制改革)掌管的情形。这种接管者可能没兴趣让公共注册中心维持运转,可能还会想要滥用用户数据。咱们,npm 的用户,受制于董事会的决策,而鉴于董事会迄今为止表现不佳,上述设想变为现实的可能性很大。
还有一种更乐观的结局。一个体量更大的救世主公司从天而降,拯救咱们心爱的 npm 于水火之中,让咱们的公共资源焕发生机。但即便掌管 npm 的公司很靠谱,我认为这仍是治标不治本。Microsoft 现在扮演着仁慈的角色,但他们确定不会一直如此。Google 也曾扮演过仁慈的角色,但现在活活一副上个世纪九十年代 Microsoft 那种垄断者的嘴脸。
我但愿咱们可以避免重蹈过去十年的覆辙。
我以为我仍是赞同 Ryan Dahl 的观点。npm 不该该私有化。我认为中心化是个负担,会不可避免地致使私有控制,由于服务器老是一笔开销。若是咱们你们共同分担,咱们就能扛住这个负担。
这可能让大家都以为不可能。大家都以为 npm 根深蒂固。几个月前我也这么想,但后来 npm 公司出于全部人都不知道的缘由,一把火将其良心烧得干干净净,包括我在内的全部信任者都曾愿意为其良心鞠躬尽瘁。就那么“噗”的一声,付之一炬。他们对 JavaScript 社区、对价值观、对咱们开发者如此恶劣,他们是蓄意为之!(此处配合愤怒的手势)
并且,坐以待毙不是个人风格。机关用尽在个人字典里根本不存在。
另外我要说的是,尽管发生了这一切,但我仍然信仰 Potlatch 文化。我认为互相分享对咱们有益,而即便有人利用这一点赚钱,我也能心平气和地面对。
所以我要在这里宣布。我今天要和大家你们分享一些东西。并且分享者不只仅是我一我的。我和同事 Chris Dickinson 一直在协力作这件事。
今天我要向大家介绍 Entropic,一个 JavaScript 联合包管理工具。
Entropic 基于 Apache 2 协议,仅需引入就能够运行你本身的注册中心。
Entropic 带有本身的脚手架工具,叫作 ds
,即 entropy delta。
Entropic 提供全新的发布和安装 API,极大地下降了网络请求量。安装单元就是一个文件,而不是一个大包东西。
Entropic 是联合性质的。你可使用来自其余 Entropic 实例的依赖包,而且你的本地实例会把你全部的依赖包进行镜像备份,这样就能够自给自足了。
Entropic 还会备份你从遗留的包管理工具安装的全部依赖包。
安装要求很是简单,咱们已经将其容器化了。
你能够用 GitHub 帐号登陆,且支持其余任何 OAuth 认证提供方。
(在此处播放一小段 demo 视频)
这个项目才刚刚满月。咱们还没准备好将它推到大众视线内,但对于喜欢尝鲜的开发者来讲,它足以让你把玩。
Entropic 还有不少功能,而且咱们列了长长的待开发功能清单。好比,Entropic 目前还缺个官方网站。若是感兴趣,你能够去 GitHub 仓库看看长长的一列 issue。
Entropic 的目标是什么?
首先,我想向你们证实,除了机关用尽,咱们还有其余选择。咱们没必要坐在原地等着 npm 倒闭再采起行动。乐观一些,积极一些,我们有这个能力。
其二,Chris 和我以及其余几我的深切理解一个开源包注册中心须要解决的问题,特别是规模问题。咱们的社区此刻迫切须要这种专门的经验,而咱们几个也迫切须要分享这类经验。咱们选择把有价值的东西分享出来。听从 Potlatch 文化:把咱们的经验作为礼物赠与诸君。
第三,我认为中心化终会式微,我愿意在这个过程当中出一把力。过去的十年,是整合统一服务的十年,但接下来的十年,将是属于联合化的十年。联合化将分担开销。联合化将分化集权。联合化将分解一言堂。联合化将咱们的语言生态掌控权交到咱们本身手中。
个人愿景,是经过 Entropic,帮助咱们你们把公共资源夺回来。夺回来,咱们才再也不是风投资本家案板上的鱼肉。夺回来,咱们才能走一条与 2013 年年底决定走上的不同的路。夺回来!做为数量庞大的开发者的共同体,咱们有这个能力夺回来。此刻,Entropic 就是咱们夺回 JavaScript 公共资源的冲锋号。
关于 Entropic,还有不少想说,还有不少想作,可是时候把它分享给你们了。
若是咱们明白了 npm 不爱咱们 —— 确实不爱,若是咱们明白了一个私有公司不应掌控公共资源 —— 确实不应,那么,是时候迈开脚步了。我坚信这个由优良开发者组成的优良社区,他们拥有惊艳世界的才华和意志。在这个紧要关头,Web 的将来已经危如累卵,咱们的规则不该该让某个公司来定义,咱们的命运不该该让某个公司来掌控!咱们把控制权夺回来,而为了夺回来,咱们须要共同完善 Entropic。
咱们要把对这份对社区的热爱,传递给你们,由己及人。请你们务必善待这份爱。
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。