Unix 的包依賴是如何形成的?馮東2012-09-22 22:59:01

首先,「包依賴」是某些 Linux 發行版上比較嚴重的現象,與一般意義上的 Unix (包括 OS X) 無關。

其次,「包依賴」是懼怕 redundancy 的想法發展為惡趣味之後的產物。

第三,在 OS X,商業 Unix,和 Windows 中也多多少少有「懼怕 redundancy」的思維,為什麼沒有形成嚴重的包依賴局面呢?這是因為在多方提供安裝包的情況下,象 dependency management 這樣複雜的機制是根本無法運轉的。到了某些 Linux 發行版上,它們的所有 installation package 其實都是這個發行版的開發者自己進行二次封裝的。有了這個基礎,他們才開始樂此不疲的玩起「包依賴」藝術來。

Unix 的包依賴是如何形成的?pansz2012-09-22 22:59:53

任何程式設計師寫程式都有可能會依賴一些別人已經寫成的庫,所以幾乎一定規模的程式必然有依賴。

不同體系用不同的方法解決依賴問題。

GNU/Linux:通常這個系統大多數軟體是自由軟體,換句話說,他們通常依賴的庫也是自由的,所以軟體開發者認為你可以自由的獲取這些依賴庫,自然就不需要自己再提供了。由系統“發行版”負責維護屬於這個系統的所有依賴庫,並且安裝軟體時確定依賴。

這個體系的特點是:

系統依賴通常是統一的,如果有多個程式依賴同一個庫,在這個系統中通常是同一份。

具有龐大的資源。例如 Debian 系現成的可依賴軟體多達 30G,所以通常不可能預先把所有依賴都安裝全,但龐大的依賴庫給程式設計人員提供了很多方便。

你安裝的軟體越多,共同依賴所體現出的價值越高,解決依賴問題就越簡單(因為當你安裝足夠多軟體時,主流的依賴已經全部在你係統了)。

由於巨大的共同依賴庫存在,軟體本身可以很小。

Windows:通常而言,這個系統的軟體是商業軟體,因此,他們依賴的庫也很有可能是商業軟體,所以,不可能要求使用者自行獲取這些依賴,這些依賴通常在釋出軟體的時候提供。如果你安裝的軟體少,這個體系很方便。

不過這造成了一些缺點:

沒有一個龐大的公共庫,很多功能以及基礎庫都是每個公司自己實現一套,浪費很多勞動力,程式設計人員到每個公司得學習一套不同的庫,給程式設計人員帶來不便。

所有應用程式都自己帶依賴,因此很可能有許多程式同時附帶了相同的依賴,並且這些相同依賴還有可能是不同的版本,這會造成許多混亂。

由於所有應用程式都自己提供所有依賴,每個軟體體積都很龐大。

系統中安裝的軟體越多,越容易出問題。

OSX 理論上是兩者的結合,具體我沒有認真研究過,請懂的人說說。

Unix 的包依賴是如何形成的?李遙2012-09-23 06:49:13

Unix的全域性包依賴是最糟糕的想法之一。Userland程式自顧自就好了嘛,井水不犯河水,就像DOS時代一樣。

Unix 的包依賴是如何形成的?zpan2017-12-24 21:18:25

因為開源的那幫人都有強迫症,希望所有的庫在系統裡只有一份。

不過 Linux 也已經在逐漸改變這一情況了,前有 Docker,後有 FlatPak 和 Snap。

Unix 的包依賴是如何形成的?Xi Yang2017-12-24 23:07:19

因為傳統的Unix認為軟體安裝包=原始碼包,認為作業系統=IDE。因此係統裡的庫,既是執行庫,也經常是開發庫 => 軟體安裝包就不需要、不應當攜帶一堆依賴的庫 => 作業系統就有解決依賴庫的需求 => 需要一個集中式的包管理器。

實際上,對於開發人員來講,集中式包管理系統是非常方便的,特別是當你對庫的特定版本要求不高的時候。微軟最近推出了一套非常類似Linux包管理器的玩意,廣受好評。

此外,開源世界裡大量的庫,是執行功能非常單一的小庫,而不是像Qt那樣的大型、綜合解決方案。那麼你要是想自己帶DLL,就得帶一大堆。

OS X 安裝軟體需要解決包依賴關係嗎?

顯然不需要。OS X的軟體釋出使用bundle,軟體和它需要的資源塞在一個目錄裡。除非你在OS X上裝GNU那一套,才需要包管理器。

為什麼 Linux 總是在安裝軟體時才解決包依賴關係?

你怎麼可能預知?