2020年3月9日 星期一

Changelog - Reproducible builds


現在有越來越多的套件管理軟體, 例如linux上的 apt , mac 上的 brew , 讓使用者可以輕易的安裝 pre-compiled 的套件, 但你真的知道你裝了什麼到電腦裡嗎? 想像你開發了一個 App , 使用了第三方套件, 而這個套件裡面有個後門, 會把Ads的金鑰換成套件開發者的金鑰, 結果你渾然不覺的把 App 放上 store,  以為會有廣告收入, 結果全都入了第三方的口袋; 或是想像你安裝了一個 bitcoin wallet , 結果它居然把錢轉到自己的帳號下; 許許多多的安全性問題, 都在我們選擇便利之後忽視.

"Reproducible build"是 open source community 想要推行的一個觀念: 一份 source code 應該要能產生一模一樣的 binary, 不論硬體, 不論 OS, 不論 timezone, 不論使用者權限, 不論 code path...任何想得到的差異, 都不應該影響最後產生的 binary . 如果一份套件的 source code , 可以經過 20 甚至 30 個 rebuilders 來驗證最後的 binary 都相同, 它就能夠保證一定程度的安全性.

這個觀念也可以落實到 code development, 一份好的 source code 裡不應該存在跟環境相依的變因, 我們應該不時會聽到工程師抓頭喃喃自語:"在我電腦上都執行得好好的呀!" 這就透露了潛在問題. 在我們電腦上可以 build 得起來, 在另一個人的電腦上也應該可以 build 出一模一樣的 binary. Google 很認真的執行此觀念, 為的是節省 compile code 的成本. 如果能保證一樣的 code會得到一樣的 binary, 那麼就只需要 compile code 有更動的 library , 省下的時間與金錢相當驚人.

reference source:


沒有留言: