做 LFS 是不是很累了?OK,讓我先來講一段八卦故事,放鬆放鬆神經,然後再繼續冒險吧。。。
在 Linux 2.2/2.4 的純真年代,核心標頭檔一直保持著 Unix 世界的"KISS"傳統,只需將核心源碼樹中的標頭檔直接複製到 /usr/include 中即可使用,一切都是那麼 Simple and Stupid ...
但是隨著 2.6 系列核心的發布,事情開始變得混亂和複雜起來。首先是核心開發人員宣布強烈反對直接使用"未淨化"的"原始"核心標頭檔,他們建議使用發行版提供的"經過淨化的"核心標頭檔。於是各種發行版開始"八仙過海,各顯神通",由於"淨化"方法各不相同,結果就是每個發行版都有著自己與眾不同的核心標頭檔。更為嚴重的是,核心開發人員甚至推薦編譯 Glibc 的標頭檔也要使用發行版提供的"經過淨化的"核心標頭檔。由於 Glibc 和 Kernel 是整個系統的根基,這樣一來 Linux 便像傳統的 Unix 那樣開始走向分裂。
另一件哭笑不得的事情是,雖然核心開發人員強烈推薦使用發行版提供的"經過淨化的"核心標頭檔,但是 Glibc 的開發人員卻不買賬,他們推薦使用"未淨化"的"原始"核心標頭檔來編譯 Glibc ,兩個開發組一直堅持各自的見解,互不妥協!另外,兩個開發組在應當由誰提供核心標頭檔的問題上意見也不一致:核心開發組認為應當由發行版的製作者提供,而 Glibc 開發組認為應當由核心開發組提供。結果就是"神仙打架,凡人遭殃",雖然對 Debian 這種大型發行版來說,提供自己專屬的"經過淨化的"核心標頭檔不會成為多大的負擔,但是對於那些沒有能力或精力的小心發行版製作者和我們這些 DIY fans 來說卻是一場災難!要麼直接使用其他發行版的成果,要麼自力更生;前者讓人心有不甘(沒有了 DIY 的原汁原味),後者讓人望而生畏(有幾個人知道啥叫"淨化"?怎麼淨化?)。
危機時刻總會有英雄的出現,就在一片恐慌之際,一個叫"linux-libc-headers"項目組誕生了!他們向我們這些"凡人"們提供了安全的、普遍適用的、"經過淨化的"核心標頭檔,真是及時雨啊!天空重新晴空萬裡……然而好景不長,由於精力和人力有限,該項目在發布了 2.6.12.0 版本之後,遺憾的離開了這個世界。這樣一來,2.6.12 以上版本的核心新特性(比如新的系統調用)和 ABI/API 的變化就無法反映出來,對於我們這些 DIY fans 來說,世界重回混沌……
俗話說,"合久必分,分久必合",大概是核心開發組意識到了如果繼續固執己見將不可避免的導致混亂以及重蹈 Unix 逐漸走向分裂的覆轍,於是從 2.6.18 版本開始,核心開發組擔負起了維護一份統一的、"經過淨化的"核心標頭檔的職責(竊以為這原本就是他們的責任)。現在擷取"經過淨化的"核心標頭檔又變得簡單起來,只要在核心源碼樹中使用 make headers_install 即可,而且不用再擔心更新問題。對於我們這些 DIY fans 來說,又可以重新 Day Day Happy 了。
不過,由於磨合需要時間。目前 Glibc-2.4 以下的版本都無法配合這種新式標頭檔編譯成功。不過偶相信前途一片光明……