個人感覺沒有必要,可是你要時刻關注新特性列表,然后把自己的內核升級到離最新版本號差一兩個月公布的版本號而不是最新版本號。以保證穩定性,由於一兩個月的時間足夠多的慧眼會發現足夠多的問題,既然自己不是Alan Cox那個梯隊的大牛,最好不要在自己的生產版本號上使用最新內核。當然,做試驗或者Just play例外。
為什么要升級內核?是的,非常多人並不允許這樣的觀點。可能他們覺得使用內核提供的最持久最穩定的接口就已經足夠,多數的定制特性須要自己在用戶空間開發。當然這也符合UNIX的哲學,而且,他們覺得用戶態寫自己的so而不是bash。python腳本會提高自己軟件的競爭力。由於你看不到源碼。一個so就能實現OpenVPN的負載均衡,你又不知道他是怎么做的,所以這樣的神奇感的背后,人們會覺得其技術及其高深。反之。假設使用了內核提供的特性,他們便會覺得這樣的技術誰都能夠使用,並非自己獨占獨享的。做出來的東西便失去了競爭力。
這樣的觀點是徹頭徹尾錯誤而且及其錯誤且幼稚的。
關鍵不是你保留了多少別人不知道的技術細節。關鍵在於你能多快推出一個能夠使用的五臟俱全的最簡版本號,而且能以多快的頻率持續更新,持續優化,而這一切非常大的分量上並非你自己閉門頓悟的。而是來自使用者的反饋。快。才是根本!
怎么才干快?簡單,能不自己寫的就直接拿來,能利用的現成特性就直接用。這樣就節省了自己非常大的工作量。要把心思花在怎樣簡單地擴展功能滿足需求上,而不是花在鑽研某個技術細節上。
難道你用C寫so的時候,不也是調用了人家C庫以及第三方(甚至是你的同事寫的)庫提供的API么?這不也是拿來?你隱藏的不過怎樣組裝這一切的細節,而這不過一條路而已,沒人在乎你是怎樣將組件組裝成功能的,用戶在乎的是能夠使用。
舉例來講。我在Linux 2.6.32內核上吭哧幾個星期也搞不定怎樣讓多個OpenVPN進程共享一塊TUN網卡,其實我改寫過TUN驅動,可是沒有經過穩定性壓力測試,所以能不能用還不知道。我所完畢的可能不過可行性預研罷了,后來由於沒有項目或者個人原因推動,這樣的成果也只能停留在紙面上。可是那畢竟消耗了我的時間和精力,盡管我沒有占用我的工作時間(到了后期就不一樣了),那個時候老婆和女兒又長期不在身邊。就我自己在家,我下班后或者周末有的是時間。可是畢竟由於搞這個東西讓我直到如今還欠了幾部關於古羅馬的紀錄片沒有看!我花了非常長時間研究怎樣實現UDP服務的並發,《UNIX網絡編程》上的方案也看過,對於OpenVPN這樣的服務而言根本不切實際,我想過通過fork讓子進程繼承父進程的UDP描寫敘述符,可是會有驚群問題,我知道有SO_REUSEPORT這個option,可是Linux的實現並不能滿足我的需求(這是實現問題,而不是接口問題),於是我又花了非常長實現寫出了UDP多port的負載均衡內核模塊,同一時候想出了利用iptables的random DNAT方案。然而只要我將內核版本號升級到3.9.6這個版本號或者以上,全部問題都攻克了,我只須要在UDP socket上設置一個SO_REUSEPORT選項就可以,同一時候我也不再須要寫代碼了。
高版本號的內核具有三方面的效用,更高效,很多其它新的特性。以前bug的修復,可是對於新引入的特性,可能會引入新的bug。不過你只須要謹慎使用新特性就能夠了。舉例來講。我實際中會使用到的功能,比方TCP的Fast open,網絡的命名空間,多隊列的TUN網卡,這些在2.6.32內核上就不支持(命名空間有是有。可是接口使用時太不方便)。你是想花一月時間自己寫一個多隊列的TUN驅動呢?還是希望有一個直接能夠用的呢?誠然,高版本號內核自帶的TUN驅動不是你寫的,不能代表你的實力。不能給你帶來競爭力,可是你的目的決不不過用上一個多隊列的TUN而已,你的目標可能是搞一個另類的OpenVPN。別人不曾想到的那些易用的功能,你自己提煉出來的可能的新的需求。這些才是競爭力,而不是其實現。我通過阿皮亞大道到達羅馬。而你輾轉阿爾卑斯山,是的,你比我更能體現什么是力量和毅力。可是。我先到了。
升級內核有什么問題呢?沒有免費的午餐。升級內核也不例外。升級后,全部的應用軟件還能正常嗎?這就是說。兩個版本號的內核的API規范變了嗎?一般而言,兼容性是內核API的本質特征之中的一個。可是卻不是絕對的。萬事都不絕對。因此,不到出問題的時候,你可能永遠都不知道它有問題,你能非常easy證明一件事情是錯誤的,可是卻非常難證明它是正確的。
既然這樣,那還怕什么。升級是唯一的選擇。由於即便你不升級。你也不能證明如今的內核和應用程序之間的配合就一定沒有問題。盡管它們至少經過了測試,可是你難道不能在新內核上做相同的測試嗎?不能由於懼怕錯誤而停止前進。
或許你能夠堅持全部東西都自己開發以保持自己的原創性以及競爭力,同一時候小心翼翼守護自己的戰果,生怕被別人搶去,並心甘情願為以上全部這些付出成本,由於每一個人都是這么干的。可是我卻堅持我的觀點。四處搜羅線索。最小化工作量滿足最大的需求,東西能夠不是我做的,可是一定是我交到你手上的。
Linux內核是多么大的一座寶庫,隨時都有新的東西供你使用,你能夠使用它的最新的接口實現新的想法,你也能夠抽取它的內部算法。迄今為止,我使用過非常多從Linux內核拿來的算法,比方嵌入式list,hlist,比方路由查找的hash算法。trie算法,紅黑樹,AVL樹。radix樹等容器,還借鑒其CFS以及O(1)調度算法實現過一個消息輸出系統,從Linux內核說開去,不論什么的開源碼其價值不不過終於形成的軟件本身的自由使用分發。它內部實現本身就是一座寶庫,你能夠從中得到非常多的東西。不過,只拿來是無恥的,必須保持一顆時刻分享的心。升級內核的意義就在於,在你眼前,非常多的好玩的東西讓你能夠所見即所得。無論是工作中,還是平時的周末折騰。當然假設你是一個企業的總監級別的人。或者你有深深的包袱,能夠將我所說的當成廢話一堆,由於你可能有更重要的因素要考慮。比方客戶升級之類的,比方兼容性之類的,而不不過圖個純技術性的痛快。可是即便對於這些高大上的所謂圈子正中央的人,假設你已經擺脫了包袱,也請考慮一下我的觀點,時刻保持最新。
PS:我為何學不會Python
學不會嗎?或許。
不想學嗎?不。人們都說Python簡單,可是我為何好幾次都沒有系統地學習它。由於我把關注點集中在問題本身而不是怎樣實現它上了。我想通過買一個樹莓派把家里的電視機改成網絡播放器,同一時候用Python實現管理UI。通過這么一個動作來學習Python。我本以為做這么一個UI能夠讓我掌握Python,然而,我一心想早日通過我的電視機給小小放愛探險的朵拉,於是我在網上找到了現成的代碼,復制粘貼,少量改動,任務非常快完畢了,Python沒有學會...我非常沮喪。可是小小卻非常高興。