System software可能在不同的build environemnt上面build,但為了讓不同的build environment可以build出相同的system software讓不同developer做開發與debug,需要先確定build environment是一致的。
Build environment泛指: software build flow當中會用到的工具compiler toolchain、system library等等
要維持build environment一致性的原因: software developer會希望software不論是在哪一台電腦上被build出來都有相同的行為,這樣software developer才能夠在軟體出問題時快速復現問題,而不是先尋找build environment造成的差異。
Software的build flow會使用system utilities,而system utilities需要依賴於system library運作。
System library通常會隨著kernel有一份預設的版本,所以要維持system library一致性最簡單的方法就是採用擁有相同版本system library的kernel。
維持build environment一致性最重要的關鍵是要確保compiler toolchain的一致性,我們會使用到三套compiler toolchain (可參考範例圖)
Compiler toolchain (A)-n: 每一台電腦系統上,使用中的compiler toolchain,n代表一種compiler toolchain組合
Compiler toolchain (B): 用來build出符合一致性compiler toolchain的compiler toolchain,在不同電腦上需要使用相同版本的source code
Compiler toolchain (C): 被用在具一致性build environment中的compiler toolchain,system software developer修改的對象,但在不同電腦上需要使用相同版本的source code
準備流程:
在每一台電腦的現有環境中先使用compiler toolchain (A)-n將compiler toolchain (B)的source code編譯成執行檔
因為compiler toolchain (B)的版本已經可以在每一台電腦上面一致,接下來就可以將compiler toolchain (C)的source code編譯成執行檔
這時候在每一台電腦上都有一致的compiler toolchain (C)可以使用
Distribution: 指一組事先build好的software components,可以在每台電腦上得到一致的狀態,可以減輕建立environment一致性負擔。
以我們今天在前面準備build environment環境的過程為例,我們可以使用distribution來簡化整體的準備流程
我們今天認識了如何建立一套一致的build environment在各台電腦上build system software。接下來我們會介紹讓system software運作的hardware platform。