我正在使用 Amazon Linux AMI,它似乎是 RHEL 或 CentOS 的某个分支。我读到它应该与 RHEL 二进制兼容。我的问题是:与使用 RHEL 或 CentOS 存储库相比,从源代码编译软件包有什么优势吗(因为它们也应该可以工作)?
答案1
理论上,编译您自己的源代码可以利用利用硬件的特定编译器优化。实际上,对于大多数应用程序来说,它不会带来明显的区别 - 特别是与依赖项、更新、测试等相关的问题相比。这一优势还预示着编译器可以针对相关功能进行优化,但这绝不是必然的。
有一句名言唐纳德·克努斯:
“程序员浪费了大量的时间去思考或担心程序中非关键部分的速度,而这些提高效率的尝试实际上在调试和维护时会产生强烈的负面影响。我们应该忘记小效率,大约 97% 的时间:过早优化是万恶之源……但我们不应放弃那关键的 3% 的机会。”
此时,为了提高性能而自行编写二进制文件绝对属于这一类。有时可能需要发行版中没有的特定功能(例如),但这种情况应该很少见。
答案2
官方软件包经过测试、支持,并且安全补丁会反向移植到其中,因此存在一些缺点。通过编译自己的软件包,您将走出这个网络,并且至少不必依赖多个维护者小组来提供补丁。
答案3
从源代码编译可以比从存储库编译提供更新的版本,它可能包含一些错误修复。但在生产服务器上安装编译器并不是最佳的安全实践。
答案4
通过编译,您可以优化您的硬件,正如其他人所说的那样,或者启用二进制包中没有的功能。
但从源代码编译的自定义软件包可能更难维护。您必须自己检查更新和安全问题,并在需要时编译新版本。