Linux 黑話解釋:什麼是上游和下游?
「 上游 」 和 「 下游 」這兩個術語是相當模糊的,我認為一般人並不會真正使用它們。如果你只是一個 Linux 用戶,並且不編寫或維護軟體,那麼很有可能這些術語對你來說毫無意義,但它們對 Linux 世界中各個社區之間的交流方式有益的。
這些術語被用於網路、編程、內核,甚至在非計算機領域,如供應鏈。當我們談論上游和下游的時候,討論背景是很重要的。
在其最簡單的形式中,上游和下游是信息流動的方向。
由於我們都是在連接到互聯網的情況下閱讀這篇文章的,讓我們看看適用於互聯網服務提供商(ISP)的上游/下游例子。這裡,ISP 關注的是流量。上游流量是指數據是從不同的 ISP 的用戶處傳來的。例如,如果你有一個提供訂閱通訊的網站,我發送的訂閱信息就是上游數據。
下游流量是指從一個用戶發送到不同 ISP 的另一個用戶的數據,它被認為是下游流量。使用同樣的訂閱例子,假設我的訂閱請求被批准,我在一封郵件中收到「歡迎」說明,在又一封郵件中收到最新的新聞簡報。在這種情況下,數據是順流而下的,因為它是由你(好吧,可能是作為代表你進行操作的自動化軟體)發送給我,一個來自另外 ISP 的用戶。
總結:我需要或想要的東西(你的通訊)是上游的。你提供給我的東西(歡迎詞和實際的通訊)是下游的。
數據是在上游還是在下游,對我們用戶來說可能並不重要,但對監控帶寬使用的伺服器管理員,以及 發行商 (發行版的製作者)和程序員來說卻很重要。
在 Linux 世界裡,上游和下游有兩個主要背景。一個是關於內核的,另一個是關於應用程序的。還有其他的,但我希望我可以通過這兩個來表達我的想法。
Linux 內核背景下的上游和下游
Linux 就是 內核。在創建發行版時,Linux 發行版首先使用未經修改的內核源代碼。然後添加必要的補丁,對內核進行配置。內核的配置是基於發行版想要提供的功能和選項。一旦決定了,就相應地創建了內核。
原始內核來自發行版的上游。當發行版得到源代碼時,它就流向下游。一旦發行版得到了內核代碼,它就會留在發行商那裡,同時對它進行改造。它仍然是我們用戶的上游,直到它準備好被發布。
發行版創建的內核版本將添加補丁和啟用某些功能和選項。這種配置是由發行商決定的。這就是為什麼有幾種 Linux 流派的原因,例如,Debian 與 Red Hat。發行商會決定向他們的用戶群提供哪些選項,並相應地編譯內核。
一旦這項工作完成,它就會放在一個倉庫中準備發布,我們就可以獲得一份副本。這個副本向下游流向我們。
同樣地,如果發行商發現了內核中的一個錯誤,修復了它,然後將補丁發送給內核開發者,這樣他們就可以為下游的每個人修補內核。這被稱為對上游的貢獻,因為這裡的流量是向上流向原始來源的。
在應用程序背景下的上游和下游
同樣,從技術上講,Linux 是內核,其他都是附加軟體。發行商也會在他們的項目中加入額外的軟體。在這種情況下,有幾個上游。一個發行版可以包含任何數量的應用程序,如 X、KDE、Gnome 等等。
讓我們想像一下,你在使用 nano 編輯器時發現它不能正常工作,於是你向發行版提交了一份錯誤報告。發行商的程序員會查看它,如果發現他們在 nano 中插入了一個錯誤,他們將修復它並在其倉庫中發布一個新版本。如果他們發現不是他們製造了這個錯誤,發行商將向上游的 nano 程序員提交一份錯誤報告。
當涉及到像錯誤報告、功能請求等事情時,最好是將它們發送到上游的發行商那裡,因為他們維護著你所使用的發行版的內核和附加應用程序。例如,我在幾台機器上使用一個叫做 Q4OS 的發行版。如果我發現一個程序中的錯誤,我會把它報告給 Q4OS 的人。如果你碰巧使用的是 Mint,你會把它報告給 Mint 項目。
比如說,如果你在一個普通的 Linux 論壇上發布一個問題,而你提到你在使用 Mint,你肯定會得到這樣的回復。「這個問題最好在 Mint 論壇上處理」。用之前的 nano 錯誤的例子,有可能是 Mint 的程序員對 nano 進行了修改,使其在他們的發行版中運行得更好。如果他們確實犯了一個錯誤,他們會想知道這個錯誤,而且在犯了這個錯誤之後,他們會是修復它的人。
一旦修復,更新的程序就會被放入你可以使用的倉庫。當你得到更新時,它就會順流而下到你那裡,像這樣:
- 如果發行商進行了修復,新版本就會在發行倉庫中提供。
- 如果該應用程序的程序員進行了修復,它將被發送到測試新代碼的發行商那裡。一旦發現它工作正常,它就會被放在倉庫中,向下游流去。
自動流向下游
曾經有一段時間,用戶得自己獲取更新。用戶會得到更新的源代碼並編譯一個新的可執行文件。隨著時間的推移,像 apt
這樣的工具被創造出來,允許用戶從軟體庫中提取更新的二進位文件(可執行文件)。apt
程序是 Debian 的,但其他發行版也有他們自己的用於此用途的類似程序。
像 apt
這樣的程序負責處理上游/下游的工作。如果你用升級選項運行 apt
,像這樣:
sudo apt upgrade
它將查看(上游)發行倉庫,找到任何需要的更新包,並將它們拉到你的機器上(下游)並安裝它們。
有些發行版會更進一步。發行版的程序員和維護者總是在檢查他們的產品。很多時候,應用程序的程序員會對他們的程序進行改進。系統庫會經常更新,安全漏洞也會被堵上,等等。這些更新會提供給發行商,然後由發行商在發行倉庫中提供新的版本。
與其讓你每天運行 apt
,一些發行版會提醒你有可用的更新並詢問你是否需要它們。如果你想要,只要接受,更新就會被發送到你的機器上並安裝。
總結
上游和下游實際上只是數據流的方向。這個數據在上游或下游流動的方式取決於最終需要誰來處理它。基本上,程序員是上游,用戶是下游。
同樣,作為用戶,我們真的不需要關心這些術語,但這些概念確實有助於軟體的開發和維護。通過將工作引向適當的小組,避免了重複工作。這也確保了標準的維護。例如,Chrome 瀏覽器可能需要做一些細微的改變,以便在某個發行版上運行,但它的核心是 Chrome 瀏覽器,它的外觀和行為都不會有大的變化。
如果你發現你的發行版中的任何程序有錯誤,只需向發行版的維護者報告,這通常是通過他們的網站進行的。你將會把它發送到上游,但你是否記得你在向上游發送報告並不重要。
via: https://itsfoss.com/upstream-and-downstream-linux/
作者:Bill Dyer 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive