FreeBSD 为什么要废弃 GCC 改用 Clang/LLVM?
| 2013-08-17 21:49 分享: 1
摘要: 从GCC 迁移到 Clang 的主要原因是GCC 的GPL v3与 FreeBSD 项目目标的不兼容. 还有一些与公司投资相关的政治因素,以及来自用户的需求. 当然, 也有一些技术上的因素, 如符合标准, 容易调试. 但对于实际编译和运行性能的提升任具有争议且依赖于具体的代码, 两个编译器各有所长.
FreeBSD 和 GPL: FreeBSD 和 GPL 的关系很复杂. BSD许可证的支持者认为真正免费的软件不应该有任何使用限制. GPL支持者相信 为保护软件的自由,限制是必须的. 特别是基于免费软件来开发收费软件是不正当的行为, 而不是自由. FreeBSD项目尽量 避免使用GPL:
由于在商用PGL许可证的软件时可能带来额外的复杂情况, 我们尽可能使用更开放的FreeBSD许可证的软件来替代此类软件.
FreeBSD 和 GPL v3协议:GPL v3很明确的禁用了代码的所谓Tivoisation认证,在GPL v2协议中,存在一个可以通过硬件限制来阻止用户对软件程序进行合法修改的漏洞。怎么样很好的关闭这个漏洞是FreeBSD社区并不期望的步骤。
在v2协议中由于臃肿的软件认证而受损的设备商如今正在向新的认证迁移。他们不再具有使用v3软件同时修改安装到本地硬件平台的自由...简短来说,将会有一大批热爱开源社区的人们突然对CPL新的认证软件的可选性变得饶有兴趣
因为GCC已经转移到GPL v3 (通用公共许可证General public license),FreeBSD被迫继续使用GCC 4.2.1 (GPL v2),它还是 早在2007年发布 的 ,现在已经明显过时。现实是FreeBSD没有转而使用GCC的更为现代的版本,即使是存在运行老旧编译器与(从新版本)向后移植修复之类的额外困难,所以应当考虑一下对避免GPL v3的必要性的强调。C编译器是FreeBSD基石的一个主要组件,而且是" 将FreeBSD 10作为基于GPL免费系统的 (试验性的)目标之一"。
公司投资: 就像许多主流的开源项目, FreeBSD从企业获得 投资 与 开发工作。 尽管Apple对FreeBSD的投资与开发到了何种程度并不容易揭露,但有相当多的重叠工作,因为Apple的 Darwin OS 使用了源自BSD的稳定的 内核代码。此外,在成为 2007年开源项目之前, Clang本身是源自于一个Apple内部项目的。由于企业资源是FreeBSD项目的关键促进因素,或许迎合赞助商的需求是 一个显著的现实世界的驱动力 。
用户基础:FreeBSD对许多公司来说是一个诱人的开源选项,因为她的许可是简单的,低限制以及不会引导公司走向诉讼的许可。随着GPL v3以及 反 Tivoisation时代的到来,越来越多的迹象显示,未来将会 是迅速的,以设备商为驱动的多元化许可时代。随着FreeBSD逐渐觉察到了那些建立在自己许可之上的商业实体所能带来的巨大利益,对于那些要从GCC以及传统GPL迁移许可方式的合作伙伴来说,他们的将会面临越来越大的压力。
GCC存在的问题:除了许可部分,在使用GCC的过程中 还存在许多比较明显的问题。GCC并没有完全符合已制定规范标准,他的 许多扩展在ISO以及C标准规范中并没有定义。在超过300万行之多的代码中,他仅仅是“ 一个复杂的免费开源软件项目”。其复杂性使得他在发行版发行后再进行修改变成巨大的挑战。
技术性的优势: Clang与GCC相比拥有许多技术上面的优势。其显著特点在于 数量众多的错误信息提示以及一个 定义良好的IDE接口。同时他又支持代码重构并且提供代码分析工具。尽管 Clang官网上提出了更有效的编译以及内存管理功能。但是实际 情况却是不同的。GCC在代码方面的表现还是比较优秀的。总之,Clang提供的二进制库比GCC 运行速度更慢。
虽然使用LLVM在构建代码的时候比GCC更加迅速...但是在大多数情况下,GCC4.5的二进制类库的变现是好于LLVM-GCC和Clang...在其他的一些测试中,其表现则是接近或者是远远落后。在大多数测试中,Clang的整体二进制库是非常简单的。
总结 :这样强有力的编译器并不是一次冒险将一个像FreeBDS这样的大项目改变成一个新的编译器工具链的重要激励。尤其是在二进制运行效果不佳的情况下。然而,这种情况在现实中却是站不住脚的。让你在以下几种情况中做一个选择
1)继续使用过时的GCC,
2)迁移到最新版GCC并被迫使用一个与项目目标不适应的许可,或者
3)干脆迁移到一个支持BSD许可的稳定编译器,这样的选择在现实中似乎是不可避免的。
需要清楚的是:这些情况只应用在基础系统中,并且服务于系统发布;至于其他情况,没有其他任何事情都不能阻止用户在基于FreeBSD的项目中安装和使用一个现代版的GCC
英文原文:Why is FreeBSD deprecating GCC in favor of Clang/LLVM?
via http://www.oschina.net/translate/why-is-freebsd-deprecating-gcc-in-favor-of-clang-llvm