王懷民,毛曉光,丁 博,沈 潔,羅 磊,任 怡
1(國防科技大學,湖南 長沙 410073)
2(國防科技大學 計算機學院,湖南 長沙 410073)
系統軟件是計算學科的基本概念之一,早期,此概念是關于操作系統、編譯系統等基礎性軟件的統稱.隨著計算技術應用范圍和應用模式的不斷拓展,后續出現的數據庫管理系統、網絡中間件、云計算基礎軟件,甚至網絡瀏覽器等基礎性軟件也被歸入系統軟件的范疇.今天,隨著計算技術的持續變遷,系統軟件的外延仍在不斷拓展.那么,系統軟件的本質特征究竟是什么?什么樣的軟件應該屬于系統軟件范疇,或者因為什么樣的屬性使得一種軟件應該納入系統軟件的范疇?當今的系統軟件具有什么樣的時代特點?如何認識和把握系統軟件的未來發展趨勢?這是軟件領域研究者和實踐者關注的問題.本文試圖從系統軟件的本質特征、時代特點和發展趨勢這3個方面給出關于系統軟件的3個新洞察.
系統軟件是指操縱計算系統(硬件形態或軟件系統)有效執行、為上層應用軟件提供運行支撐的軟件.本文認為,系統軟件的本質特征是“操縱計算系統執行”.這一洞察的理論源頭和技術源頭分別是阿蘭?圖靈的通用圖靈機模型和馮?諾依曼的“存儲程序”的通用電子計算機體系結構.
在軟件領域,系統軟件與應用軟件的分野并非偶然,而是圖靈可計算理論,特別是通用圖靈機模型在實現層面上映射的必然結果.阿蘭?圖靈在1936年發表的著名論文“On Computable Numbers,with an Application to the Entscheidungsproblem”[1]不僅奠定了圖靈可計算的理論基礎,而且也為系統軟件提供了理論依據.具體表現在兩個方面.
· 第一,圖靈提出,把“一個可計算序列γ由計算γ的機器所描述”,這個機器就是圖靈構思的圖靈機,并且“可以用一個整數(描述數)唯一確定一臺機器”[1],即,每個圖靈機可被規范表示或編碼.理論上講,此后發展起來的編程和編譯系統由此發端;
· 第二,圖靈提出能夠模擬任何圖靈機的機器,被稱為通用圖靈機(或通用計算機器、通用機),通用圖靈機u通過在紙帶的開頭寫入任意圖靈機M的標準描述,可以模擬計算出與M相同的序列,即,實現通用計算.理論上講,此后發展起來的操作系統由此發端.
如今,主流的計算機系統從計算模型上講就是通用圖靈機,其上執行的軟件,從表示模型上講,就是完成該軟件所描述計算的圖靈機編碼,而系統軟件正是通用圖靈機模型在軟件實現層面上的具體表現形態:從圖靈可計算角度而言,系統軟件具備接收、支撐和管理應用層“圖靈機”的能力,負責“操縱”應用層“圖靈機”的執行;從實現角度而言,系統軟件是當今各類計算系統可被編碼、可被高效加載和執行的前提和基礎.
因此,系統軟件的本質特征是“操縱”計算系統有效“執行”的軟件.這里的“計算系統”包括了單一應用軟件系統,或者分布式系統乃至未來大規模人機物融合系統,而“操縱”則具體有兩層含義.
· 編碼與加載.也即編碼并加載計算系統,實現對其執行生命周期的管理,能夠通過編排和協調硬件資源,為計算系統提供良好的通用執行管理;
· 執行與管控.也即在運行時管控硬件資源和計算系統運行時行為,從而實現對計算機資源的高效利用和高效復用.
需要指出的是:依據上述定義,單純地進行數據查詢的數據庫管理系統并不屬于系統軟件范疇,因為它不具備在運行時“操縱”計算系統執行的能力,僅僅是按照一定方式來存儲數據的倉庫.但是,如果一個數據庫管理系統加入了管理、裝載和執行“存儲過程”的能力,則該數據庫管理系統可以劃歸系統軟件.部分瀏覽器也可以劃歸系統軟件,這是因為,它們具備加載、執行和管控其中所運行的內容或插件的能力.此時,瀏覽器構成了通用“圖靈機”的物化實現,而瀏覽器內容或插件則可以被視為應用層“圖靈機”的物化實現.這也是近年來“Web操作系統”(如Google ChromeOS)[2]這一概念出現的背景.
如今,人們講“軟件定義一切”[3]“軟件是基礎設施”,一方面是指人們利用計算技術解決現實問題的一種信念,即:通用計算平臺能夠模擬(或解決)物理世界的一切問題,因此,現實世界將運轉在通用計算平臺上;另一方面是指人們利用計算技術解決問題的一種標準技術途徑:部署通用計算平臺,其中的系統軟件支持編碼及其執行.
從技術上講,系統軟件并不是與計算機硬件一起誕生的.1946年,在美國賓夕法尼亞大學問世的世界上第一臺通用電子計算機ENIAC(electronic numerical integrator and computer)還沒有操作系統、編譯系統等系統軟件,計算機程序通過純硬件實編碼,編程采用接線和開關等手工操作方式(如圖1所示).真正催生系統軟件并成為其技術基礎的是馮?諾依曼的“存儲程序”這一思想[4].1945年,馮?諾依曼等人在設計電子離散可變自動計算機EDVAC(electronic discrete variable automatic computer)時提出了“存儲程序”這一思想:將程序數據和指令數據儲存在同一存儲器中.這一思想直接為系統軟件奠定了技術基礎,使得在單一計算機和分布式系統中裝載(存儲)和管控計算系統自動執行成為可能.阿蘭?圖靈本人在 1950年發表的論文“Computing Machinery and Intelligence”[5]中也明確寫到:“數字計算機通常被認為由 3部分構成:(i) 存儲;(ii) 執行部件;(iii) 控制.”因此,通用圖靈機模型被Davis等人認為是馮?諾依曼“存儲程序”思想的源頭[6].

