你想知道,Microsoft Edge這種巨型項目是如何進行版本管理的嗎?
本文轉(zhuǎn)載自微信公眾號「郭霖」,作者郭霖。轉(zhuǎn)載本文請聯(lián)系郭霖公眾號。
不知道你有沒有好奇過,像Microsoft Edge這種巨型項目是如何進行版本管理的?
當(dāng)然關(guān)于這個問題我就需要先解釋一下,因為Edge是多么巨型的一個項目很多人可能并沒有概念。
事實上,其實我也沒有概念,因為我知道自己接觸的只是冰山一角,可能絕大多數(shù)人看這個項目的代碼都像是在管中窺豹一樣。
Edge是微軟研發(fā)的一款基于Chromium內(nèi)核的瀏覽器,而Chromium則是由Google推出的一個開源瀏覽器項目。
那么Chromium有多么龐大呢?很可惜,我沒有找到最新的數(shù)據(jù),但是根據(jù)2019年的數(shù)據(jù),Chromium項目的總代碼行數(shù)達到了3400多萬行,純代碼行數(shù)(去除注釋和空行)也有2500多萬行。
毫無疑問,這簡直就是一艘航空母艦,因此相信沒有人敢說自己對這個項目是完全了解的。
而Edge相比于Chromium還會更大龐大一些,因為微軟還會在Chromium的基礎(chǔ)之上添加許許多多自己的功能。
那么再次回到開始的問題,你有好奇過像Edge這種巨型項目是如何進行版本管理的嗎?
今天我們就來揭秘一下。
首先要說明的是,接下來我要講解的Edge版本管理與發(fā)布規(guī)則并不是由微軟發(fā)明的,而是遵循的和Google Chrome完全相同的規(guī)則(畢竟是基于Chromium內(nèi)核的項目),因此不涉及任何微軟的內(nèi)部機密。
這套規(guī)則我認為是相當(dāng)科學(xué)與成熟的,我敢肯定除了Edge和Chrome之外一定還存在大量成熟的項目也使用的是類似的規(guī)則。而對于一些還沒有形成自己規(guī)則的小項目,我覺得正好可以趁此了解一下本篇文章中介紹的內(nèi)容,讓你們的版本管理變得更加科學(xué)。
首先跟大家介紹一下Chromium內(nèi)核版本號的概念。
可能對瀏覽器比較關(guān)注的朋友或多或少有聽說過,比如Chrome 80發(fā)布了,Chrome 90發(fā)布了這樣的新聞。這個后面的版本號對應(yīng)的就是Chromium內(nèi)核的版本號。
許多國內(nèi)瀏覽器也是基于Chromium內(nèi)核開發(fā)的,它們有時也會在宣傳時加上Chromium內(nèi)核版本號的說明。
比如QQ瀏覽器是基于Chromium 70內(nèi)核開發(fā)的。
360安全瀏覽器是基于Chromium 86內(nèi)核開發(fā)的。
那么這個內(nèi)核版本號是按照什么樣的規(guī)則進行升級的呢?
其實很簡單,根據(jù)Chromium的規(guī)則,每6周會升級一次內(nèi)核版本號,雷打不動(從今年9月份開始,Chromium會將規(guī)則改成每4周升級一次內(nèi)核版本號,不過由于是將來時,每篇文章仍然以每6周進行講解)。
也就是說,如果當(dāng)前最新的Chromium內(nèi)核版本號是90,那么6周之后就會變成91,以此類推。
在這6周時間里,會有無數(shù)代碼被提交進Chromium的主線代碼倉庫中,而這些代碼變更也就會將成為Chromium 90與91內(nèi)核之間的所有功能差異。
了解了這些內(nèi)容之后,接下來我們回到Edge。
目前我所在的團隊是微軟的Edge Android團隊,Edge Android版的官方上架渠道就只有一個:Google Play。(雖然在國內(nèi)的一些手機應(yīng)用商店也能下載到Edge,但是這些商店的版本有些可能是從其他地方爬來的,有些則更新不太及時)
如果你嘗試在Google Play中搜索Edge,你會發(fā)現(xiàn)其實Edge并不是只有1個版本,而是會有4個。
這對于一些小白用戶可能直接就給整懵圈了,搞這么多版本干啥,我都不知道該用哪個好了。
是啊,直接就上架一個穩(wěn)定版不就好了嗎?為什么還要分什么Canary、Dev、Beta版本?
這是因為,每個版本都有它們各自不同的作用,4個版本結(jié)合到一起則能讓整個項目變得格外穩(wěn)定和健壯。
接下來我就逐個介紹一下這4個版本它們分別的作用和存在的意義。
Microsoft Edge Canary
Canary是金絲雀的意思,這個單詞在軟件開發(fā)行業(yè)中很常見,但是真正了解它含義的人卻并不多。
早期這個詞匯是用在采礦領(lǐng)域里的。礦工會帶著一只金絲雀進入礦坑采礦,由于金絲雀對各種的有害氣體比較敏感,在人類發(fā)覺有害氣體前,金絲雀就會先死掉,以此讓礦工能夠及時發(fā)現(xiàn)有害氣體,盡早做出防護。
到了軟件行業(yè)中,Canary也是同樣的意思,它的主要作用就是讓我們能夠在很早期的時候就發(fā)現(xiàn)軟件中存在的問題。
如果你選擇成為Edge Canary的用戶,那么你將能夠在第一時間體驗Edge中加入的各種最新功能。因為Canary的發(fā)布頻率是每天發(fā)布一個版本。
也就是說今天我編寫的某個功能,明天你就能在Edge Canary中體驗到了。
當(dāng)然,除了體驗新功能之外,你還會體驗到很多新Bug。因為正如剛才所說,Canary版就是用來在很早期的時候發(fā)現(xiàn)問題的,所以它相當(dāng)不穩(wěn)定。如果出現(xiàn)什么功能缺失或者崩潰的情況,請不要驚訝,我們也會根據(jù)用戶測出來的各種問題及時進行修復(fù)。
不過這種版本發(fā)布頻率可能并不適用于每個項目,如果是一些比較小的項目的話,一天時間可能根本不會有太大的代碼變化,這樣的話每天發(fā)布一個版本意義也不是很大。
而Edge則每天會有海量的代碼進入到主線的代碼庫當(dāng)中?,F(xiàn)在的Edge是全平臺共用同一套代碼庫的,每天會有來自PC端的代碼更新,也會有來自移動端的代碼更新,還會有從Chromium拉取下來的代碼更新。所以,每天的Canary版本都會有許多不一樣的地方,雖然我們也不知道具體有哪些不一樣(畢竟每個人都只負責(zé)自己的一小部分),但神通廣大的網(wǎng)友總是可以發(fā)現(xiàn),并幫忙提出問題。
這也是Canary版本最大的意義所在。
Microsoft Edge Dev
Edge Dev和Edge Canary其實是有點類似的。從名字你就可以看出,它的目的也是為了讓用戶在早期的開發(fā)階段就能體驗到Edge的最新功能。
但是Dev版并沒有Canary版那么激進,它不是每天發(fā)布一個版本,而是每周發(fā)布一個版本。
是的,它們的區(qū)別只有這么多。
但是別看就只是一個發(fā)布頻率的區(qū)別,它們所面向的用戶群體就完全不一樣了。
Canary版面向的群體是那種發(fā)燒友級別的用戶,他們愿意每天更新一個變化可能并不是那么大的版本,只是為了第一時間就能體驗到Edge團隊前一天開發(fā)出來的新功能。
而Dev版面向的用戶群體則更加保守一些,每天一更新對他們來說太頻繁了(我個人就非常不喜歡更新特別頻繁的應(yīng)用),每周更新一次,體驗這一周以來Edge總體引入的各種新功能,對他們來說剛剛好。
另外,Dev版相比于Canary版也會穩(wěn)定許多。如果你是一名Canary版的用戶,今天本來還能正常使用著瀏覽器,結(jié)果明天更新了一個新版本,或許就會出現(xiàn)啟動閃退的情況。
而Dev版出現(xiàn)這樣情況的概率就會大大降低,因為它一周只會發(fā)布一個版本,Canary版上遇到的那些問題有很大的概率在Dev版上都會被修復(fù),所以相對來說你可以比較放心地去更新Dev版。
總結(jié)一下,Dev版更加適合于那些既想要體驗新功能,又希望版本能夠比較穩(wěn)定的用戶。
Microsoft Edge Beta
如果僅從更新頻率上來看的話,Edge Beta和Edge Dev的更新頻率幾乎是差不多的,Beta版也是每周發(fā)布一個版本。
但是,Beta版和Dev版的作用是完全不同的。
Beta在軟件行業(yè)中通常就是快要發(fā)布的意思,主體功能已經(jīng)穩(wěn)定,也不會再發(fā)生什么大的變更,就差臨門一腳正式上線了。
Edge Beta也是這個意思。
剛才有說過,Dev版每周會更新一次。在經(jīng)歷6周的迭代之后,這個Dev版就會轉(zhuǎn)變成Beta版。然后Beta版繼承Dev版的內(nèi)核版本號,Dev版的內(nèi)核版本號加1。
舉個例子,比如Edge正在基于Chromium 90內(nèi)核來開發(fā)新功能,開發(fā)6周之后,這個版本會變成Beta版,于是Edge就會發(fā)布一個基于Chromium 90的Beta版,同時正在開發(fā)的代碼主線內(nèi)核會變成Chromium 91。
在這種情況下,Canary和Dev版的用戶很快就能體驗到基于Chromium 91內(nèi)核的版本了,而Beta版的用戶才剛剛用上基于Chromium 90的版本。
Beta版的發(fā)布也就意味著這個開發(fā)周期中所有的功能都已經(jīng)做完了,它接下來所肩負的使命就是將這個開發(fā)周期中所做的這些功能穩(wěn)定地交付給用戶,而不是額外再引入一些下個開發(fā)周期中的新功能。
要知道,經(jīng)歷6周的迭代開發(fā)之后,功能性方面雖然已經(jīng)是完善了,但是穩(wěn)定性方面還沒有任何保證,這也是Beta版的價值所在。
和Dev版類似,Beta版也是每周會發(fā)布一個版本,但是這些版本不會再增加任何新功能,只是會修復(fù)各種線上用戶發(fā)現(xiàn)的Bug,以此不斷提升Beta版本的穩(wěn)定性。
Microsoft Edge
Beta版本再次經(jīng)歷6周的迭代之后,該修的Bug基本也就都修完了,那么當(dāng)前的Beta版可以說是一個相當(dāng)穩(wěn)定的版本,它會轉(zhuǎn)變成Microsoft Edge的正式版發(fā)布上線。
如果我們審視一下當(dāng)前的時間節(jié)點,當(dāng)?shù)?周的Beta版轉(zhuǎn)變成正式版時,其實也正是第6周的Dev版轉(zhuǎn)變成Beta版時。這樣Beta版又會開始一個新的6周的穩(wěn)定性測試周期,而Canary和Dev則會開始一個新的6周的開發(fā)周期,以此不斷往復(fù)。
所以,按照這種規(guī)則,假如你是一位Edge正式版的用戶,目前你使用的版本是Edge 90,那么此時的Beta版一定是Edge 91,而Canary和Dev版則已經(jīng)是Edge 92了。
這也是為什么說,Edge使用的這套版本管理和發(fā)布規(guī)則(也是Chromium使用的規(guī)則)相當(dāng)成熟與科學(xué),它保證了每一個發(fā)布出去的正式版本都是非常穩(wěn)定的,并且每一個版本也都有充足的生命周期。
6周的功能開發(fā)加上6周的穩(wěn)定性測試,使得所有應(yīng)該發(fā)現(xiàn)的Bug在開發(fā)和測試階段就已經(jīng)發(fā)現(xiàn)并解決完了,因此可以放心大膽地上線正式版。相比國內(nèi)一些之前比較熱門的熱修復(fù)技術(shù),在海外一是不能用,二是也沒有必要,因為即使不借助這些事后補救的黑科技,我們使用軟件工程與管理的方式也可以很好地在事前就保證好版本的穩(wěn)定性。
至于每個正式版本的生命周期其實也是一件很重要的事情。我發(fā)現(xiàn)我自己使用的一些App,完全沒有任何規(guī)律性的更新節(jié)奏,經(jīng)常是時不時給你來個新版本上線。
我通常是一個有更新必升的人,但是有些App今天升完之后,兩天后又告訴你有個新版本上線,更新日志就是修復(fù)了一些Bug,升級完之后再過兩天又彈出一個更新提醒,更新日志又是修復(fù)了一些Bug。
這種就不是一個出色的App應(yīng)該有的表現(xiàn),他們是在拿正式版的用戶當(dāng)Canary版去測試,時間久了我就再也不想升級這種App了,因為升完之后沒過兩天還會再讓你升級。
而Edge的這種機制充分保障了每個正式版本的生命周期,它固定每6周更新一次,既不會更新的太頻繁導(dǎo)致用戶厭煩,也不會太久不更新導(dǎo)致用戶流失,并且每次更新都對應(yīng)了一個全新的Chromium內(nèi)核版本。
所以,這4個版本分別的作用和面向的用戶群體相信大家已經(jīng)明白了。Canary版面向的是發(fā)燒友用戶;Dev版面向的是既想要嘗鮮又追求一定穩(wěn)定性的用戶;Beta版面向的是希望提前6周體驗到最新正式版本,但能接受一定Bug的用戶;正式版面向的則是最廣大的普通用戶群體。
現(xiàn)在你知道,像Edge這種巨型項目是如何進行版本管理的了吧。
介紹完了關(guān)于Edge的這些知識點,接下來再跟大家講一講現(xiàn)在移動端Edge的現(xiàn)狀吧。
如果你是一位細心的用戶,你可能會發(fā)現(xiàn),目前Google Play上Edge正式版竟然還是基于Chromium 77內(nèi)核的,而相比之下,Chrome已經(jīng)是基于Chromium 91的內(nèi)核了。
根據(jù)剛才6周升一版本的頻率,77的內(nèi)核差不多已經(jīng)是Chromium兩年前的版本了。
為什么會有這么大的差距呢?
這是因為,一開始PC端的Edge并不是基于Chromium開發(fā)的,使用的是微軟自己的瀏覽器內(nèi)核,而移動端的Edge則是使用的Chromium的內(nèi)核。那個時候PC端和移動端的代碼是完全不相干的,大家各做各的。
后來微軟放棄了自己的瀏覽器內(nèi)核,PC端的Edge也轉(zhuǎn)向了Chromium,這個時候Edge部門就做出了要求全平臺統(tǒng)一代碼庫的決定。
但全平臺統(tǒng)一代碼庫并不是那么簡單的一件事,這意味著移動端和PC端再也不能各做各的了,而是大家要統(tǒng)一步伐,統(tǒng)一進度,統(tǒng)一內(nèi)核版本號。
于是,移動端的Edge從那個時候開始就沒有再升級過Chromium的內(nèi)核,而是花了近兩年的時間去做了一個全新的全平臺聚合的版本。它將會基于Chromium最新的內(nèi)核版本推出,并且以后也會實時基于Chromium的最新內(nèi)核同步推出Edge的新版本(最多可能會有幾天延遲)。
而這樣一個全平臺聚合的全新Edge將會于本月下旬推出,到時候你們將會發(fā)現(xiàn)Edge的內(nèi)核版本會從Chromium 77直接躍升至Chromium 92,相當(dāng)于是一次革命性的升級。
不過,你也可以選擇不用等到本月下旬,而是今天就去嘗試全新版的Edge。因為根據(jù)剛才講過的內(nèi)容,Edge Beta版需要迭代6周之后才能轉(zhuǎn)變成Edge正式版,也就是說現(xiàn)在Edge Beta早已是基于Chromium 92的版本,并且一直在測試當(dāng)中了。
如果大家有興趣的話,歡迎加入Edge Beta版的陣營,除了能體驗最新內(nèi)核的Edge之外,還能幫助我們測試出更多的問題,以在幾周之后向廣大用戶發(fā)布一個更加穩(wěn)定的正式版Edge。
Edge Beta的下載地址是:
https://play.google.com/store/apps/details?id=com.microsoft.emmx.beta
注:需手機可以訪問Google Play。