Linux難稱完美的幾大命門:軟件包各自為政
從1991年到2008年,Linux已經走過了17個春秋,但它依然是一個正在發展中的作品,依然難稱完美,還有好多方面需要完善,雖然不是致命缺陷,但是要想讓Linux鞏固現在取得的成就,并取得進一步發展,這些都需要得以解決。
軟件包管理各自為政
在Linux中,軟件通過“包”形式進行管理,包可以指整個應用程序、應用程序的支持庫、編程工具等等,舉例來說,在多數Linux操作系統中,火狐瀏覽器和辦公軟件OpenOffice.org都是以包形式體現在其軟件庫中。
不同Linux廠商的包管理方式也有所不同。紅帽使用它自己的RPM系統,Debian有自己的.DEB格式。如果你只使用某一個廠商的Linux,這或許不是一個問題;但是當你需要跨廠商的時候,就會發現這很不方便。
這也是為什么很多商用軟件廠商難于提供其產品Linux版的原因,沒有一種統一的包格式能夠克服跨廠商的問題。
面臨這種情況,潛在應用軟件廠商具有三種選擇:一是把時間、精力和金錢用在不同Linux系統上,例如讓自己的應用可以在紅帽、SUSE和Ubuntu上安裝和運行;二是只針對某一特定廠商Linux提供其應用;三是提供源代碼包,這樣用戶可以在任何目標平臺上自己編譯代碼。
第三個辦法肯定不會被任何專有軟件廠商所考慮。第一個辦法則大大加重了應用軟件廠商的工作量,基本也不可行。這樣就僅僅剩下了第二個辦法,既可以讓用戶能夠迅速使用其應用程序,也降低了用戶安裝應用程序的工作量。
目前來看,Linux系統上的商用軟件需求還相對較少,解決這一問題的重要性還不是那么明顯。但是從長遠來看,當商用軟件越來越多的進軍Linux市場的時候,這無疑是Linux的一個很大的缺陷。一個可能的解決辦法是,采用一種元包(meta-package)格式,用戶下載了這種格式的文件后,使用本地軟件將其處理成可以在指定系統上安裝的包。目前BitRock有一個類似的工具,可以將一個開源應用打包成一個可在多平臺上安裝的程序,其中也包括對Linux的支持。
另一個解決此問題的主要方法是通過Linux標準庫(Linux Standards Base,LSB)。為了兼容LSB,Linux廠商必須同時使用或支持紅帽的RPM。由于目前最流行的Linux系統是基于Debian的Ubuntu,它對RPM的支持并不好,因此業界人士批評LSB過于以紅帽為中心。
配置文件語法混亂
任何一個Linux都是多個組件和模塊聚合起來的,這些軟件來自成千上萬個不同的程序員、項目和設計機構。這種情況導致了所有Linux系統都沒有或很少集中配置功能,系統中的每一個模塊都是通過一些雜亂無章的文件來進行設置,沒有什么規定來約束和指導配置文件的語法。
如果你在工作僅僅用到少數幾個配置文件,并熟悉它們的內部格式,或許不會明顯的感覺到這個問題,但是這并非一個可以讓人接受的解決方案。造成該問題根源是,多數應用希望保持與老的UNIX應用的兼容。
從內核到用戶工具和應用程序,Linux整個系統內需要一個一致的配置系統。除了便于用戶(以及程序員)易于使用外,還可以簡化集中管理的問題。
僅僅通過規定實現這樣的事情幾乎是不可能的;更好的方法是,普及推廣一個可以讓應用程序配置更簡單的工具,從而實現統一的配置方式。GNOME項目的Gconf就是這樣的一個工具;盡管目前該工具的設置對象只是用戶習慣設置,而并非系統范圍內的配置選項,它依然為我們解決配置文件問題帶來了很好的啟示。
#p#
內核應用二進制接口
一直以來,在Linux開發領域,人們對內核應用二進制接口(Application Binary Interface,ABI)抱怨甚多。
Linux內核設計的思路是,在內核內部可以修改很多內容,但是用戶應用一定不要通過ABI去修改內核。這個問題不僅僅是理論性的,在實際開發中也是切實存在的:內核接口范圍的存在意味著,違背其規定的某些操作完全有可能發生,有時候即使通過非常嚴謹的代碼查閱也無法發現問題所在。
這樣,當違背規定的事情發生時,它將帶來兩個問題:它可能讓你無法確認一個問題的真正導致原因(例如它是一個內核的問題還是一個用戶應用的問題?);另外你需要花費時間和精力來修復它。
目前有一些方法來臨時解決這個問題。對于某些項目來說最迅速有效的辦法之一就是用戶空間文件系統(Filesystem in Userspace,FUSE),它是Linux系統平臺上可加載的內核模塊,允許非特權用戶創建功能完備的文件系統,而不需要重新編譯內核。FUSE模塊僅僅提供內核模塊的接入口,本身的主要實現代碼位于用戶空間中。但是,從長期來看,Linux需要一個既穩定又能滿足長期增長需要的ABI,并且不會成為造成潛在兼容性問題的老鼠窩。
原生文件版本管理(Native File Versioning )
原生文件版本管理是另一個可以加入到Linux的功能,但是至今為止還沒有被默認加入到Linux中。其概念非常簡單:在一個文件當前版本被覆蓋或破壞的情況下,用戶可根據需要恢復到早期的任何一個版本。Windows用戶現在通過影子復制的形式可以體驗這個功能,但是在標準的Linux文件系統中目前還沒有該功能的具體體現。當然,它不能取代文件備份,但是可以把一個文件回滾到過去某個時刻的功能還是有它的用武之地的。
現在你可以手動的向Linux中增加這個功能。有些不同項目也已經使用略有不同的方式來實現了這個功能,諸如Wayback、ext3cow、copyfs和Tux3等等。盡管有人稱這個功能可以通過非內核插件來實現,但是如果能有一個標準的、“內核安全的”方法來實現版本控制,無疑是更好的選擇。
我認為,未來的Linux文件系統(或許是即將到來的BTRFS)將完全解決這個問題,但是目前還沒有直接的解決方案開始解決這個問題。
音頻應用程序編程接口(API)
廚師太多可能熬壞一鍋好湯,用這個例子來說明Linux音頻實現的現狀再恰當不過了。多個音頻API和子系統意味著,你可以隨便選擇一個來滿足自己的需要,但是它也同時意味著,你將面臨兼容性的問題。
內核級的音頻API,也就是ALSA,是多數情況下應用程序的首選。但是除了它之外,還有很多其它音頻API,例如最初的PulseAudio,主要用于混合來自多個應用程序的音頻;還有JACK,用于實現低延時的專業音頻。在今年9月份的Linux Plumber大會上Don Marti很好的總結了該問題所帶來的沖突,他表示,“如果有人來問我,‘我想編寫一個音頻應用程序,我應該使用哪一個API?’我無法給出一個很好的答案。”
簡而言之,音頻API問題困擾著編程者,也困擾著用戶。或者說,任何影響程序員的問題從長期來看也將影響終端用戶。PulseAudio或許是最通用的解決方案,其應用范圍也最廣。但是從長期來看,應用程序開發者需要的是一個內核級的音頻訪問方式。
#p#
圖形用戶界面問題
對于內核來說,需要增加什么功能自然是Linus和內核開發者說了算。但是對于Linux桌面來說,卻沒有什么規定可言。
在進一步闡述前,我要首先解釋清楚一個概念。“桌面”不僅僅指那些讓非技術用戶更輕松使用Linux/FOSS的任何圖形化用戶界面,而是指一個可以讓你更輕松使用和管理系統的圖形化用戶界面,不管你的技術能力處于哪一級別。
這不是一個將圖形化用戶界面完全與系統整合在一起的問題。Linux中的內核和桌面開發是以高度并行的方式進行的,它以一個單向引導的方式進行。沒有人保證內核開發者會實現對桌面開發者有用的功能,但是桌面開發卻必須根據內核功能來修改自己。
這樣,就需要一個指導委員會對所有運行在Linux上的圖形化用戶界面進行指導,無論創建任何圖形化用戶界面,不管它們是GNOME,還是KDE或其它尚未發明的桌面,它們都必須具有對后端內核功能的一致性實現,使它們能夠緊密結合內核的功能。內核應該發布一個圖形化用戶界面可以使用的功能列表,然后圖形化用戶界面可以通過不同的方式來將其展現給用戶。
Linux需要做的另一件重要的事情是,需要有一個清晰的規則來指導如何使默認桌面設置更符合用戶習慣,這需要設計者具有用戶界面設計經驗。這并不是說用戶界面要“簡單化”:通常需要的不是更簡單的控制,而是這些控制更好的默認處理方式,這樣用戶無需進行麻煩的調整就可以獲得最方便的設置。
X11與應用程序的集成
大多數人用過Linux一段時間后,可能會遇到這樣一個問題:一個X11應用,或X11自身,會出現不響應的現象,唯一的辦法就是關閉并重啟X11。盡管這個操作并不復雜,但是關閉X11就意味著每一個其它X11應用都會受牽連,也會被關閉。
如果可以選擇保留運行在X下的應用,那么當X需要被關掉和重啟時,你就不會丟失你的整個用戶會話了。如果不能實現這一點,也可以通過一個窗口管理API來允許輕松存儲和恢復崩潰事件中的會話,這也是非常有用的一個功能。
商業化備份恢復解決方案支持
如果Linux希望繼續吸引普通的PC用戶從Windows轉向自己,它需要具有Windows中的許多類似功能。其中包括支持Linux客戶端的付費網絡服務,諸如遠程備份等。
Windows和Mac用戶具有眾多選擇:這兩個系統中的本地文件和系統級別的備份和恢復都可以通過眾多商業化備份解決方案所實現。諸如Mozy和Carbonite之類的服務可以進行安靜、加密的差異化備份到遠程主機,因此用戶的數據可以被連續保護并離線保存。但是這些服務都不支持Linux客戶端。
Linux用戶如果希望執行離線備份,通常要借助于本地Linux應用程序,諸如Ubuntu中的簡單備份工具,來備份到一個并非專門用于數據保護的遠程服務器。實際上并不缺少可以與遠端服務器進行會話的Linux備份客戶端,例如在Ubuntu中就有簡單備份套件,但是對普通用戶來說,卻缺少一個與商業化備份提供商整合的應用。
一種可能發生的事情是,隨著一切變得與平臺無關,所有數據的備份都將可以通過特定Web瀏覽器來實現。另一種更可能發生的事情是,專門支持Linux客戶端的完整狀態備份服務將會出現。
結論
本文中所提到的所有Linux缺陷都不是致命的,否則Linux就不會取得今天的成績。但是毫無疑問,這些問題都需要被改進,這可能需要改變某些傳統的Linux功能設計思路,只有保持不斷革新、去偽存真,才能讓Linux真正成為一件完美的產品。
【編輯推薦】