從操作系統設計理念的變化看移動互聯網對IT技術發展的影響

題目的帽子可能有點大,不過我會盡量把自己的觀點表達清楚一點。爲什麼我會關注並且思考操作系統設計的理念變化呢?都是因爲早些時候在某乎看到了一干不明身份的程序員指責微軟的Win RT框架屏蔽了絕大部分Win32 API,他們不明白爲什麼微軟要做這麼“愚蠢”的決定發佈了一個功能殘疾的新平臺。對於這個問題可以簡單的用四個字回答:爲了安全。但是安全只是微軟重鑄Win RT的直接目的,而這麼做的動機也是順應了時代潮流和技術發展趨勢而已。並不是微軟故意要做個殘廢的平臺,只是習慣了靠Windows平臺開發來喫飯的那波人思想還停留在傳統操作系統應用軟件開發的階段,他們沒有注意到移動互聯網的發展正悄悄的對IT行業中的各種技術格局產生了潛移默化的影響。

 

那Win RT是在順應什麼潮流和趨勢呢?當然是爲了打造移動終端的操作系統,所以Win RT也是在像IOS和Android系統的設計思想看齊的。而Win RT屏蔽了絕大部分的Win32 API,也只是在自我閹割傳統操作系統的功能,其中最突出的三點就是:進程絕對隔離,用戶接口去文件系統化,軟件分發安裝受控,而這三點也是目前以及將來一段時間內消費級市場操作系統的設計準則。瞭解操作系統原理都應該知道,文件系管理和進程管理是操作系統五大功能之中的兩條不可缺少的功能,而軟件的分發和安裝應該是限制越少越高效自由,現在要做出這樣的改變能對安全有什麼貢獻呢。

 

讓我們來回顧一下操作系統的發展歷史。20世紀80年代,最早的DOS操作系統,整個系統就是以磁盤文件系統爲核心操作對象,這個時候操作系統中進程的概念雖然存在但是並不明顯。用戶接口只有文字命令行模式,對使用者的友好程度不必多說,讓一個完全沒有相關知識的人接受計算機都是很費力的事情。同時期的還有Mac操作系統,Mac比DOS領先採用了圖形化界面,對使用者的友好度提高了一個檔次,當然文件系統在用戶接口中還是存在的。20世紀90年代開始,操作系統兩大家族也形成了自己的格局,擁有圖形化界面的Windows和類Unix操作系統都慢慢迭代,其中Windows在消費級市場中佔據了主要地位,Linux一族在服務器市場嶄露頭角,而Mac OS則成爲一種個性和品味的追求,直到現在在PC市場這種格局依然沒有太大變化。這些操作系統雖然給人的感覺是千差萬別,但是他們卻有着相同的原理和理念,而其中Windows算是又是最最徹底的貫徹了對開發者友好靈活的思想,無論是在進程管理還是在文件系統方面,Windows都要比其他兩個系統開放的多的多,而整個系統模塊化,分層化也要比其他兩個系統複雜。關於進程隔離和文件系統的現狀是什麼樣呢?

 

一 進程隔離

在進程隔離方面,每個操作系統都做到了,但是目前PC操作系統中實現的隔離僅僅是進程運行時地址空間的虛擬隔離和複用。然而除了進程隔離之外,Windows還提供了各種各樣的跨進程操作的方式,IPC,遠程內存讀寫,各種各樣的全局回掉等。而這些技術接口的提供完全是基於一個假設:這個世界上沒有惡意的開發者,沒有人會去做破壞別人進程的事情。這僅僅是一個道德約束,事實是這個世界上有太多惡意的開發者,他們就是要盜取別人的信息,就是要破壞別人的進程。你在網頁輸入銀行密碼,卻不知道另一個進程已經讀取了瀏覽器的內存,獲取了你輸入的明文密碼。這可能是一個木馬做的事情,當然也可能是一個正義感滿滿的殺毒軟件做的,這些事情沒有人可以控制。所以世面上就出現了各種衛士和管家,這些軟件都是具有侵入性的,他們首先就破壞了操作系統本身的完整性和獨立性,其次也讓和他們共存的所有軟件都失去了隔離的環境。這也是最近十年中殺毒軟件和防護軟件發展迅猛,戰火燎原的原因,進程的不完全隔離,Windows給開發者提供了太過靈活開放的技術接口。

 

