我最近了解到,基於 Debian 的發行版本質上有一組固定的公共依賴項和庫,任何透過套件管理器安裝的應用程式都需要使用它們。
與 Windows 相比,我相信每個應用程式通常都會提供自己的依賴項 - 因此 Windows 作業系統安裝將多次安裝相同依賴項/庫的實例,並且每個應用程式都需要管理其依賴項的更新自己的。
我知道一些開發人員開發的軟體與 APT 套件管理器相容,但我想一定有很多應用程式開發人員以「Windows」方式創建軟體。
所以我的問題是,如果上游開發人員創建他們的軟體的目的是分發包含捆綁依賴項的大型整體安裝,那麼APT 套件維護者是否需要重寫原始程式碼,以便軟體使用依賴項的公共集合而不是本地依賴項依賴關係?
如果是這樣,這種情況是否經常發生?
答案1
所以我的問題是,如果上游開發人員創建他們的軟體的目的是分發包含捆綁依賴項的大型整體安裝,APT 套件維護者是否需要重寫原始程式碼,以便軟體使用依賴項的公共集合而不是本地依賴項依賴關係?
不一定,只要整體安裝不衝突與現有的庫或檔案名稱。也就是說,如果系統已經有一個/lib/foobar
(版本 12),並且單體包需要並捆綁foobar
v.9,則該單體包無法foobar
使用 filename 儲存其 v.9 /lib/foobar
,因為該路徑名已被採用 - 但它可以使用/lib/foobar_v9
,或者也許.../monolithic_app_dir/lib/foobar
。
如果是這樣,這種情況是否經常發生?
是的,預防,如果需要的話整理各種程度的依賴地獄是包維護者所做的大部分工作。
答案2
Debian 政策是在創建 debian 軟體包時,與程式捆綁在一起的庫、工具等應該與其分離。 Debian 政策還要求庫至少分成一個運行時包(例如libfoo-version
)和一個帶有靜態庫和頭文件的開發版本(例如libfoo-version-dev
)。
您在自己的系統上做什麼是您自己的事,但是任何打包整體應用程式的Debian 開發人員(DD) 都應該解綁- 這意味著要么依賴Debian 中的現有庫,要么為它們創建包(如果它們尚不存在) 。
其他發行版可能有不同的政策,但大多數發行版都要求將官方存儲庫中的軟體包解綁- 因為捆綁破壞了打包的意義,並且使得將庫安全更新應用於使用特定庫的所有程序變得更困難。