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