科技簡章047-作業系統從unix到安卓

最近有很多寫華為鴻蒙作業系統的文章,在我寫鴻蒙之前先寫這一篇讓大家對作業系統的發展歷程有個大概的瞭解。

最早的計算機是沒有作業系統的,當時人們使用的是穿孔卡和紙帶讀取器將程式和資料輸入計算機中,然後等待計算機執行這些程式。而彼時的計算機都是大型機,非常昂貴,數量也極少,大家都得排隊預約使用時間。

慢慢地隨著排隊使用計算機的人越來越多,就誕生了“操作員”這樣的角色,使用者將程式交給操作員,操作員把一批批的程式載入到計算機中。等計算機完成程式執行,操作員再將結果給到使用者。這應該算是最早的人肉“作業系統”。

隨後,“操作員”的角色被程式代替,這個程式能夠“裝載使用者程式”、並將計算機中的CPU、I/O等裝置集中起來進行排程作業。這是一種“批處理”的方式,使用者按照先後順序“獨享”一臺計算機的資源。

50年代,一位叫麥卡錫的科學家覺得這種使用計算機的方式實在是太沒有效率了,再小的程式都讓計算機跑一趟,所有人等著,實在是太浪費資源了。既然CPU在執行任務的時候,從一條指令切換到另一條指令的速度非常快,那就每幾個週期都讓CPU從一個記憶體區域和程式切換到另一個記憶體區域和程式,反正使用者也感覺不到自己的程式被切換了,覺得自己在獨享計算機資源。麥卡錫將這種方式稱為“分時”,如果這幾年起名,估計會被稱為“共享”,呵呵。

為了實現分時操作,麥卡錫用自己開發的LISP語言給計算機添加了“中斷系統”,讓計算機可以停止一個工作,切換到另一個工作。中斷系統後來成為作業系統的極為重要的部分,它實現了計算機資源的轉移和分配,從而實現計算機的多工處理。

1961年,費爾南多·科爾巴託演示了一個完全可行的“相容分時系統”。

分時系統的嘗試,促使了一個野心更大的專案,Multics的誕生。

1964年,由貝爾實驗室、通用電氣和麻省理工共同發起了大型主機作業系統Multics專案。這個專案其中一個牽頭人是

約瑟夫·利克萊德,他最早提出了“星際計算機網路”的概念,是麻省理工心理學和人工智慧專家。1960年,他設計了以寬頻通訊線路連線的電腦網路,也是網際網路的初期架構,是被公認為網際網路的開山領袖之一。以後在專門講網際網路的時候,他還會再次出來客串。

不過,這個專案由於目標難度太大,當時技術條件又有限,所以1969年徹底黃了。

貝爾實驗室參與這個專案有一個叫肯·湯姆森的人,他基於Multics寫了一款叫

Space Travel的遊戲。現在專案黃了,但湯姆森同志想玩遊戲的初心不改,但專案專用的大型計算機已經不給他用了。沒辦法,湯姆森就只能把遊戲移植到一臺破舊的小型機PDP-7上,打算繼續肝遊戲。

要運行遊戲,你得有個作業系統,就像我們今天裝王者榮耀你得有蘋果OS或者安卓才行。於是,湯姆森為了玩遊戲,自己寫了個作業系統!Multics之所以黃,是因為想要的功能太多、太複雜,而湯姆森只想玩遊戲所以就搞了個精簡版的。

但PDP-7是一臺老爺機,Space Travel當初可是執行在大型機上的遊戲啊,結果就是,雖然作業系統寫出來了,但遊戲執行起來卡得不行。湯姆森就繼續研究,發現主要問題出在操作檔案的時候會消耗過多的記憶體,於是他又自己動手寫了個分層式檔案系統,還順手寫了個簡單的命令列直譯器shell。

1970年,湯姆森的這個精簡版的Multics作業系統被同事布萊恩·克林漢取名為UNIX(Uniplexed Information and Computing Service),實際上就是對Multics(Multiplexed Information and Computing Service)開了個玩笑。

