HTTPie:5.4萬GitHub Star一朝清零,開源史上最大意外損失

機器之心報道,編輯:蛋醬、小舟

我們找 GitHub CEO 求助,但為時已晚。

2022 年 2 月 15 日,GitHub 通過Twitter平臺廣播了一則訊息:「我們的朋友 HTTPie 最近不小心將自己設為了私密,丟掉了所有的 Star。如果你仍然愛它,就給它一顆 Star 作為情人節禮物。」

10 年攢下的 Star 突然清零?這是怎麼回事?

昨天,項目作者 Jakub Roztočil 在部落格中正式回應了這一事件。

十年獲得 5.4W Star 的開源項目

HTTPie 項目的第一次提交還是在十年之前。

可能一些人對這個項目不夠熟悉,這是一個開源 CLI HTTP 客戶端。團隊從頭開始構建了它,以使終端的 API 互動儘可能人性化。

HTTPie(發音為 aitch-tee-tee-pie)可用於測試、調試以及通常與 API 和 HTTP 伺服器互動。http&https 命令允許創建和發送任意 HTTP 請求。它們使用簡單自然的語法,並提供格式化和彩色輸出。

從 2012 年 2 月 25 日在哥本哈根的第一次公開提交之後,項目作者 Jakub Roztočil 就一直在 GitHub 平臺上託管該項目。他自己也是 GitHub 平臺的忠實粉絲。

這些年來,HTTPie 逐漸成長為平臺上最受歡迎的 API 工具,收穫了 5.4W 個 Star 和 1k 的關注。

HTTPie 項目受益於 GitHub 的「social coding」功能,同時,GitHub 也受益於自身平臺上託管的這個受歡迎的項目。在過去十年中,可能有數百萬開發人員訪問了 HTTPie 項目的 GitHub 頁面。

但在幾周前,HTTPie 項目積累的 5.4W Star 一夜清零。

在這篇部落格中,項目作者 Jakub Roztočil 詳細介紹了事情經過:

發生了什麼?

我不小心將項目的 repo 設為了私有,GitHub 級聯刪除了我們花費 10 年時間建立的社區。

這意味著什麼?

如果你是一位下游維護者,或者曾經關注過 HTTPie 以獲取通知,你可能需要重新關注一下 repo。

Star 也是一樣,如果過去十年裡你曾為該項目加註 Star,那現在 HTTPie 應該已不再是你的 Star 項目列表中的一員。

為什麼要將 repo 設為私有?

將 repo 設為私有會永久刪除所有關注者和 Star,這是 GitHub 的一個特性。我知道這一點,而且我顯然無意 httpie/httpie 隱藏。

最直接的原因是我認為我在另一個 repo 中——一個沒有內容且 0 Star 的項目。我真正打算做的是隱藏 HTTPie 組織的配置檔案 README,這是我在一週前創建但沒有機會填充的。

讓我走上錯誤道路的是一個完全不相關的操作:我剛剛在我的個人資料上做了同樣的事情(即隱藏了一個空的 README),將其設為 jakubroztocil/jakubroztocil 私有。

在配置檔案和儲存庫方面,GitHub 的概念模型會將使用者和組織視為非常相似的實體。在這種情況下,由於我只是想在我們組織的個人資料上重複相同的操作,我的大腦切換到了「自動駕駛」模式。

目前我沒有意識到這個包含配置檔案 README 的特殊 repo 的命名存在不一致問題,並且它對於使用者和組織有所不同:name/name 與 name/.github.

這就是為什麼我一開始要隱藏 httpie/httpie,而不是 httpie/.github,並且沒有意識到我的錯誤。

但是,還有一個確認流程?

確實有一個確認框,旨在阻止像我這樣的情況下的使用者做一些愚蠢的事情。它會告訴你「你將永遠失去這個儲存庫的所有 Star 和關注者」。

問題在於,對於沒有提交和任何 Star 的 repo ,它的提示框和具有 10 年曆史及 55k Star 與關注者的 repo 是完全一樣的。它說的是:「警告:這是一個潛在的破壞性行動。」

套用一句話:一個盒子告訴你「你要拆房子!如果裡面有人,他們都會死。」但如果你混淆了地址並認為你正準備拆的是一個空房子,那後果將不堪設想。

實際上,此處的對話應該更加結合上下文,並且再次解釋一下情況,比如說「你即將殺死 55000 人。」那肯定會讓我停下來。

一番操作之後

當我回到組織頁面時,你可以想象我的困惑,我不僅仍然可以看到空的 README,同時我們最受歡迎的 repo 找不到了。片刻之後,我意識到發生了什麼事。所以我回到 repo 的設置來翻轉開關。但 GitHub 不允許我這樣做——整整半個小時。

