“老闆問我按鈕為什麼被狗啃了”

“老闆問我按鈕為什麼被狗啃了”

航通社作者 書航 12月25日發於廣州

12月25日是聖誕節,在這個節日氣氛濃厚的日子裡,眾多國內外前端開發者,卻因為一個突如其來的意外而坐立不安。

一覺醒來,他們發現由自己參與設計的網站、公司內網、辦事系統等網頁上,有一些按鈕的上面多了一團白色的“積雪”,在白背景下,看著有點像是被“咬掉”了一塊似的。

“老闆問我按鈕為什麼被狗啃了”,在代碼託管站點 GitHub 上,有人這麼說。

不僅如此,將鼠標指向變化了的按鈕時,原本設定好的文字說明也統一變成了“Ho ho ho”,這是“聖誕老人”標誌性的笑聲。

這毫無疑問是一個聖誕節的應景“彩蛋”。源代碼顯示,只有在系統判斷是12月25日當天,這個”彩蛋“才會出現。

不合時宜的”彩蛋“

在程序中植入“彩蛋”是程序員們在枯燥的編程生活中展現樂趣,同時聲明版權的一個悠久傳統。我們廣泛使用的Windows、Android等操作系統,以及Office辦公軟件的多個版本都埋有“彩蛋”。然而,“彩蛋”不屬於軟件功能的一部分,所以一般都是在不能直接顯現的源代碼等地,或者需要通過極其複雜的方式才能找到,就像打遊戲一樣。早期的雅虎網站首頁,在左上角”Yahoo!“標誌的感嘆號處,點擊那個小小的點,就會有個人唱出”雅虎~“的聲音。如果不是有人告訴你,你可能永遠也想不到這裡是可以點的。
“老板问我按钮为什么被狗啃了”

正如張小龍在微信7.0發佈當日引用的那句話:”你未看此花時,此花與汝同歸於寂;你來看此花時,則此花顏色一時明白起來。“一個優秀的彩蛋,應當是只有在人們特意來看的時候,才顯現出來。就算有時你想讓所有用戶都看到“彩蛋”,那麼它所處的位置以及呈現的效果,也需要以不影響軟件功能正常實現為前提。例如,谷歌和百度等都會在一些節日更改網站標識(logo),雖然所有用戶都看得見,但這個位置的展示不會影響使用。相比之下,在聖誕節當天出現的這個“彩蛋”,對廣大前端開發者來說,就顯得相當不合時宜。它不分場合地出現在一些機關、企事業單位的內網界面,甚至據說,在不過聖誕節的中東國家也出現了。只要想象一下,有一天你打開電腦,發現操作系統自作主張的給你換了皮膚,各種按鈕上也都”下雪“了,就能體會到這一事故給開發者、老闆和客戶帶來的極大驚嚇。

“老板问我按钮为什么被狗啃了”

“老板问我按钮为什么被狗啃了”

一個生物科學類網站受到了影響:

“老板问我按钮为什么被狗啃了”

還有一個賣藏區產品的網站:

“老板问我按钮为什么被狗啃了”

甚至”湖南省發改委碳排放管理系統“都中招了:

“老板问我按钮为什么被狗啃了”

此外,還有留言說自己是”在伊朗工作的中國前端“的;

“老板问我按钮为什么被狗啃了”

還有說自己是某某委的,沒丟工作還得多虧了自己的小姨子;

“老板问我按钮为什么被狗啃了”

……更重要的是,在它毫無預兆地呈現出來之前,使用這種按鈕的開發者們,沒有得到任何通知。他們瘋狂地尋找到底是哪裡出了問題,莫非是有黑客入侵,修改頁面做了個惡作劇?最終,人們查明瞭問題:這些“中招”的開發者們,都在項目中使用了Ant Design(簡稱 AntD),這是由支付寶母公司螞蟻金服設計團隊製作的一套開源的前端框架。受害者們湧入GitHub上的AntD項目主頁留言控訴。隨著管理員下午開始清理,你現在再過去看,恐怕已經看不到什麼了。

牽一髮而動全身

在當代互聯網環境下,前端框架可以看作是20多年前拿光盤裝的“網頁素材庫“的繼承者。

早期網頁設計中,要想做出個性化的按鈕、滾動條、下拉菜單、單選框、表單等網頁控件,要麼需要完全自己重寫一遍,要麼需要先在PS裡面把網頁畫出來,再切圖,把圖片插入網頁。

此後,YUI、JQuery、Prototype等由大公司或者開源社區貢獻出來的公用”素材庫“,逐漸成為業界的主流選擇。畢竟,有大公司已經做好的組件在那兒,自己就沒必要”重新造輪子“。

