FreeBSD能够同BSD/OS、NetBSD和OpenBSD的Intel平台上的应用程序相兼容,同为BSD家族的成员,他们非常类似 。NetBSD、OpenBSD和FreeBSD同为免费系统,并且具有同样的起源,与FreeBSD的关系非常密切,因此FreeBSD能直接运行NetBSD和OpenBSD的Intel平台下的执行程序 。然而NetBSD和OpenBSD也是自由操作系统,因此它们中的应用程序也会有相应的FreeBSD版本,因此这个功能一般很少用到 。BSDI是一个商业公司,因此会提供BSD/OS下的二进制执行文件,但不提供源代码 。FreeBSD能够完美的运行BSD/OS下的a.out格式的执行文件,ELF执行格式的程序也能执行,但偶尔会有问题发生,因此就需要调整系统设置 。
FreeBSD也能够执行SCO Unix的执行文件,这需要使用内核的ibcs2(Intel binary compatibility system 2)选项 。这需要载入一个内核可加载模块,这需要使用root身份执行ibcs2命令以载入ibcs2模块 。
# ibcs2可以在rc.conf中设置 “ibcs2_enable=YES” ,使开机后立即载入这个模块 。
但是要执行SCO的应用程序,仅有内核支持还是不够的,还需要有SCOUnix的函数库 。但SCO Unix的库函数是SCO Unix的一部分,受版权保护的 。如果使用者拥有合法的SCO共享库和应用程序,就可以运行SCO Unix上的大型商业应用程序 。
同样,FreeBSD也能够运行Linux的可执行程序,与执行SCO程序类似,这也要求内核支持并载入相应的模块 。rc.conf中的相应参数为 “linux_enable”。
# linux但是与SCO不同的是,Linux是一种自由操作系统,其库函数为GNU开发的函数库,使用GNU通用许可保护自由使用的权利 。因此FreeBSD在PackagesCollection中提供了Linux的共享库,安装了这些Linux的库函数之后,就可以执行Linux的执行程序了 。
# pkg_add /cdrom/packages/All/linux_lib-2.6.tgzFreeBSD也能执行Solaris x86和SCO Unixware的ELF格式执行程序,只是这个功能还没有加入正式发行版本 。同样,这也需要相应的系统动态连接库文件,但是这些库是商业产品,因此使用起来就会受到限制 。
运行Linux应用程序
在运行Linux应用程序时,会遇到一些程序不能正确执行的情况,很多情况下并不是FreeBSD本身的问题,而是由于系统的设置不正确造成的,必须作一些设置和调整 。
由于Linux使用Elf文件格式,有些时候FreeBSD不能分清一个ELF执行文件是那种系统的执行文件,而误认为是FreeBSD的执行文件,导致不能正确执行程序 。此时就需要使用brandelf命令来指定需要执行的ELF执行文件的类型,Linux的ELF执行文件为Linux:
$ brandelf -t Linux linux_application另一种差异是系统文件名字的差异,例如Linux的加密口令文件为shadow,而FreeBSD使用master.passwd,Linux的控制台终端设备文件为/dev/tty0,FreeBSD为/dev/ttyv0,对于一些要使用这些系统文件的应用程序,就造成无法正确读取相应文件的问题,这种情况可以使用符号连接来解决 。
# cd /etc# ln -s master.passwd shadow# cd /dev# ln -s ttyv0 tty0此外,Linux动态连接库的版本不合适,也是很多Linux程序不能正常运行的主要原因 。Linux使用GNU开发的glib作为库函数,编译器gcc首先实现了glibc1,用于兼容标准的C库函数libc5 。随着gcc的发展,它发展到了glibc 2,也被称为libc6 。这两个不同版本的库有一定的差异,glib2功能更强,但由于出现时间还短,不是所有的Linux版本都使用glibc2 。有的Linux版本还在使用glibc1,如Slackware 3.6,而另一些Linux如RedHat 5.0,Debin 2.0都使用glibc2,因此运行Linux应用程序的时候,首先就要确认其使用的C库函数版本 。除了标准的C库之外,Linux应用程序使用的其他动态连接库也会存在不一致的问题 。
因此如果Linux应用程序使用的库和FreeBSD安装的Linux共享库版本不一致,那么就不会正常执行这些Linux程序 。Linux是一个非常活跃的开发系统,某些版本的Linux常常等不及系统稳定就将应用程序及其使用的库升级,因此为了运行要求新动态连接库的Linux应用程序,就必须及时更新Linux的共享库 。除了及时更新FreeBSD正式发行的Linux共享库(这个共享库通常为一个稳定版本,不会一味求新)之外,为了跟上Linux升级的脚步,还必须手工安装Linux的库和其他执行文件 。
- 56 FreeBSD连载:手工编译安装程序
- FreeBSD的boot0阶段介绍
- 34 FreeBSD连载:手工配置网络
- FreeBSD spell 拼字检查
- 60 FreeBSD连载:缺省内核配置选项
- 41 FreeBSD连载:在FreeBSD上查看邮件
- FreeBSD nessusd命令介绍
- FreeBSD trafcount命令介绍
- 77 FreeBSD连载:安全工具
- 65 FreeBSD连载:SMB/CIFS协议