對,這個為了遊戲肝出來的作業系統就是大名鼎鼎的UNIX。最早版本的UNIX是用匯編語言寫的,湯姆森為了讓其更好地執行在PDP-7這臺小型機上,自己又開發了一種新的程式語言寫了一版,這種新語言被起名為B語言,是基於BCPL語言的修改版,並添加了一些湯姆森個人的偏好,以及開發了B語言編譯器。

1970年,湯姆森的UNIX專案獲得了資助,他用錢買了一臺PDP-11,這臺計算機就要強大許多,於是湯姆森的同事丹尼斯·裡奇又基於B語言搞出了C語言,以充分利用性機器的位元組定址和其他特性。

到了1973年C語言已經變得很強大,於是他們用C語言重寫了大部分UNIX核心,UNIX成為第一個用高階計算機語言編寫的作業系統。

1977年,隨著C語言的進一步發展,裡奇和史蒂芬·約翰遜又開發了一版可移植的UNIX作業系統和可移植的C語言編譯器,這讓C語言和UNIX可以更加輕鬆的擴充套件到其他平臺。

這個C語言編譯器和UNIX的原始碼都是免費的,當時只需要支付幾百美金許可費就可以獲得,如果是大學團體,不但能獲得程式碼還可以獲得一個教學和研究平臺。

開源和免費,為UNIX開發者社群大家踴躍分享程式碼、提交Bug起到了示範作用,促進了UNIX的普及和生態建設,也誕生了不同版本的UNIX。

到了1979年,UNIX已經發布到了第七個版本,此時貝爾實驗室的母公司AT&T意識到了UNIX的商業價值,在第七版之後開始禁止大學使用原始碼。1980年,UNIX原始碼不再對外開放,1984年AT&T開始對UNIX進行收費。由此,UNIX作業系統裂變成兩條主線:

一條是AT&T的商業版本,另一條是加州大學伯克利分校開發的半開源版本Berkeley Software Distribution Unix,即著名的BSD。

在商業版本中,1980年前後,微軟與SCO公司聯合將UNIX 第七版移植到摩托羅拉的MC 680XX系列微型計算機上,後來又將其簡化移植到了Intel8080上,稱為Xenix。後來SCO將SCO-Xenix改為SCO Unix,漸漸成為微機版 Unix 主流作業系統。

1982年,SUN公司推出執行在摩托羅拉680x0 平臺上的 UNIX OS。1988 年,釋出 SUN OS 4。0,把執行平臺從早期的 680x0 平臺遷移到 SPARC 平臺,並支援 Intel 8086。1992 年 SUN 釋出了 Solaris 2。0。1998 年開始,Sun 公司推 64 位作業系統 Solaris 2。7 和 2。8。

SUN也是一家很有意思的公司,它依靠其基於UNIX變種的Solaris作業系統和發明的Java程式語言,成為在作業系統領域最有可能挑戰微軟的公司,1996年還差點收購蘋果。高峰期市值達到2000億美金,同期的谷歌和IBM市值才1700億和1600億美金。可惜SUN在2009年被甲骨文收購的時候才56億美元,也是讓人唏噓。

此外,UNIX商業版本中還有IBM的AIX以及惠普的HP-UX。

BSD的版本衍生出Sun OS、NexTSTEP等。

另外,蘋果的Mac OS X,iOS

採用了Darwin核心,Darwin核心是UNIX系統的一個變種。

1984年,在AT&T開始對UNIX進行收費這一年,麻省理工人工智慧實驗室的理查德·斯托爾曼創立了“自由軟體基金會”即GNU,目標是開發完全免費的軟體,讓每個使用者都能自由下載、使用、修改和釋出。為了保證原始碼公開、免費共享,他定製了GPL許可證,要求使用者對軟體所做的任何修改都必須遵循相同的GPL開源許可證進行釋出。

GNU的理念吸引了很多計算機科學家的加入,也誕生了很多非常流行的軟體,其中之一就是Linux。

1991年,林納斯(Linus)·託瓦茲從赫爾辛基大學畢業,他買了一臺基於英特爾386CPU的個人計算機,想在上面執行UNIX,於是購買了由安迪·塔南鮑姆教授開發的Minix。這也是一個UNIX作業系統的變種,是一個極為精簡的版本。

受到Minix的啟發,林納斯也搞起了基於UNIX核心的個人計算機作業系統開發,很快他搞出來一個新的作業系統Linux,並把原始碼放在了網際網路上:求體驗、求修改、求指正。

