[譯] npm 的經濟風雲 —— 下半部分

npm 的經濟風雲 —— 下半部分

譯者注:html

而從 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 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索