Fig.1 Programming ENIAC by a combination of plugboard wiring and portable function tables[7]圖1 通過插接板接線和“移動式轉換裝置”進行ENIAC編程[7]
(1) 操縱方式1:“編譯加載”應用軟件
隨著“存儲程序”思想的提出,應用層“圖靈機”的具體編碼能夠以數據的形式存儲.這催生了最早的匯編語言,一種作為機器體系結構抽象的符號化語言.然而,計算機能讀懂的只有機器指令,此時就需要一個能夠將匯編指令轉換成機器指令的翻譯程序,這就是最早的編譯器——匯編器.1947年,倫敦大學伯貝克學院的Kathleen Booth為ARC2計算機開發了第一個匯編語言及其機器匯編器[8].之后不久,開始出現帶有支持代碼“庫”的計算機,預先記錄在打孔卡片和磁帶上的支持代碼“庫”能夠在裝載器(loader)的支持下與用戶程序進行連接,從而支持輸入/輸出等操作.這就是編譯器(或編譯系統)這種系統軟件類型最早的雛形.
雖然匯編語言相對于機器語言提高了程序的可讀性,但編寫、閱讀和理解匯編語言的難度依然較高,而且匯編代碼很難在不同指令集機器間移植.為了提高編程效率和程序可移植性,出現了高級程序設計語言和相應的編譯系統.20世紀50年代為IBM 704大型機設計的FORTRAN語言是第一個高級程序設計語言,1957年發布的FORTRAN編譯器則是第一個功能比較完備的高級程序語言編譯器[9].它也是第一個具備優化能力的編譯器,引入了循環優化、寄存器分配等技術,使編譯器翻譯的機器代碼能夠與當時人工編寫的匯編程序性能相當,從而使更多的用戶接受.20世紀70年代,B語言、C語言等高級語言和相應的編譯技術快速發展,并在Unix操作系統[10]核開發中發揮了重要作用.同時,面向對象思想也在這一時期應用到高級語言中,出現了SIMULA67、Smalltalk等多個面向對象語言.受到C語言和SIMULA67語言的影響,Bell實驗室在20世紀80年代開發了C++,隨后開發了支持C++的Cfront編譯器,逐漸成為主流編程語言[11].1995年,Sun公司發布了Java語言和Java編譯器.Java具有簡單性、動態性和獨立于平臺的特點,至今應用廣泛.進入網絡時代,編程語言又進入發展的活躍期,出現了Python、C#、Go等編程語言與編譯系統.
這里有一個誤區:既然編譯器是系統軟件,那么其他以程序為操作對象的工具軟件(例如程序分析或程序驗證工具)是否也可以視為系統軟件?這里的界限在于該工具軟件的直接目的是否服務于操縱軟件執行,這是系統軟件的本質特征所決定的.軟件工程領域中大量的工具軟件以產生高質量的軟件為直接目的,并不關注軟件的運行態行為以及它們是如何被執行的,而編譯器(當然也被認為是工具軟件)的直接目的是產生可加載執行的代碼并為操縱軟件的執行奠定基礎.所以,一般以程序為操作對象的工具軟件通常不能納入系統軟件范疇,而編譯器則被納入系統軟件范疇.無論是以高級語言、匯編指令、機器指令二進制編碼甚至是紙帶形式表示的代碼,它們都是應用層“圖靈機”的一種物化實現形式.編譯器則是在上述形式之間進行變換的系統軟件,并且這種變換通常是從高層次的高級語言向可加載執行的機器指令集的變換,并最終映射為可加載執行的形式.在與編譯系統密切相關的裝載器(通常內置于操作系統/語言等運行環境)[12]的協助下,應用層“圖靈機”的具體編碼被載入到主內存,成為準備就緒、隨時可以執行的狀態.
(2) 操縱方式2:“執行管控”應用軟件和資源
早期的計算機雖然具備加載應用程序的能力,但需要由操作人員手工裝入包含程序的紙帶或磁帶.計算機在加載完程序之后,運行控制權就完全交給了應用程序,只有程序運行完并取走計算結果之后,才能再由人手工裝入下一個紙帶或磁帶.這種手工操作、排他運行的方式具有效率低下、系統資源利用率低的特點.最早的操作系統就是為了解決這一問題而應運而生的[13]:1956年的GM-NAA IO系統具備單道批處理能力,能夠自動地從磁帶順序讀入并執行應用程序.這種“執行管控”避免了兩個作業之間的空閑時間,但在作業執行過程中,由于只有單個應用程序在排他運行,資源利用率低的問題并沒得到徹底解決.因此,以當時主流的大型主機為載體,操作系統圍繞兩種使用模式展開了探索.
(1) 多道批處理(batch processing):即對單道批處理進行擴展,允許單一計算機同時載入多個批處理作業,使之可以以恰當的調度策略交替占用 CPU,從而提高資源利用率.其典型案例是 20世紀 60年代由Dijkstra所領導研發的THE操作系統[14];
(2) 分時(time sharing):其思想幾乎與操作系統同時出現,目標是“通過分時共享,使得一臺大的計算機能夠像多臺小型計算機一樣使用”[15].從1961年的首個CTSS(compatible time-sharing system)分時操作系統[16]開始,此類系統均通過CPU時間的劃分來支持多個終端用戶.
無論是多道批處理還是分時,其本質都是“管控”應用軟件執行,也即通過引入恰當的應用程序調度和行為調控機制,使得單個通用“圖靈機”可以同時讀入和運行多個應用層“圖靈機”,最終實現計算機資源的高效利用和高效復用的目標.這一思路直接推動了多任務多用戶的Unix操作系統的出現,為現代意義上的操作系統奠定了基礎.
除了“執行管控”應用軟件,操作系統的另一核心職能是“管控”資源,也即通過管理和協調執行部件、內存、磁盤、網絡等計算機資源,實現高效協同,形成具備通用圖靈機能力的基礎執行環境.操作系統這一職能的發展經歷了兩個階段.
(1) 早期的操作系統往往與特定計算機硬件和特定應用綁定:即使是同一個生產商,不同型號計算機的操作系統也會有不同的使用方式,甚至很多操作系統就是計算機用戶根據應用場景定制的;
(2) 其后,操作系統逐漸與具體硬件解耦,力求對應用軟件提供一致的通用“圖靈機”物化形態.
20世紀60年代,IBM為System/360系列計算機開發了統一的操作系統OS/360[17],首次為應用軟件提供標準化、與特定計算機型號和應用場景解耦的運行環境;其后,1972年發布的 VM/370操作系統擴展了分時共享的思想,首次提供了成熟的虛擬化能力[18].20世紀 80年代,IEEE和 ISO組織制定了一組可移植操作系統接口POSIX(portable operating system interface of UNIX)標準,在某種程度上,它定義了一個通用圖靈機物化形態所應具備的接口,應用軟件通過該接口與操作系統交互,再由操作系統操縱軟/硬件資源.無論是大型主機還是微型機,這種解耦和抽象都直接推動了軟/硬件技術的快速發展,奠定了操作系統作為整個計算機生態鏈的基礎性地位.
相對于其先驅者,今天的操作系統能力已經得到極大豐富,諸如圖形用戶界面、多媒體播放器等各類公用程序等都被內建到操作系統中,其運行場景也擴展到了移動終端、物聯網設備、無人系統等多樣化環境,但上述“管控”應用軟件和資源的核心職能并沒有發生變化.
(3) 操縱方式3:“聯接協調”分布計算系統
“中間件(middleware)”的概念最早出現于 20世紀 60年代,1968年,北大西洋公約組織的軟件工程報告[19]所給出的軟件結構倒金字塔中(如圖2所示),中間件被代指位于應用軟件之下、控制程序/服務例程之上的一層軟件,被用來彌補底層系統軟件通用功能和上層應用特殊需求之間的鴻溝.雖然也被納入系統軟件范疇,但此時的中間件還沒有“管控”分布計算系統的職能.