不過嚴格意義上來說,此時的Linux只能算是一個核心,算不上完整意義的作業系統。

世界各地的UNIX社群都對林納斯的表示了熱情,紛紛對Linux進行“添磚加瓦”,當時來自12個國家的80多位開發者做出了貢獻。在大家的共同努力下,1994年3月,Linux釋出了第一個正式版本,程式碼量17萬行,加入GNU,正式採用GPL許可模式。

同年10月,Marc Ewing釋出了基於Linux核心的發行版本,取名為Redhat Linux,並於1995年被ACC收購,兩者合併成立了Redhat軟體公司,在市場上為自家版本的Linux作業系統提供服務,以軟體訂閱費、服務費以及培訓費作為收入模式,開創了開源軟體的商業模式。

RedHat發展得很成功,於

1999年8月11日上市,實現了華爾街歷史上的第八大首日漲幅。在2012年,收入達到11。3億美金,成為首家收入過十億的開源軟體公司。以後開源和收購兩步走,一直髮展得不錯,直到2018年10月29日,被

IBM

以340億美元的價格收購。

以Linux核心為基礎,出現了很多開發團體,對核心程式碼進行修改、補充,加入了圖形介面和應用介面等,形成了相應的Linux作業系統發行版以及應用軟體生態。Linux作業系統版本之間存在衍生關係,形成以RedHat、Slackware、Debian為代表的幾大門派,各個門派又衍生出不少著名的版本,比如Ubuntu、SUSE、CentOS、Red Hat Enterprise Linux、Fedora 等。

Linux 作業系統採用了與 Unix 幾乎完全一致的體系結構,具有類似的設計哲學: 一切都是檔案,包括命令、硬體裝置、軟體和程序等等,這些對於作業系統核心來說都被視為擁有各自特性或型別的檔案。

Linux完全免費,原始碼符合GPL許可協議,使用者可以免費獲得、任意修改,只要符合GPL規定,就可以參與到開源專案的發展中,這極大程度加快了Linux的傳播和漏洞發現的效率,增加了系統的安全性和穩定性。

其他人提交開源程式、修改措施,但Linux的核心由林納斯的核心團隊決定接受哪些程式碼和修改,換句話說,雖然Linux作業系統有很多版本,但Linux的核心是統一的。但這裡還是有一個問題,Linux作業系統版本太多,對於應用軟體開發商來說不友好,他們需要分別開發對應的應用軟體,增加了開發工作的複雜度和研發成本。也是因此,Linux並沒能像Windows一樣成為一款統一的商業桌面系統。

除了版本多之外,Linux沒有成為Windows還有另外一個原因,它當時沒有形成英特爾+微軟這樣的王者聯盟。但這件事到了Linux的安卓時代,出現了變化。

2003年安迪·魯賓等人聯合創立了Android公司,

Android這一詞最先出現在法國作家利爾亞當在1886年發表的科幻小說《未來夏娃》中,安迪·魯比是一個機器人迷,給公司起了這個名字,現在我們看到的安卓小人其實就是個小機器人。

安迪基於Linux核心寫了安卓作業系統,但他能搞出來作業系統並不是偶然。他早年是蘋果的員工,1990年蘋果將手持電腦部門和通訊裝置部門剝離出來,成立了一家叫

General Magic的公司,1992年安迪加入了這家公司。

General Magic當時研發的東西叫Magic Cap,這是一個意識極為超前的智慧手機作業系統。它在那個時候所創意的作業系統,就是我們今天用的智慧手機。不僅如此,關於智慧手機上的應用,比如社交、電子商務等等,在這個團隊大家都貢獻了豐富的暢想。

但很可惜,太超前了,最終專案失敗。之後三名蘋果元老成立了Artemis,安迪加入,1997年這家公司被微軟收購,他又留在了微軟搞超級機器人專案。但他做的機器人由於被駭客入侵,後來被微軟打入冷宮。

1999年,安迪離開微軟創辦了Danger,一邊造機器人,一邊研發出了“智慧手機”

T-Mobile Sidekick。據說微軟後來推出的windows phone作業系統有部分技術購買自安迪手中的Sidekick。