所以在進程隔離的改進上,三大平臺是如何做的呢?Android整個系統架構應該是三個系統中設計最簡單最偷懶的一個系統了,所以在進程隔離這方面做的是最簡單粗暴的。Android底層是基於Linux,上層應用框架全部運行於虛擬機中,並且每一個App是獨佔的虛擬機進程,所以如果框架不開放接口,一個App要想跨進程訪問另外一個App的運行時信息比如內存等,就要想辦法先實現虛擬機逃逸了,這也是直接使用虛擬機來作爲App運行時容器的一大優勢了,省去了不少操作系統的設計問題。當然另一種方法是利用NDK開發native模塊來做這種嘗試,但是也要突破Linux系統自身的權限管理,然後還要想辦法實現Linux入侵到另一個進程的內存空間。而IOS系統的APP還是Native層面每個App進程就是一個系統進程,直接運行於OC Runtime之上,同樣在內存隔離方面也是由UNIX系統提供的保證。而到了Windows,事情就複雜了,因爲Windows提供了過於開放接口,所以爲了適應移動操作系統的安全,簡單的特性,必須放棄一些在Win32子系統中存在的特性來實現進程內存的絕對隔離。所以Win32只能是Win RT框架,所以進程管理方面的API是肯定要屏蔽的,還有內存讀寫,以及一切可能出現進程加載外來模塊的功能都要在Win RT中去掉。

 

二 文件系統化

文件系統管理是操作系統的一個必不可少的功能,這一點毋庸置疑也不會出現什麼顛覆性的變化,但是文件系統對於一個只是希望使用計算機來進行日常工作娛樂的普通用戶來說太過複雜了。對於初次接觸計算機的人都會要迷惑一下文件和文件系統的概念,而出於保護目的給操作系統自身的文件的訪問增加一些警告,這也會讓用戶感覺收到束縛。所以目前流行的操作系統對於普通用戶來說暴露程度太高,影響用戶的使用體驗。另一方面由於文件系統接口過於開放,進程之間可以相互訪問對方的文件,無論數據還是可執行文件,這樣也不利於保證應用程序的自身完整性。可以想象一下,十年前開發一個軟件沒人會在乎別人來篡改他已經分發安裝在用戶終端上的文件,可是現在,你不帶個驅動加個文件過濾你就無法避免別人惡意修改你的文件。但即使加了驅動也無法防止某些權限更高的軟件修改文件,比如衛士管傢什麼的。這也反映出目前PC端軟件開發的環境多惡劣,辛辛苦苦做完業務還要絞盡腦汁的去考慮安軟件自身安全問題,這些問題本應由操作系統負責處理的。

 

在這用戶接口層去文件系統這一點上,IOS是做的最徹底的,用戶不會直接的和各種類型的文件接觸到,而每個APP自己控制自己的文件訪問,而文件的位置也全部由系統決定,所以在IOS裏面沒有文件系統這個概念。Android做了折中的處理,在APP框架中提供了類似IOS一樣的訪問控制,即爲APP提供固定的存儲位置。同時Android保留了對文件系統的訪問,所以Android上還是有很多文件管理器,用戶仍然可以看到一大堆各種各樣類型的文件,包括系統文件,以及APP自身的各種文件。而Windows Phone從7.0版本開始就把文件系統接口在用戶層屏蔽了,但是到了8.1又加回來了,所以現在Windows Mobile系統也是採取了這種做法。但是無論那種方法,APP在運行時是無法訪問未授權的文件系統路徑的,比如一個APP是沒有辦法讀取另一個APP的數據和代碼文件的。所以這是一個趨勢,會有越來越少的人需要去訪問複雜的文件系統的。

 

三 軟件分發安裝