Fig.2 Inverted pyramid of software structure in NATO software engineering report[19]圖2 NATO軟件工程報告中的倒金字塔軟件結構[19]
20世紀80年代,TCP/IP協議等計算機網絡技術走向成熟,計算機應用模式邁入網絡計算時代.與馮?諾依曼體系結構中的“存儲程序”思想類似,網絡環境下的分布式應用通過二進制網絡消息對指令和數據進行統一編碼和傳遞.在現代中間件出現以前,開發人員只能通過操作系統自帶的 SocketAPI等原生接口,以完全手工的方式實現從網絡消息到程序行為的雙向映射,直接后果是開發繁瑣、復雜和低效.另一方面,研究者也逐漸認識到:相對于單機軟件,分布式軟件有著特有的理論和技術問題(如負載均衡、時間同步等),而傳統的操作系統并未提供相應的管控能力.
為了應對上述挑戰,早期主要圍繞兩種思路展開了探索.
· 一是以 Amobea[20]等分布式操作系統為代表的自頂向下方法,其核心思想是將單機操作系統的概念放大到網絡環境.例如,文獻[21]指出:“分布式操作系統對用戶而言與單機操作系統無二,只是運行在多個獨立處理器上,它的核心概念是透明性.”但是,網絡資源具有分布自治、高度異構、持續演化等特點,其上軟件很難通過嚴格的以自頂向下的方法精確設計出來,而更多的是通過互聯互通、以自底向上的方式成長式構造出來的[22];
年輕人告訴何良諸,他老子聽說北大坎礦的煤,含有琥珀顆粒,要了幾十車皮。礦區人傻實在,沒要預付款就發貨了。他老子的公司,欠煤款六百萬,七年了,不給人家一分錢。礦工們開不出資,自發組織起討債隊,黑道白道都趟,拿他頂了賬。
· 后一種思路以Birrel等人于1984年實現的首個遠程過程調用(remote procedure call,簡稱RPC)框架[23]為代表,催生了現代意義上的中間件.
中間件運行于操作系統之上,聚焦分布式應用中的“連接”問題,沉淀此類軟件開發、運行與集成的共性機制.在馮?諾依曼體系結構的單個計算機中,系統軟件會將所存儲的程序映射為 CPU指令執行動作,這是其操縱能力的最基本體現.與之類似,中間件通過將網絡消息映射為分布式應用程序模型基本構造單元的行為,實現對分布計算系統的操縱.依據應用程序模型的不同,中間件可以分為面向過程中間件、面向對象中間件、面向構件中間件、面向消息中間件等,其操縱能力見表1.