2005年,谷歌收購了安迪創辦的第二家公司Android。

2008年9月,谷歌正式釋出了Android1。0系統。2014年安迪·魯賓因X醜聞離開谷歌。

2009年4月30日,谷歌釋出Android 1。5,這一版作業系統正式運用在了手機上,首款搭載安卓 的智慧手機是HTC G1。2009年9月15日,谷歌釋出了Android1。6的正式版,搭載的手機是HTC Hero G3。

但2009年,安卓剛起步的時候只有2。41%的市場份額,當時諾基亞的非智慧手機作業系統Series40佔35。49%的市場,iOS佔34。01%。

真正讓安卓在智慧手機中起飛的原因,不僅僅是它背靠谷歌這樣的大公司,諾基亞還大呢,而是它借鑑了英特爾+微軟即wintel模式,成功的建立了CPU+OS的王炸組合。與谷歌攜手的這家CPU就是乘借智慧手機東風躍起的ARM,它倆結盟為Android+ARM。

不過ARM並不直接生產晶片,它為晶片設計公司提供IP授權,帶動了下游fabless和晶圓廠的繁榮。

Android+ARM成功的建立了統一的技術體系,包括IP授權、軟體工具開發包、編譯器、軟體規範等,以及配套的軟體服務商業模式,牢牢鞏固了其包括核心程式碼貢獻者、應用軟體開發者、晶片廠商、整機廠商、服務提供商、使用者等形成的生態。

由此我們可以看出,開發作業系統依賴技術,但要建立成功的作業系統,生態之戰是核心。

看到這裡可能就會有讀者問,安卓既然是開源的,為什麼華為又不能用了呢?

安卓實際上是由開源專案ASOP和谷歌提供的GMS服務組成。

這裡的ASOP即安卓開放原始碼專案,由谷歌發起,是開放的部分,任何人都可以使用安卓原始碼。

而谷歌GMS,即谷歌移動服務,是不開源的。海外安卓使用者嚴重依賴GMS,當他們登入谷歌商店時必須使用谷歌三件套:谷歌服務框架、google play和googel play服務。而這三件套都是基於GMS來執行的。如果海外使用者的作業系統沒有獲得谷歌GMS授權,是無法下載、安裝APP的,很多APP沒有GMS甚至無法執行,即便安裝成功也會閃退。

國內的安卓手機一般是沒有GMS的,即便有你也沒法用,因為要使用谷歌的服務得翻牆。我們沒有google play但有很多第三方應用商店下載APP,但這些應用是不受谷歌軟體稽核的,所以,嗯可能有一些會訪問隱私的流氓軟體。

此外,GMS有一個功能就是統一的後臺訊息推送,比如你微信有新訊息時,GMS會發推送提醒。但你可能會說,沒有GMS我也天天收到微信訊息啊,這又是怎麼回事。

這是因為國內的APP廠商另闢蹊徑了,它們以頻繁“自啟動”的方式長期佔用手機記憶體資源,以此來實現實時推送訊息的目的。還有不少APP互相結盟,進行交叉互喚醒。最終的結果就是,因為長期佔記憶體導致手機耗電比較快。

國內比如小米有自己的服務框架,來完成統一的訊息推送等服務,這也是為什麼很多人在後臺發現“小米服務框架”一直在程序中,在耗電的原因。

由此我們可以看出ASOP是開源的,但GSM是不開源的。如果要使用和修改GMS必須拿到谷歌的授權才可以,而海外市場強依賴GSM,如果沒有谷歌授權手機出口就會受到極大的影響。

所以,華為沒有拿到的不是安卓原始碼的授權,而是GMS的授權。換句話說,開源的安卓作業系統華為還是可以用的,只是沒有GMS而已。但這對華為的手機出口自然會造成極大的影響。

為了擺脫對GMS的依賴,華為2019年8月釋出了自家的HMS服務,以取代GMS服務。截至2021年第一季度,華為HMS已經有超過270萬註冊開發者,應用數量超過13。4萬。

雖然這與2018年win10作業系統3500萬應用,2017年Googlepay 350萬個APP,蘋果APP store 210萬個APP還有相當的距離,但從無到有已經是進步。