“上游”和“下游”这两个词很模糊,我想一般人不会真正使用它们。如果您只是一个Linux用户并且不编写或维护软件,那么这些术语很可能对您来说毫无意义,但它们对Linux世界中各个社区相互交流的方式很有帮助。这些术语用于网络、编程、内核,甚至用于供应链等非计算机领域。当我们谈论上游和下游时,讨论上下文很重要。在最简单的形式中,上游和下游是信息流动的方向。由于我们都是在连接到Internet时阅读本文的,所以让我们看一下适用于Internet服务提供商(ISP)的上游/下游示例。在这里,ISP关心的是流量。上行流量是指来自不同ISP用户的数据。比如你有一个网站提供时事通讯订阅,我发送的订阅信息就是上游数据。下行流量是指从一个用户发送到不同ISP处的另一个用户的数据,它被视为下行流量。使用相同的订阅示例,假设我的订阅请求已获批准,我在一封电子邮件中收到“欢迎”通知,在另一封电子邮件中收到最新的时事通讯。在这种情况下,数据正在向下游传输,因为它是由您(嗯,可能是代表您的自动化软件)发送给我,另一个ISP的用户。摘要:我需要或想要的东西(您的时事通讯)在上游。你提供给我的(欢迎说明和实际沟通)是下游的。数据是在上游还是下游,对我们用户来说可能无关紧要,但对监控带宽使用情况的服务器管理员、发行商(发行版的生产者)和程序员来说却很重要。在Linux世界中,有两个主要的上下文,上游和下游。一个是关于内核的,另一个是关于应用程序的。还有其他的,但我希望我能用这两个来表达我的想法。Linux内核上下文中的上游和下游Linux是内核。创建发行版时,Linux发行版以未修改的内核源代码开始。然后添加必要的补丁来配置内核。内核的配置基于发行版想要提供的特性和选项。一旦决定,内核就会相应地创建。原始内核来自发行版的上游。当发行版获得源代码时,它会流向下游。一旦一个发行版获得了内核代码,它就会在重新设计时留在发行版中。在准备好发布之前,它对我们的用户来说仍然是上游。发行版创建的内核版本将添加补丁并启用某些功能和选项。此配置由发布者决定。这就是为什么有多种Linux版本的原因,例如,Debian与RedHat。发行商决定向他们的用户群提供哪些选项并相应地编译内核。一旦这项工作完成,它就在一个准备发布的存储库中,我们可以获得一个副本。该副本向下游流向我们。同样,如果分销商在内核中发现错误,修复它,然后将补丁发送给内核开发人员,以便他们可以为下游的每个人修补内核。这称为对上游的贡献,因为这里的流量正在上升到原始源。应用上下文中的上游和下游同样,从技术上讲,Linux是内核,其他一切都是附加软件。出版商还在他们的项目中包含额外的软件。在这种情况下,有几个上游。一个发行版可以包含任意数量的应用程序,例如X、KDE、Gnome等。假设您正在使用nano编辑器并发现它不能正常工作,因此您向该发行版提交错误报告。出版商的程序员会查看它,如果他们发现他们在nano中插入的错误,他们会修复它并在他们的存储库中发布一个新版本。如果他们发现错误不是他们造成的,发布者将向上游的nano程序员提交错误报告。当涉及到错误报告、功能请求等时,最好将它们向上游发送到维护您正在使用的发行版的内核和附加组件的发行版。例如,我在几台机器上使用一个名为Q4OS的发行版。如果我在程序中发现错误,我会向Q4OS人员报告。如果你恰好在使用Mint,你将它报告给Mint项目。例如,如果您在一般的Linux论坛上发布问题并提到您使用Mint,您一定会得到这样的回复。“这个问题最好在Mint论坛上处理”。使用前面的nano错误示例,Mint程序员可能会修改nano以更好地与他们的发行版一起工作。如果他们确实犯了错误,他们会想知道,并且在犯错之后,他们将成为修复错误的人。修复后,更新后的程序将放入您可以使用的存储库中。当您获得更新时,它会向下游流动,就像这样:如果发布者进行了修复,则新版本将在发布存储库中可用。如果应用程序的程序员进行了修复,则会将其发送给发布者以测试新代码。一旦发现它可以正常工作,它就会被储存起来流向下游。曾经有一段时间自动流向下游,用户必须自己获取更新。用户获得更新的源代码并编译新的可执行文件。随着时间的推移,创建了诸如apt之类的工具,以允许用户从软件存储库中提取更新的二进制文件(可执行文件)。apt程序是Debian的,但其他发行版也有自己的类似程序用于此目的。像apt这样的程序处理上游/下游工作。如果您使用升级选项运行apt,如下所示:sudoaptupgrade它将在(上游)分发存储库中查找,找到任何需要的更新包,将它们拉到您的机器(下游)并安装它们。一些发行版更进一步。发行版的程序员和维护人员总是检查他们的产品。很多时候,应用程序员会改进他们的程序。系统库经常更新,安全漏洞被堵塞等等。这些更新可供发布者使用,发布者随后在发布存储库中提供新版本。有些发行版不会让你每天都运行apt,而是会提醒你可用更新并询问你是否需要它们。如果需要,只需接受,更新将发送到您的机器并安装。总结起来,上游和下游其实只是数据流动的方向。这些数据向上游或下游流动的方式取决于最终需要处理它的人。基本上,程序员在上游,用户在下游。同样,作为用户,我们真的不需要关心这些术语,但这些概念确实有助于软件的开发和维护。通过将工作分配给适当的组,可以避免重复工作。这也确保了标准维护。例如,Chrome浏览器可能需要做一些小的改动才能在某个发行版上运行,但它的核心是Chrome,它的外观或行为并没有太大不同。如果您在您的发行版中的任何程序中发现错误,只需将其报告给发行版的维护者,通常是通过他们的网站。您将向上游发送它,但是您是否记得您正在向上游发送报告并不重要。