推薦博文: Linux核心“問題門”——學習問題、經驗集錦
推薦下載:《Linux核心修鍊之道》精華版之方法論
剛才欣聞在SB會試運行期間,參觀的上海市民情緒非常穩定的,很好很舒服的展示了自己的風采。於是我們要在這裡要反思一下,為什麼核心的API就不能同樣的穩定?
開源社區正以極快的速度向核心中添加新功能,同時又在努力讓修補bug的步伐跟上去,放慢開發速度看上去是不太可能的:首先Linux不能在技術上落後,否則就會失去要求越來越苛刻的商業使用者;其次是因為Linux需要推動開發人員社區的發展,不斷增加新功能可以使開發人員不感到厭倦,否則他們就可能轉移到其它項目,另外也能在現有開發人員年老或退出的時候吸引新人才。
在這樣的快節奏下,核心開發人員一旦在當前的介面中找到bug,或者更好的實現方式,他們就會很快的去修改當前的介面,這就意味著,函數名可能會改變,結構體可能被擴充或者刪減,函數的參數也可能發生改變。一旦介面被修改,核心中使用這些介面的地方需要同時得到修正,這樣才能保證所有的部分繼續正常工作。
比如,核心中的USB介面到目前為止至少經曆了三次重寫,解決了下面的問題:
把資料流從同步模式改成非同步模式,這就減少了許多驅動程式的複雜度,提高了所有USB驅動程式的輸送量(throughput),結果就是幾乎所有的USB裝置都能以最大速率工作了。
修改了從USB Core中分配資料包記憶體的方式,以至於為了修正許多死結問題,所有驅動都必須提供更多的參數給USB Core代碼
這和一些封閉原始碼的作業系統形成鮮明的對比,在那些作業系統上,不得不額外的維護舊的USB介面。這就導致了一個可能性,新的開發人員依然會不小心使用舊的介面,以不恰當的方式編寫代碼,進而影響到作業系統的穩定性。
在上面的例子中,所有的開發人員都同意這些改動是重要的不得不進行的,在這樣的情況下修改代價很低。如果Linux保持一個穩定的核心介面,那麼就不得不建立一個新的介面,同時舊的有問題的介面也必須一直維護,這就會給USB開發人員帶來額外的工作。既然所有的USB開發人員都是利用自己的時間工作,那麼要求他們去做這些毫無意義的免費的額外工作,是不可能的。
安全問題對Linux來說是十分重要的,一個安全問題被發現,就會在非常短的時間內得到修複。在很多情況下,這將導致核心中的一些介面被重寫,以從根本上避免安全問題的發生。一旦核心介面被重寫,所有使用這些介面的驅動程式,必須同時得到修正,以確定安全問題已經得到修複並且不可能在未來還有同樣的安全問題。如果核心內部介面不允許改變,那麼就不可能修複這樣的安全問題,也不可能確認這樣的安全問題以後不會發生。
開發人員一直在清理核心介面。如果一個介面沒有人在使用了,它就會被刪除。這樣可以確保核心儘可能的小,而且所有潛在的介面都會得到儘可能完整的測試(沒有人使用的介面是不可能得到良好的測試的)。