我总是听到人们说,在设计软件等时,“合并上游”之类的东西更好。我感觉这与主流 Linux 内核有关,但我可能错了。
另外,“上游”的反义词是什么?如果“上游”不好,那么还有什么其他选择,为什么?
答案1
上游是指正在讨论的组件的发起者。
例如,如果您编写了一个基于 libtransmission 的 torrent 客户端,那么在您的客户端中会发现一个错误,该错误可追溯到 libtransmission。该错误已通过补丁修复,现在已包含在您的客户端中。
在此上下文中,将补丁合并到上游意味着将补丁发送给 libtransmission 的作者以供纳入。这样,修复将传播到基于 libtransmission 的每个项目。
合并上游的替代方法是自己保留补丁。
答案2
以 Ubuntu 为例。
Ubuntu 是一个将大量软件打包在一起的发行版,有大有小。其中包括图形驱动程序、X 服务器和 Gnome。Ubuntu 本身并没有开发这些软件。Ubuntu“只是”将软件打包在一起,确保各个组件能够协同工作。Ubuntu 打包在一起的所有软件都称为上游从 Ubuntu 的角度来看。
在将所有软件组合在一起的过程中,可能会出现错误。错误可能出现在某个软件组件中,例如 gnome,也可能出现在 Ubuntu 的非常特殊的做事方式中。毕竟,发行版之所以是发行版,是因为它以自己非常特殊的方式做某些事情。
如果错误是由 Ubuntu 的做事方式引起的,那么 Ubuntu 将不得不自己修复该错误。如果错误实际上存在于某个软件组件中,例如 Gnome,那么 Ubuntu 将不得不修补 Gnome。当 Ubuntu 将补丁发回 Gnome 时,其他人也可以从该补丁中受益,那么 Ubuntu 正在发送该补丁上游。
如果 Ubuntu 决定不将该补丁发送给上游,或者上游项目拒绝该补丁(但 Ubuntu 决定仍然保留该补丁),那么从技术上讲,Ubuntu分叉该项目。
上游的反义词是下游,Ubuntu 是 Gnome 的下游。我很少听到/看到有人使用这个术语。
另请参阅关于上游的文章在维基百科中。