以螞蟻金服的AntD為例,在網頁中引用它的一小段代碼之後,只需要在寫網頁時規定一個按鈕的位置、大小和顏色,你就能得到一個優雅的,稍微有一點點圓角弧度的按鈕,鼠標指向和按下按鈕時,還會有凸起和凹陷的視覺效果。

如此一來,使用公用的前端框架可以大大節省開發者的時間和精力,讓他們把重心放在整體頁面的”謀篇佈局“上,甚至為機器自動生成網頁創造了條件。

AntD不僅提供網頁組件的快捷引用,本身還是一種成體系的設計語言。因此,它已經被大範圍應用在支付寶這款軟件上,以及螞蟻金服內部的數百個中後臺應用。

通俗的說,只要正確使用AntD,就會讓你做出的網頁產品或移動端,在細節上和支付寶網站或App相一致。這或許不會體現設計師的個性,但至少不會讓你犯一些低級錯誤。

AntD的代碼託管於被微軟收購的代碼託管網站GitHub上,即使是中國境內的開發者,目前也可以自由引用來自GitHub的代碼,而不用擔心訪問不了的問題。

據螞蟻金服設計團隊今年9月的數據,Ant Design 1.0在發佈之後的8個月中,就已經在 GitHub 上收穫了 11686 個”星標“。這意味著至少有這些數量的程序員關注,並使用了AntD到自己的項目上。

