FreeBSD 有一个 Core Team 来管理这个项目。这些 Core Team 成员是从为数众多的 Committer 中选举出来。这些 Committer 有权力对 FreeBSD 的内核代码进行维护,改进,升级等。 Core Team 和 Committer 对 FreeBSD 的内核代码质量有严格的把关。FreeBSD 的人经常说: 有问题的代码不能在这里生存。而 Linux 的内核掌握在 Linus Torvalds 手 里。所有有能力的人都可以对 Linux 内核作贡献。也就是 Eric S. Raymond 所说的 市集开发模式。 从管理模式来说,Linux 内核的代码质量相对要低一些。因此,如果是求稳定的话, FreeBSD 肯定是不二的选择。
FreeBSD 的应用软件要通过 Ports 系 统 来安装管理。所有的软件都经过特殊的设置来配合 FreeBSD 系统。这 些特殊的配置包括编译的参数,安装的路径,文档的存放等。这样可以方便的管理,安装, 卸载应用软件,而不需要太多人工的参与。而 Linux 系统的应用软件管理则比较混乱,各 种发行版都不相同。不过越来越多的 Linux 发行版都在向 Ports 系统学习。典型的比如 Debian/GNU Linux 的 APT。FreeBSD 的 Ports 系统更新是相当快的。随着系统的每次升级,Ports 系统都会有活跃的更新,以便使 各种应用软件跟上系统的升级。
第三个理由:FreeBSD 有清晰的目录结构
Linux 下目录结构有一个为人诟病的大缺点,就是文件存放的随意性。各种发行版可能都有 不同的选择。比如系统库,就有可能在 /usr/lib,或者 /lib 里面。比如 X (XFree86 或者 Xorg) 应用软件有可能放到 /usr/lib 里面。当一个 Linux 用户想要从源码编译安装 软件的时候,往往没有明确的标准来确定自己编译的软件到底应该安装在什么地方。他有可 能会作很多 symbolic link 把文件链接来链接去。系统里面经常留下很多失效的链接。而 FreeBSD 的目录结构是相当清晰的,我们可以看看一些目录作用的解释:
/bin/ user utilities fundamental to both single-user and multi-user environments
/boot/ programs and configuration files used during operating system bootstrap
defaults/ default bootstrapping configuration files; see loader.conf(5)
kernel/ pure kernel executable (the operating system loaded into memory
at boot time).
modules/ third-party loadable kernel modules; see kldstat(8)
/etc/ system configuration files and scripts
defaults/ default system configuration files; see rc(8)
mail/ Sendmail control files
mtree/ mtree configuration files; see mtree(8)
namedb/ named configuration files; see named(8)
pam.d/ configuration files for the Pluggable Authentication
Modules (PAM) library; see pam(8)
periodic/ scripts that are run daily, weekly, and monthly,
via cron(8); see periodic(8)
ppp/ ppp configuration files; see ppp(8)
ssl/ OpenSSL configuration files
/usr/ contains the majority of user utilities and applications
compat/ files needed to support binary compatibility with
other operating systems, such as Linux (created by
sysinstall(8))
include/ standard C include files
lib/ shared and archive ar(1)-type libraries
aout/ a.out archive libraries
compat/ shared libraries for compatibility
aout/ a.out backward compatibility
libraries
local/ local executables, libraries, etc. Also used as the
default destination for the FreeBSD ports framework.
复制代码
以上是 FreeBSD 系统下命令 # man hier 的输出的节选。 基本上每个目录都有特定的作用,什么东西放到哪里都有明确的规定。系统管理员在管理系 统的时候将从清晰的目录结构中得到很多益处。BSD 学院风格的严谨作风在这里体现得非常明显!
第四个理由:FreeBSD 可以方便的安装升级
Linux 各种发行版的用户肯定都有在网上到处寻找 rpm 的经历。而且很多用户都不敢贸然 升级自己的内核。如果要升级整个基本系统,对于很多 Linux 用户来说就是一个浩大而繁 杂的工程了。对于 FreeBSD 来说,升级只是一件很简单的事情。
就可以自动完成驱动的安装和配置。当然,还有更加快捷的安装方法,使用命令 pkg_add -r nvidia-driver 可以从网上自动下载已经编 译好的驱动然后自动安装。FreeBSD 的官方文档 Using the Packages System 详细解说了 packages 的使用方法。如果是升级已经安装的驱动程序,则可以:
早期 Ruby 采用的是自由软件基金会推荐的 GPLv2 or later 许可证方式。在实际操作中这种许可方式十分常见,这种许可证方式包含两层意思:
软件本身以 GPLv2 许可证发布
当自由软件基金会修订 GPL 并发布新版 GPL 时,授权一方同意受权人以新的 GPL 条款来发布软件 (*)
这其中 (*) 的部分实际上是开给自由软件基金会的一张空白支票,并且可能导致各式各样的法律问题。据我个人的了解,湾区企业的法务部门通常不允许公司以这种方式发布软件,因而,商业公司在使用 GPLv2 or later 许可证的软件时,通常会在发布代码的同时明确说明自己在使用这个软件时只遵循某个特定版本的GPL,以规避潜在的法律风险:
/*
* [company] elects to have and use the contents of [filename] under and governed
* by the GNU General Public License (GPL) Version 2, only. However, the following
* notice accompanied the original version of this file:
*/
然而,实际上这样使用代码也是有风险的。例如,如此这家厂商便无法同时使用 GPLv3 许可证的代码。因为GPLv2 中规定:
4. You may not copy, modify, sublicense, or distribute the Program except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense or distribute the Program is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so
long as such parties remain in full compliance.
同时,GPLv2 中也规定:
6. Each time you redistribute the Program (or any work based on the Program), the
recipient automatically receives a license from the original licensor to copy,
distribute or modify the Program subject to these terms and conditions. You may
not impose any further restrictions on the recipients' exercise of the rights
granted herein. You are not responsible for enforcing compliance by third
parties to this License.
简而言之, GPLv2 only 的代码和 GPLv3 许可证的代码是不能一起 redistribute 的,原因是 GPLv3 中增加了包含对硬件和软件专利等问题而增加的一系列限制自由的条款(违反第6条),而另一方面,自由软件基金会又认为 Ruby License 是非自由软件授权,因此,GPLv3 许可证的软件又不能与 Ruby 以 Ruby License 联编,因为这样做违反 GPLv3 第10条的内容:
10. Automatic Licensing of Downstream Recipients.
[...]
You may not impose any further restrictions on the exercise of the rights
granted or affirmed under this License. For example, you may not impose a
license fee, royalty, or other charge for exercise of rights granted under
this License, and you may not initiate litigation (including a cross-claim
or counterclaim in a lawsuit) alleging that any patent claim is infringed
by making, using, selling, offering for sale, or importing the Program or
any portion of it.
由于 Ruby 只以两种许可证之一发布,因此,发布联编的可执行文件要么违反 GPLv2,要么违反 GPLv3,因此再发布的结果只能以源代码的形式提供,而不允许再发布其二进制文件。
自由软件基金会从 6.0 版开始,将 readline 库改为 GPLv3 or later,这样一来,GPLv2 only 的 Ruby 便不能发布联入了 readline 的可执行文件了。