傳統的PC軟件的分發和安裝過程十分自由,軟件開發商開發軟件然後通過各種介質分發安裝程序。用戶只需要安裝程序即可安裝軟件,中間沒有任何約束限制,操作系統提供並沒有參與應用軟件的分發安裝過程,同樣的軟件的更新升級都是需要軟件開發商自己維護。這樣的軟件分發流程是非常靈活,但是不可否認的是這種分發安裝方式有太多的缺陷和不安全因素。比如安裝程序的可信任無法保證,程序行爲無法控制,升級方式複雜等,最重要的一點是盜版嚴重。而在中國市場還有另一個更有趣的問題,殺毒軟件廠商控制了所有軟件安裝的入口,某個公司歷經數年開發了一款新產品,可是等到發佈的那天發現,所有衛士管家都主動攔截了他們的安裝包,雖然是經過了合法的數字簽名,還是被這些流氓軟件用鮮紅的TIPS恐嚇用戶。後面就開始跟殺軟廠商溝通,A說你給我推廣就放行,B說給錢就給你放行啊。有沒有覺得在中國做PC產品是那麼艱難?這真的是目前中國PC端軟件產品的現狀!

 

所以,操作系統開發商就收緊了應用軟件分發的渠道,App Store, Play Store 和 Windows Store,通過這種方式,一方面可以控制應用的安全問題,保護用戶隱私,也保證應用生態圈中不會出現流氓軟件。另一方面個可以有效的防止盜版,保護軟件開發者的知識產權和經濟收入。也省去了應用的升級模塊問題,簡化開發。

 

所以總結來說,進程絕對隔離,應用接口層去文件系統化,應用軟件的受控分發和安裝是目前移動端操作系統的三大鮮明特性。Windows 也不例外,所以開發者需要轉變自己的思維,跳出傳統PC應用軟件開發的思維框架。而移動端經過最近幾年的發展對互聯網領域的技術格局也產生了極大影響。移動端應用開發相比傳統PC開發太過簡單,而移動操作系統開發商還在更加努力的讓移動開發變得更簡單,因爲他們要圈人來擴大自己的生態,所以降低門檻永遠是他們的不二選擇。例如Android在設計之初就選擇了Java作爲其應用開發語言,想必也是出於Java開發人員數量龐大,而且是一門入門門檻很低的語言的原因了,但是Delvik虛擬機的指令集的設計不得不說有點鼠目寸光了,不然也不會撂下一個方法數的問題這麼多年都沒從根本上去解決。而蘋果則基於LLVM開發了新的編程語言Swift,一方面是想取代很多開發者吐槽的OC,另一方面也是想繼續保持IOS開發者生態的獨特性。Windows呢?從Windows Phone 7的時候只支持C#,到了Windows Phone 8 又發佈了C++/CX來支持Win RT開發,同時支持VB,HTML5,JavaScript。而到現在UWP平臺,也是支持多種語言選擇,並且開源了.NET,提供了一個跨平臺的.NET Core運行環境和.NET FX框架。如果在降低門檻的同時能夠不斷改進提高操作系統本身,讓那些因爲門檻低而湧入的低水平開發者開發的代碼也能很好的運行,這纔是一個負責任的操作系統開發商,也是一個優秀的系統。

 

可以看到市場對於C/C++這些底層技術的需求在逐漸減少,並不是虛擬機語言的性能已經趕上了Native語言,而是由於移動應用的使用場景不不需要顧慮不同開發語言技術框架的性能差別了,而且如今的硬件性能足以彌補不同技術之間的差距(硬件性能提升對Web前端技術的發展影響最明顯)。而在開發者眼裏開發效率比比其他因素都顯得更重要,這也是虛擬機語言越來越流行的一個原因。這些改變在Server端開發中也是很明顯的,Python,Ruby等語言在後臺開發中的比重提升就能證明,運行效率夠了,開發效率就成了決定因素。

 

這一系列的變化,對Windows平臺的開發者來說應該是最難適應的了,因爲微軟最近幾年的行爲顯得如此緩慢和不靠譜。可以預見的一點是傳統Windows應用軟件最終會慢慢的淡出消費者市場,但是並不會消失,因爲在工業科研教育等專業領域仍然是無可替代的。而在消費者市場UWP最終會擠掉傳統應用的份額。所以如果作爲Windows開發者的你不想轉而去做後端,做Android和IOS,那就低下驕傲的頭做.NET吧,也不要在偏執的去做什麼C++/CX了,開發效率決定了市場需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章