為什麼這麼久呢?因為這是 GitHub 級聯刪除我們 10 年來的 Star 和關注者所花費的時間。而且我沒有辦法阻止這個過程。我所能做的就是開始發訊息給 GitHub 尋求支持,刷新頁面並等待 Star 數量達到零,然後才能再次將其公開。

為什麼 GitHub 不給我們恢復呢?

GitHub 顯然有備份,並且有恢復 repo 的方法。GitHub 團隊曾經自己不小心將 GitHub 桌面應用程序 repo 設為私有,然後他們在幾個小時內就恢復了一切,當時前 GitHub CEO 給出的解釋是:

然而,在我們的事件中,他們拒絕這樣做,理由是操作具有不良影響,並且會消耗資源成本。我們甚至提出為所需的任何資源提供經濟補償,但遺憾的是,他們還是拒絕了。相對於在 GitHub 上恢復最受歡迎的社區項目之一以外,他們還有其他優先事項。

因此,GitHub 恢復儲存庫的前提是他們自己的項目,而不是社區項目。

經驗教訓

這次危機讓我們得到了很多教訓,這裡主要分享 3 點:

教訓 1:UI/UX 設計

彈出的對話方塊要清晰明瞭,減少抽象的文字說明。以一種不需要使用者思索的方式設計確認對話方塊。當使用者要刪除或損壞某些檔案時,不要用抽象的語言描述,以免讓使用者難以了解即將發生的狀況,特別是會造成級聯刪除的行為。例如,以下是我們在 HTTPie for Desktop 中的處理方式:

對話方塊需要反映操作影響的嚴重性。當完全沒有額外影響時,對話方塊應該儘量簡單,否則會浪費使用者有限的注意力,從而降低使用者的敏感度:

教訓 2:資料庫設計

教訓 2:資料庫設計

使用軟刪除(soft-delete)。人非聖賢,孰能無過。人們在刪除操作上可能會犯錯誤,因此應該儘可能使用軟刪除,延遲硬刪除(hard-delete)操作。

教訓 3:與 GitHub 的關係

教訓 3:與 GitHub 的關係

這是我們的人為錯誤,GitHub 明確表示他們沒有法律義務幫助我們。我們長達十年的互惠互利關係是根據 GitHub 的服務條款確定的,除此之外,再無其他。

畢竟,GitHub 有過有爭議的行為,這些行為違背了開源社區的精神。微軟(已收購 GitHub)儘管擁有一定的開源精神,但並不總是有很好的聲譽。

我們希望 GitHub / 微軟 有朝一日能夠改變他們的態度,並恢復我們的項目社區,他們擁有實現這一點的所有資料和方法。我們也希望他們改進 UI 和資料庫設計,以防止這種情況未來發生在其他團隊身上。

最後,儘管我們的 GitHub star 量化為虛無,但 HTTPie 現在發展得非常好,從最初作為一個副項目到現在變成了一家公司,我們的團隊正在將 HTTPie 發展成一個 API 開發平臺。用於 Web 和桌面的 HTTPie 私有測試版收到了很好的反饋,我們迫不及待地想在接下來的幾周內公開發布它。

相關文章

蔚小理走到了命運的「岔路口」

蔚小理走到了命運的「岔路口」

當新能源汽車的資格賽進入衝刺階段,競爭的焦點也發生了變化。 作者 | 周永亮編輯| 鄭玄 近日,隨著小鵬財報發佈,蔚小理都交出了 2022 ...

矽谷都在裁員,奈飛卻在增長

矽谷都在裁員,奈飛卻在增長

2022 年低開高走的奈飛,在年底交出了一份驚豔的答卷。 作者 | 賴求華編輯| 鄭玄 2022 下半年,過去 20 年最寒冷的冬天籠罩矽谷...

2023,元宇宙「脫虛向實」

2023,元宇宙「脫虛向實」

在希望與爭議中,元宇宙渡過了關鍵的一年。 從國際局勢,到新冠疫情,過去三年「新常態」的衝擊,讓外部環境充斥著不確定性,也令這個時代的人們處於...

建設 Web3,現在最需要 Web2 的移民?

建設 Web3,現在最需要 Web2 的移民?

Web3 處在「大規模應用」爆發的前夜 從國際局勢,到新冠疫情,過去三年「新常態」的衝擊,讓外部環境充斥著不確定性,也令這個時代的人們處於前...

B 站最艱難的時刻過去了嗎?

B 站最艱難的時刻過去了嗎?

儘管還在虧損,但 B 站的降本已經開始收穫成效。 作者 | 鄭玄 當一個行業整體意識到必須改變時,相似的關鍵詞就會反覆出現在高管對外的分享中...

CVE-2023-28252在野提權漏洞樣本分析

CVE-2023-28252在野提權漏洞樣本分析

綜述 卡巴斯基披露[1]該在野0day提權漏洞是一個越界寫入(增量)漏洞,當目標系統試圖擴展元資料塊時被利用來獲取system許可權———W...