为什么ubuntu来源与原作不同?

当我做:

wget ftp://ftp.openbsd.com/pub/OpenBSD/OpenSSH/portable/openssh-5.8p1.tar.gz wget ftp://ftp.openbsd.com/pub/OpenBSD/OpenSSH/portable/openssh-5.8p1.tar.gz.asc gpg openssh-5.8p1.tar.gz.asc tar -zxvf openssh-5.8p1.tar.gz mv openssh-5.8p1 openssh-5.8p1_downloaded apt-get source openssh-server diff -r openssh-5.8p1 openssh-5.8p1_downloaded/ | wc -l 

我得到了大量的差异(wc -l返回3000行)。 这是为什么?

管理包并将应用程序导入Ubuntu存储库的Ubuntu开发人员保留修改这些应用程序的权利 。 他们被允许这样做,因为几乎每个软件都有免费许可。 他们不试图掩盖它,任何人都可以看到这些变化。 事实上,他们甚至更改了软件包的版本,以表明它与原始版本不同。 您执行的apt-get source命令在版本5.8p1-7ubuntu1中下载了openssh-server 。 注意后缀。 (您可以使用任何包管理器检查版本)。 方案orig_version-XubuntuY在所有包中都很常见。 X编号表示Debian中修订号 ,Y代表Ubuntu中的修订号也许你知道它,但是作为对所有可能读到这个答案的人的旁注:大多数ubuntu软件包是从Debian存储库复制的 – 所以如果Debian开发人员发布了七次5.8p1版本,每次他们包含他们的更改时都将它发布到存储库而且,这是Ubuntu开发人员第一次发布它们的更改,结果版本号将是5.8p1-7ubuntu1。

如果上游版本足够好,他们为什么要或者需要包含自己的更改?

  • 上游包是为普通观众提供的。 但是,与任何其他发行版一样,Ubuntu有许多特定的更改,例如一个有点不同的有组织的文件系统。 在这种情况下,任何使用系统架构的这些部分的应用程序(仅在Ubuntu中进行了更改)都需要适应Ubuntu。
    • 一个很好的例子是大多数应用程序都已准备好,以便它们可以与Apport一起使用 – 崩溃检测和错误报告工具,专门用于Ubuntu。
  • 在许多情况下(尽管不是openssh-server),需要进行这些更改以确保正确的桌面集成。 没有多少应用程序了解Unity,因为它在其他发行版中并不常见。 这意味着如果应用程序应该与指标,Dash或其他任何东西集成,Ubuntu开发人员必须实现此function并通过对存储库的更改来发布应用程序。
  • 所有发布后的错误修正都作为本地(Ubuntu范围)更改发布到源。 在Ubuntu的单个版本中,应用程序永远不会更新到较新的上游版本。 这意味着如果您的Oneiric与openssh-server 5.8p1一起发布,它将不会更新为5.9p1 – 您需要等待Precise,或者自己获取。 但是,Ubuntu提供了修复关键错误和安全问题的更新。 这些修补程序必须应用于适用于Ubuntu系列的版本 – 在您的情况下是Oneiric – 并作为5.8p1版本的更改发布。
  • 有时应用程序开发人员的质量要求低于Ubuntu。 Ubuntu开发人员不时会在将应用程序上传到存储库之前修复应用程序中的错误。
  • 还会发生修订号增加而不引入任何更改。 当应用程序需要重建时,由于对其所依赖的库(或新版本)的重大更改,就会出现这种情况。 然后增加修订版号以突破包版本。

您可以在以下两个位置获得有关更改的更多信息:

在那里你可以找到你感兴趣的包,选择你感兴趣的版本,甚至下载debian源包来手动读取所有的.patch文件,这些文件由Ubuntu开发人员提供,并在构建时应用于原始源代码。 Ubuntu包。

另请注意,这些更改总是在软件包的更新日志中进行简要说明(可在这些站点上使用,也可以使用计算机上的大多数软件包管理器 – 但是有一个指向您的openssh-server 的链接 – 请至少阅读它以了解版本号如何包含补丁的更改)。

我希望你会发现它清楚!