Table 1 Manipulation capability of different types of middleware表1 不同中間件所具備的操縱能力
除了支撐應用程序模型的通用中間件外,部分中間件僅關注“協調”分布計算系統過程中的一些特定場景.事務處理中間件即為一個典型案例,它通過控制服務端多個軟件實體的行為,保證分布式事務處理過程中的(全部或部分)一致性.早在大型主機時代,IBM的CICS(customer information control system)系統就已提供了跨計算節點事務支持.針對美國電話公司需要的聯機事務處理能力,AT &T貝爾實驗室于20世紀80年代初發布了跨平臺的 Tuxedo事務處理中間件,相關研究與實踐對后續 X/Open組織的分布式事務處理規范、OMG(Object Management Group)組織的對象事務服務規范等產生了較大影響[24].
系統軟件是持續在線提供基礎服務的軟件,這是系統軟件的時代特點.這一洞察的時代背景是互聯網發展成為當今世界的信息基礎設施.系統軟件是當今云計算平臺之所以成為公共服務平臺的關鍵,是“軟件即服務”應用模式的基石.
系統軟件是基礎性軟件,其誕生之初就具有不間斷持續運行的基本屬性.例如:操作系統與計算機裸機緊密結合,共同向應用軟件提供通用圖靈機能力抽象,其生命周期與硬件上電運行時間基本一致;編譯系統中一個重要的內容是運行時庫(runtime library),程序由何種編程語言編寫、運行在何種運行環境上,就需要相應的編譯系統提供相應的運行時庫,它不僅僅本身是動態運行的,更為上層應用程序的持續運行提供了有力支撐;無論是以靜態/動態鏈接庫,還是以獨立服務等形式存在,中間件的主要實現部件(如互操作協議引擎)的生命周期都至少與所支撐的分布式應用生命周期相同.
然而,早期系統軟件的“持續運行”是相對于其所操縱的計算系統而言的.換言之,系統軟件的生命周期通常與微觀層面上的具體計算系統一致,所操縱計算系統一旦停止運行或重啟,系統軟件的狀態也隨之發生變化.此外,系統軟件能力提供的方式是“購買/授權、本地安裝和配置、后期維護”的模式,與下文闡述的按需服務模式也存在很大差異.
互聯網的高速發展改變了計算系統應用模式,同時也對系統軟件產生了重要影響,推動著系統軟件“不間斷持續運行”這一屬性跳出單個計算系統的微觀范疇,在整個信息空間的宏觀尺度上,成為持續在線提供基礎服務、支撐信息空間不間斷運行的核心基礎設施.
系統軟件的上述時代特點與 20世紀 90年代中后期出現的服務化思想密切相關:互聯網資源具有開放動態、成長自治的特點,但人們同時又希望軟件能夠持續在線、高度可用,二者之間的矛盾催生了“服務”的概念.從2000年左右W3C組織所制定的一系列Web Service標準[25]開始,“服務”一詞即被用來抽象可通過網絡按需訪問、無需關心實現細節的能力.以此為核心,面向服務體系結構通過服務化封裝和“服務提供者-消費者”之間的動態發現,以解決開放動態與持續在線之間的矛盾.
作為互聯網時代的產物,服務化思想首先推動了中間件技術外延的拓展.Apache Tomcat、IBM WebSphere等Web服務中間件以支撐面向服務體系結構為目標,封裝了服務注冊、服務發現、服務訪問等共性基礎設施,完成對服務化軟件的操縱、實現網絡消息與服務實現者之間的映射;以企業服務總線(enterprise service bus,簡稱 ESB)[26]為代表的服務集成中間件通過服務封裝、服務組合、服務協同等技術實現自治子系統之間的通信,進而實現復雜業務系統跨域集成;微服務[27]則聚焦單個業務系統內部,通過系統內部組件的徹底服務化,實現開發階段“分而治之”和運行階段的靈活應變,這一思路催生了Spring Cloud等微服務框架.
近年來,作為服務化思想的集大成者,云計算模式被廣泛接受.如同工業革命讓水、電、交通等成為公共服務一樣,云計算正在通過后端資源集約化和前端按需服務的方式,推動信息技術實現社會化和專業化,使得信息服務成為公共基礎設施[28].這一趨勢推動著整個系統軟件生態鏈的變革:操作系統、編譯系統、中間件、數據庫等逐漸融合,以云計算操作系統、“平臺即服務(platform as a service,簡稱PaaS)”[29]軟件基礎設施等形式打包.此類系統軟件是各大云服務提供商的核心競爭力所在,其典型代表包括Google AppEngine、Microsoft Azure、Amazon EC2、阿里飛天平臺等,其特點如下.
· 在資源的管控方面,此類系統軟件要應對的資源規模是數據中心甚至多數據中心級別的,管控的核心在于通過計算、網絡、存儲等資源虛擬化,實現資源池中資源的有效聚合和彈性擴展,在不同尺度上形成具有通用圖靈機能力的環境.例如,互聯網虛擬計算環境iVCE[30]通過資源的“自主協同、按需聚合”,將靜態統一視圖的資源組織模式擴展為相對穩定視圖、按需可伸縮的資源組織模式,從而實現面向互聯網計算的高效管控;
· 在應用軟件的執行管控維度上,此類系統軟件面向大規模云服務這類分布計算系統,提供了任務調度與執行、負載均衡、安全管控、在線監控和升級演化、分布式數據存儲訪問等一系列基礎設施和相應能力.這些能力以“Pay as you go”[27]的服務化方式提供,用戶無需像傳統系統軟件那樣自行安裝、部署和維護.部分“平臺即服務”基礎設施還內建了編譯系統和調測試環境,支持云端開發和編譯構建;
· 在自身生命周期方面,此類系統軟件7×24小時持續提供基礎服務,已經與單個應用軟件的生命周期解耦,是支撐整個信息空間持續運行的核心基礎設施.其突出表現為一旦發生故障,會產生較大的社會經濟影響.例如,文獻[31]指出:如果一個主要的云平臺宕機3~6天,美國經濟會產生30億~150億美元的損失;而在現實生活中,2017年2月底,Amazon EC2中的對象存儲服務出現故障近4個小時,導致數千個互聯網服務中斷,產生了重大的社會影響.
系統軟件是持續在線演化的軟件,這是系統軟件的發展趨勢.這一洞察的依據是:因為軟件正在成為未來社會運行的基礎設施,系統軟件不僅持續在線提供基礎服務、支撐上層應用軟件的持續演化,而且本身也必須因適應變化而持續在線演化,系統軟件是未來“軟件生態”的核心.
軟件正在成為未來社會運行的基礎設施,這主要受3個方面因素的驅使.
(1) 軟件自身能力的不斷提升.表現為軟件規模的持續增長、軟件實體之間連接形式的多樣化、連接緊密程度的深化等,使得軟件可以在許多關鍵領域代替原來傳統的非信息化手段,并表現出顯著優勢;
(2) 軟件正在驅動信息空間與物理空間的深度融合,提高了人類社會生產和生活的效率.以物聯網軟件為例,其應用不斷融入智能工業、智能交通、環境保護、公共管理、智能家庭、醫療保健等多個領域,已經成為世界經濟社會發展的熱點;
(3) 計算技術的普適化,使得人類社會產生了深刻變革.在移動和可穿戴設備、移動互聯網、智能助理等功能的支持下,人們有可能接受“無時無處不在而又不可見”的軟件服務.
在上述背景下,軟件將與其所在的社會和物理環境緊密融合在一起,相互作用、相互影響.這與傳統的、完全在信息空間運行的軟件有著質的區別.具體到基礎性的、“操縱計算系統執行”的層面,體現為系統軟件需要能夠不斷地適應技術、物理世界和人類社會的變化,也即需要具備演化能力[22].事實上,系統軟件的演化并非新現象,以Linux內核為例,據統計,從1994年3月~2008年8月一共發布了810個版本;為了適應硬件的急劇發展和變遷,Linux內核中與體系結構和外設有關的目錄(arch和drivers目錄)下的文件數從最早的寥寥數個擴展到了將近10 000個[32].在Linux演化過程中,產生了大量分支和發行版本,這些“副本”以類似于生物系統演化的方式“優勝劣汰”,推動著Linux逐漸走向成熟.
但是與傳統的離線、階段式演化不同,互聯網時代的系統軟件演化強調持續和在線的特點:在整個信息空間尺度上,這種演化并非停止所有信息服務、離線更新版本,而是隨著社會和物理環境的變化在持續地、細粒度地演化.在單個平臺化的系統軟件運行實例中,由于其需要 7×24小時持續提供基礎服務,其適應變化的過程多以部件的單獨更新、整體服務并不停止的在線形式表現出來.
在驅動軟件成為社會基礎設施的 3個因素的作用下,本文認為,未來系統軟件自身的持續成長和在線演化主要表現在如下一些方面.
(1) 適應硬件和軟件技術創新,向平臺化、體系化拓展.
系統軟件是“操縱計算系統執行”的軟件,它們與底層硬件一起,向上層應用提供通用圖靈機能力抽象.因此,系統軟件的演化首先體現在適應硬件體系結構的變化上.以編譯系統為例,21世紀以來,編譯系統的發展主要集中在面向多核和眾核處理器體系結構的編譯優化上[33].在可預見的未來,眾核和寬向量將成為體系結構的發展方向,計算部件和存儲層次的異構性和復雜性將不斷增加,因此,面向體系結構的編譯優化技術仍將持續發展,如何在不對程序員造成過度負擔的條件下盡可能高效地優化程序性能是其中的一大挑戰.同時,新型計算機架構,如量子計算機、生物計算機等,很有可能解決經典計算機難以解決的問題.這些新型器件和設備將與經典計算機并存,如何設計面向新型設備的編程模型和編譯系統,也是未來的一個研究難點.
作為加載、支撐和管控應用層“圖靈機”的基礎設施,系統軟件的演化還體現在適應應用軟件形態的變革上.例如:隨著信息空間內部連接的進一步深化,如何實現多個云服務提供者之間的無縫連接、實現資源的跨云共享,是云際計算(joint cloud)[34]這一新興計算模式的焦點,相應的系統軟件技術也開始嶄露頭角,典型實例包括IBM的Altocumulus[35]、歐盟的mOSAIC[36]等中間件;“軟件即服務”模式對軟件敏捷交付能力和輕量級維護能力提出了新需求,開發運維一體化(DevOps)[37]及相關的自動化測試部署、智能運維(AIOps)[38]等技術也將沉淀到系統軟件中;隨著區塊鏈等技術的發展,智能合約、共識機制、信任機制等將在系統軟件層面上得以體現.此外,各類應用軟件正在成為未來社會運行的基礎設施,它們本身具有迫切的在線演化需求,作為“操縱”軟件的軟件,系統軟件成為驅動上層應用實施這種演化操作[39]的理想載體,相關“操縱”機制的沉淀是未來系統軟件的重要發展方向.
在適應軟/硬件技術變革的過程中,操作系統、中間件、編譯系統等系統軟件各個分支將持續融合.用戶的選擇重心將從產品本身聚焦到自身能獲得的應用和服務支持上,因此,系統軟件在產品形態上將表現出依托開源社區等新興力量形成有機統一的整體解決方案,在運營形態上從傳統銷售獲利轉變為平臺化的持續服務提供,在生態建設方面呈現出技術、平臺和實踐三者良性互動螺旋式上升的格局.此外,基于“云+端”和邊緣計算等體系結構,在后端提供具有豐富資源的服務化平臺,在前端提供多樣化應用環境,實現前后端的優勢互補、有機融合,是未來系統軟件體系化發展的重要方向.
(2) 通過感知和操縱物理空間,成為“軟件定義一切”的基石.
信息技術向物理世界邁出的第一步是實現環境“感知”.自 20世紀末以來,隨著相關硬件技術的逐漸成型,系統軟件領域開始關注對物理空間情境數據的處理,出現了傳感器網絡操作系統/中間件[40]、情境感知中間件[41]等一系列系統軟件.近年來快速發展的物聯網中間件[42]在上述概念的基礎上進一步針對“萬物互聯”的大規模異構環境進行了拓展,其核心關注點是:在資源受限、高度異構、規模龐大、網絡動態變化條件下,如何實現互聯互通互操作,滿足物聯網應用對海量傳感器數據或事件實時處理的需求.在“操縱”物理世界方面,系統軟件領域也已經展開了初步探索.例如,機器人操作系統/中間件面向機器人計算環境高度異構、資源受限、常態失效、實時性要求高等特點,自 2000年左右展開探索,包括 Miro、CLARAty、OpenRTM-aist、Pyra、Orca、MARIE等在內的一系列實踐推動了無人系統中間件技術的發展[43],并直接為今天廣泛使用的開源機器人操作系統ROS(robot operating system)[44]奠定了理論和技術基礎.
未來,作為信息物理融合軟件系統的基礎性軟件,系統軟件將繼續增強感知和操縱物理世界的能力,正在演化成為“軟件定義一切”的核心基礎設施.文獻[45]提出了普適操作系統的概念,指出操作系統正在將其軟件定義能力擴展到物理世界和人類社會,這正是上述思想的體現.
(3) 與智能技術融合,為軟件無縫融入人類社會提供支撐.
近年來,人工智能技術的巨大進步迅速反映到軟件領域.“人工智能就是新的電能,正如100年前的電力改變了工業界,現在人工智能在做著同樣的事情.”智能化軟件正在將計算以人為中心、在人類社會中“隨時隨地而又不可見”的理想變成現實.反映到系統軟件層面:
· 一方面,系統軟件本身需要具備操縱智能化軟件執行的能力.例如:操作系統可能需要提供對深度學習加速硬件的支持,在運行時提供深度學習等共性抽象;針對大數據和深度學習應用,編譯系統需要開發相應編程模型和接口、針對多硬件后端的可定制優化模塊,以彌合高層次深度學習框架與底層硬件后端的性能差距;
· 另一方面,現代操作系統都提供了人機交互界面,而這一界面的智能化也是實現軟件無縫融入人類社會的前提和基礎.蘋果 iOS操作系統內建的 Siri語音助手、谷歌 Android操作系統內建的 Google Assistant在這一方面已經做了有益的嘗試,中間件在情境智能(如智能家居、智能城市)等方面也已取得一些初步成果[46].長遠而言,系統軟件將變得越來越智能,并且這種智能是在與人和人類社會交互過程中逐漸累積、以在線演化的方式成長起來的.
1936年,阿蘭?圖靈提出了能夠模擬任何圖靈機的通用圖靈機模型;1945年,馮?諾依曼等人提出了“存儲程序”的思想,二者分別奠定了系統軟件的理論和技術基礎.本文認為:系統軟件是指操縱計算系統有效執行、為上層應用軟件提供運行支撐的軟件,其本質特征是“操縱計算系統執行”,這就是本文的第 1個洞察.系統軟件與底層硬件一起,向上層應用提供通用圖靈機能力抽象,其操縱計算系統的主要方式有3種:編譯加載應用軟件、執行管控應用軟件和資源、聯接協調分布計算系統.洞察 2認為:系統軟件具有不間斷持續運行的基本屬性,在互聯網時代的時代特點是持續在線提供基礎服務,是當今云計算平臺之所以成為公共服務平臺的關鍵,是“軟件即服務”新型應用模式的基石.洞察 3認為:系統軟件的發展趨勢是持續在線演化,計算系統軟/硬件技術創新、信息物理空間融合和智能技術是系統軟件持續成長和在線演化的主要動力,這也決定了系統軟件的未來發展趨勢.