( https://zhuanlan.zhihu.com/p/43593326 )

就是這一得到業界廣泛關注和使用的基礎組件,突然在毫無預警,也沒有功能開關的前提下,給所有使用者的按鈕控件”下了一場雪“——而且還是在”生產環境“中,也就是說,根本不給開發者後悔的機會。

這場”雪災“也讓我們有機會看到該框架的應用範圍之廣泛,以及破壞力之巨大。

AntD犯了什麼錯

就像它的前輩YUI一樣,AntD也是一個典型的”大公司的小產品“,是員工利用工作之餘開發出來,並在工作之外仍能產生廣泛影響的產品。YUI當年由盛極一時的雅虎前端程序員貢獻出來,經過人們多年來不懈的努力,在雅虎本身幾經易手之後,YUI仍然能作為一個開源項目具有長久的生命力。在本次”彩蛋“風波之前,AntD為前端提供了模仿谷歌Material Design、JQuery等有限幾套框架之外的新選擇。它富有活力,又簡約大氣,所以確實受到業界的歡迎,也提升了螞蟻金服在開發者中的形象。AntD 的主要維護人員 afc163早在今年9月的一次維護中,就默默地提交了這個”彩蛋“的相關代碼,可是在後來幾個月當中,一直沒有人發現——也許如果事先告知了,就不叫”彩蛋“了吧。
“老板问我按钮为什么被狗啃了”

這位維護人員一開始也沒有意識到問題的嚴重性。他先是說這麼點小事,不值得在產品更新說明中體現出來;

“老板问我按钮为什么被狗啃了”

然後又說”早就做好了被罵的準備“。

“老板问我按钮为什么被狗啃了”

他直到今天下午才發佈官方聲明,道歉並撤銷了這個引起巨大震盪的”彩蛋“,同時,項目組負責人也保證不會在代碼庫中再加入與功能無關的代碼。( https://github.com/ant-design/ant-design/issues/13848 )

“老板问我按钮为什么被狗啃了”

只不過,由這個自作主張的”彩蛋“引發的對AntD整個項目的信任危機,也許才剛剛開始。典型的留言是:”今天你慶祝聖誕節下雪了,明天清明節,按鈕上是不是還要加一個墓碑?“不同於操作系統打補丁,官方做出的任何更改,都只能寄希望於使用它的開發者們自主更新到新版,並不能即時”推送“到每一個項目上。有比較悲催的前端就說,他們老闆看到之後大發雷霆,他建議發一個新版解決問題,然而老闆說不能因為這個發佈新版,所以無法補救。afc163 承諾代碼中再也沒有其它任何這類”彩蛋“,儘管如此還是有人建議將官方代碼複製一個子版本出來(術語叫做fork),並由熱心的社區繼續維護這一分叉,以免再出什麼意外。

“老板问我按钮为什么被狗啃了”

事件之後,自然有喜歡AntD的用戶跑上去安慰作者,說這就是無心之失;但恐怕由此引發的用戶流失,也就是不得不替換新框架(找新的”輪子“)的情況,可能會更多。AntD開發者並不需要為受到損失的使用者承擔任何責任,因為這是一個採用了 MIT 許可協議的開源項目。大多數情況下,開源的意思是你可以任意使用我做的這個東西,不需要標註版權,不用付費,也可以隨意修改到爹都不認識;但與此同時,我不會為你的任何潛在的損失承擔責任。這次也不例外。既然做開源項目放到 GitHub 上就是賺個吆喝,不為盈利,也不承擔法律責任,那麼很顯然,”信任“就是一個項目最為金貴的核心價值。大家都是拿出業餘時間無償參與到產品的改進和貢獻中的,如果其中的信任缺失了,那麼至少作為項目發起人本人來說,他辜負了其他參與者的熱情和努力,就必須面對自己在項目中”涼了“的前景。

開源的深層悖論

有一個經典的比喻,說商業軟件的開發,是一個自上而下的系統工程,就像建造一座”大教堂“;而開源軟件的開發過程是一群級別平等的人,共同為某個事物貢獻自己的一點力量,聚沙成塔,資源互換,更像一座熱鬧的”集市“。

”大教堂與集市“的對比,讓堅持開源路線的人們頗為自豪。中心化的商業軟件開發流程,容易受到防不勝防的外界侵襲,也不能對新湧現出來的需求做即時,快速的反應,顯得步調遲緩笨拙。

相比之下,開源軟件的每一個細節,都暴露在”陽光之下“,只要有心,人們都可以發現,所以理論上任何一點想拿開源產品”圖謀不軌“的做法都不會得逞。正如有人懷疑AntD”下次會不會直接用代碼挖礦“這樣的擔憂,就應該是沒有必要的。

但是,今天這起事件的發生,又反映了什麼?為什麼理應有人看到並監督的問題,卻安靜地躺了兩個月都沒人發現?

航通社認為,答案可能就出在大企業作為初始貢獻者,給用戶們帶來的這份”安心感“。

以”因為信任,所以安全“作為口號的支付寶,雖然一度曾經做過”社交“的嘗試,但至少在管好我們廣大網民的錢袋子這個本職工作上,還能說是盡職盡責,讓人放心的。

螞蟻金服開發的AntD也因為清亮的設計語言,以及嚴謹,簡約的代碼寫作而受到程序員們的好評,還是體現出了大企業規範的開發流程,和靠譜的開發人員的好處。

不過,可能恰好因為這一點,使用AntD的人們會在不知不覺間,忘記這是一個開源軟件,而且它誕生的本意是支撐螞蟻金服內部產品的前端設計。

在螞蟻金服內部的工作環境裡,員工們可能都喜歡過聖誕,都能讀出彩蛋背後的含義,並正確地理解它。所以,一次性把所有按鈕都加上彩蛋,如果在螞蟻內部的話,可以說無可厚非。

當AntD的適用範圍走出螞蟻內部之後,開源社區本來應該盡到代碼審查的義務。在實際使用之前,每個單獨的用戶都要仔細看這個代碼的各部分是否已經充分滿足了自身業務的需要,有什麼不足或多餘的地方,如果是能影響到很多人的問題——就比如”下雪“,就應該及時反饋給初始開發者,讓他們改進。

因為對螞蟻作為大公司的”信任“,這次應用AntD並不幸中招的前端同學們,可以說都沒有再花心思去審查代碼。”最安全的地方“也就變成了”最危險的地方“。

現在,大公司擁抱開源,將非核心業務甚至部分核心業務代碼開源,依靠訂閱服務而不是單獨產品賺錢,已經成為一種通行做法,像微軟、IBM這樣的大公司,其從商業”教堂“到開源”集市“的大轉彎更讓人瞠目結舌。

大多數時候,多些商業公司做開源,總是好事。代碼共享出來了,就會有更多人的精力被解放,不至於”重新造輪子“;而全球研發人員的智慧也能一定程度共享,依靠全球社區的力量,更能建造一座完美的”通天塔“。

只是,正如上面提到的一樣,這一切的基礎,都應該是基於”信任“這個核心價值。

不管是AntD這種”好心辦壞事“,還是早前Facebook曾針對React Native設下的專利”陷阱“,都挫傷了社區對於項目的信任。其結果,本來安心使用的客戶們倉皇出逃,尋找替代品,一切從頭再來,大量增加無效的重複建設的成本。

我們都說,現在你裝個App,連許可協議和隱私協議都懶得看,都是一路下一步的,那人家遞給你的現成品,你還要拆開看看它有沒有害你,是不是太神經過敏了,也太強人所難了?

要想大家都舒服一點,那除非所有自認為擁抱開源的大公司,都更認真的對待自己在社區的角色,通過更嚴格的自律和自我審查,才能讓大家繼續安心用著你的產品,真正的為開源做出貢獻。

(文中所有未註明的圖片來源,請參考圖片的水印)

“老板问我按钮为什么被狗啃了”

歡迎隨手轉發到朋友圈。尋求轉載授權,請關注微信公眾號航通社 (ID:lifeissohappy) ,並在後臺留言輸入關鍵字轉載。轉載時請保留版權信息。

記得點下面的 好看


分享到:


相關文章: