为什么不同的操作系统从 CRAN 安装包的方式不同?

Why do different operating systems install packages from CRAN differently?

当我 install.package() 在 Windows 机器上的 R 中时,包从 CRAN 下载并安装。当我在 Linux 盒子上做同样的事情时,包通常必须编译(至少,我假设所有那些滚动过去的 g++ 行都是如此)。

为什么 Windows 上的包安装方法不同?

其他 questions and their answers 明确指出,特别是对 Linux 使用不同的方法和存储库,使用户能够获得 more/different 包(特别是使用 cran2deb 存储库)。我的问题本质上更具理论性:为什么 Windows 中的默认选择是下载预编译(二进制?)包,而 Linux 中的默认选择似乎是从源代码编译包?

或者换句话说(基于 Dirk 在上面第二个 link 中的断言),为什么 CRAN 不为 Unix 类型的操作系统提供二进制包?

一般来说,Windows 二进制文件适用于 Windows 的所有版本。

MacOS 的关键/当前版本同上:提供的二进制文件有效。

可悲的是,

Linux 更复杂,因为不同的发行版布局不同。我在 Ubuntu 或 Debian(或更具体地说,其特定发行版本)上构建的东西可能甚至无法在同一发行版的其他发行版上运行,更不用说其他发行版了。在某些情况下,您可以获得二进制文件。在某些时候,我(共同)拥有所有 CRAN 的构建服务,但它 died/broke。一切都可以努力,但是......一些努力。

所以从源头上看是这样。无论如何,这曾经是标准,"Unix" 是一个包罗万象的短语,涵盖了 SunOS/Solaris、AIX、*BSD、SGI 等等。通常甚至使用不同的处理器。所以来源。

已尝试提供 'universal binaries':flatpack 和 snap 是最近的两个例子。然后当然还有 Docker.