Desde hace un tiempo vengo usando FreeBSD en algunos servidores. Al principio me sentía un poco reacio a probarlo porque pensaba que el constante aumento en la calidad de las distribuciones Linux provocaría, tarde o temprano, la caída de FreeBSD y por lo tanto no justificaba invertir tiempo en estudiarlo. !Cuan equivocado estaba!. FreeBSD podrá tener sus defectos, pero está muy lejos de desaparecer. Sin ir más lejos, se está convirtiendo rápidamente en mi sistema favorito para servidores.
En este artículo comentaré algunas de las ventajas (y desventajas) que he encontrado en mi uso diario de FreeBSD, comparándolas siempre con sistemas Linux que vengo usando desde mucho antes (1998, según Linux counter). El análisis estará enfocado en el ámbito de servidores.
Antes de continuar, vale mencionar que nada reemplaza a Ubuntu en mi PC de escritorio, ya que Linux supera ampliamente a FreeBSD en cuanto a soporte de hardware se refiere (lo cual es algo muy importante en el mundo de los entornos gráficos). En contrapartida, FreeBSD (que tiene su propia lista oficial de hardware soportado) te da la seguridad de ser muy estable en hardware probado. Y esta seguridad (cómodamente ignorable en PCs de escritorio) es sumamente importante en servidores ya que alli lo primordial es la estabilidad y generalmente no se utiliza ningún hardware exótico (como cámaras de fotos, impresoras, escáners, etc).
Un mundo diferente...
Bueno, ni tanto. FreeBSD (que, a diferencia de GNU(is-not-unix)/Linux, sí es Unix :)) no tiene tantas diferencias con Linux como uno esperaría, al menos desde mi punto de vista. Generalmente, la tendencia es: mismos comandos, diferentes opciones. Por lo cual, ya tenemos medio camino recorrido y (gracias a las excelentes man pages) recorrer la segunda mitad es una pasada.
Por otro lado, hay un mito de que FreeBSD es más "complicado" de usar que Linux. No estoy de acuerdo. Me parece que ese mito fue inventado por la misma gente de FreeBSD para alejar a los "newbies" y mantener la comunidad más "saludable". "Vayan... aprendan con Linux y cuando esten listos vuelvan". Pero la realidad es que tanto FreeBSD como Linux tienen un grado similar de dificultad. Es más, estoy seguro de que un usuario FreeBSD (naturalmente acostumbrado a un sistema coherente y bien integrado) le costaría más aprender Linux que a la inversa, debido a que Linux tiene muchas particularidades y dista mucho de poseer la integración de FreeBSD.
Instalando software
Y si... debo comenzar hablando sobre los god-oh-mighty ports, a los cuales FreeBSD debe su gran popularidad. Los ports es el sistema de empaquetado que usa FreeBSD desde sus albores. Un port es básicamente un script con instrucciones para compilar una aplicación en el sistema FreeBSD, concretamente, un Makefile. Dependiendo de la aplicación que se trate, los ports pueden incluir parches necesarios para que la aplicación compile correctamente. Es importante notar que los ports no contienen la aplicación compilada, ni siquiera el código fuente de la misma. Estos son bajados del sitio oficial del autor (típicamente en un .tar.gz) y posteriormente compilados siguiendo las instrucciones indicadas por el script del port. En otras palabras, los ports solo proveen instrucciones de compilación y no el código de la aplicación. La idea está muy buena y es tremendamente escalable. Algunas distribuciones Linux (como Gentoo) ya la han adoptado (con su sistema portage) con gran éxito. Vale notar que los ports también ponen a disposición versiones binarias (compiladas) de los programas (conocidos como packages) aunque siempre es conveniente bajar y compilar los fuentes para estar seguros de tener la última versión (con parches de seguridad, etc).
Al principio uno se podría sentir un poco molesto por tener que compilar todo. Cuando menos, un sysadmin a cargo de varios servidores puede sentir que está desperdiciando electricidad y ciclos de CPU. Afortunadamente FreeBSD ya tiene previsto un mecanismo para bajar y compilar los ports en una máquina (de desarrollo) y luego distribuirlos al resto de las máquinas en forma binaria. Este mismo mecanismo también se puede aplicar para compilar y redistribuir (distintas versiones) del kernel.
De todas formas, opino que la bondad de los ports ya no es tan importante puesto que, si bien los repositorios de software fueron un dolor de cabeza hace unos años, cualquiera de las alternativas actuales (apt, yum, portage) están lo suficientemente maduras.
Sin embargo, vale la pena comentar sobre portaudit, un comando que sirve para averiguar si alguno de los ports instalados tiene alguna vulnerabilidad conocida. Portaudit se nutre de una base central de reportes de seguridad almacenada en un formato estándar (VuXML) y administrada por un equipo dedicado exclusivamente a la tarea. La importancia de que esta base sea única y estándar es evidente. Claro, siempre y cuando el equipo de seguridad haga las cosas bien. Que yo sepa, no hay quejas al respecto.
Espejado de discos
Un tema que resulta de vital importancia en el ámbito de servidores es el espejado de discos. Para sistemas de gran porte generalmente estos problemas se resuelven a nivel de hardware (comprando controladoras RAID) pero últimamente (con la popularización de las PCs para servidores) se ha hecho muy común el uso de RAID por software. En este aspecto, FreeBSD viene con geom, un sistema que nada tiene que envidiarle al Software-RAID de Linux.
Herramientas de usuario
Mucho se ha dicho sobre la ventaja de tener todo el sistema base integrado (FreeBSD), en contrapartida con tener el kernel y las herramientas de usuario ensambladas por terceros (Linux). En este punto no estoy convencido de que uno sea mejor que el otro, pero si sé que la consistencia y calidad de las man pages hace que la balanza se incline para el lado de FreeBSD.
Documentación
Aqui me saco el sombrero. La documentación de FreeBSD consta de dos joyitas que son: el handbook y las man pages. El handbook es de gran ayuda ya que es un compilado de toda la información necesaria para instalar y administrar el sistema, mientras que las man pages tienen la información concisa y los ejemplos apropiados para lograr las tareas. El día que que cai en cuenta de la buena calidad de la documentación fue cuando se me rompió el disco primario del servidor de casa. En otras ocasiones donde tuve problemas similares (usando Linux) he tenido que recurrir a un par de búsquedas en Google, por lo menos, para corroborar que estaba haciendo las cosas bien. Cuando me pasó con FreeBSD, la documentación era tan clara y la mecanismo tan evidente que pude restaurar el sistema solo leyendo las man pages.
Configuración y directorios
Otra característica destacable, consecuencia de ser un sistema bien diseñado y mejor integrado, es la coherencia mantenida en la estructura de directorios lo cual resulta extremadamente útil y evita un montón de tiempo muerto de Googleo, lectura de documentación, etc. De la misma forma, la simplicidad y coherencia en los archivos de configuración es algo que me ha caído muy simpático.
En cuanto a los scripts de inicialización, el sistema rc.d de FreeBSD me parece mucho más prolijo y mantenible que el uso de los abominables runlevels de Linux.
Jaulas
El comando jail permite correr cualquier aplicación (y sus procesos descendientes) en un entorno chroot, incluso aunque la aplicación no soporte chroot. En Linux ya hay software disponible para hacer esto pero, como siempre, cada distribución es una historia distinta. Y más para aplicaciones como éstas que requieren modificaciones del Kernel. Y ya que estamos hablando del Kernel, debo mencionar que es sustancialmente más sencillo recompilar el Kernel en FreeBSD que en Linux, lo cual puede ser consecuencia de que FreeBSD sea más orientado a la compilación (por los ports).
Desventajas
Muy pocas. Al principio extrañaba mucho shorewall pero, desde que conocí Packet Filter, cada vez menos lo extraño menos. También está el tema de los drivers para hardware específico pero no es algo que me haya afectado en absoluto en el ámbito de servidores.
Licencias
FreeBSD está liberado bajo la licencia BSD mientras que Linux bajo la GPLv2, ambas aceptadas por la OSI como licencias libres. La diferencia básica radica en que la licencia BSD no te obliga a divulgar el código fuente de los cambios y por lo tanto no asegura la preservación de las 4 libertades (postura con la cual difiero).
Pero la verdad es que este asunto de las licencias poco le cambia la vida a un sysadmin (siempre y cuando nos mantengamos en el terreno de las licencias libres, claro). En cambio, sí le ha cambiado la vida a empresas como Apple que, según cuenta la leyenda, optaron por desarrollar su Mac OS X a partir de FreeBSD (en lugar de Linux) debido a las restricciones de la GPL. Pero bueno, eso ya es otra historia...
Conclusión
FreeBSD es un sistema operativo más "prolijo", mejor organizado y que intuyo (aunque aún no me atrevería a afirmar) más robusto que Linux. Esto es gracias a que tiene un grupo reducido (y considerablemente selecto) de gente encargada de fiscalizar los cambios. Hasta aca no difiere mucho del funcionamiento de la mayoría de las distribuciones Linux. La razón a la cual le atribuyo su éxito es, por un lado a las correctas decisiones de diseño, y por otro a que (al estar bien integrado y no tener varias distribuciones) todos los desarrolladores están más o menos al tanto del funcionamiento de todo el sistema. Linux no podrá gozar de tales beneficios hasta que no se defina una distro como base (Debian o Gentoo serían mis candidatas actuales). Considerando la diversidad de distros disponible y los intereses (en muchos casos comerciales) asociadas a éstas, esto es algo muy díficil (sino imposible) de que suceda. Hasta no que dejen de aparecer distribuciones nuevas todos los días y los hackers concentren toda su energía en pulir y mejorar una distribución particular, esta situación no va a cambiar. Desconozco la solución a este problema y sé que, para muchos, esto ni siquiera es un problema, sino una ventaja. También sé de varios proyectos destinados exclusivamente a mejorar este situación, como el caso de FreeDesktop, señal de que no todo está perdido :).
En definitiva, la razón por la cual FreeBSD se conserva tan "prolijo" es que FreeBSD hay uno solo. En Linux, en cambio, hay un millón de distribuciones, cada una con sus particularidades y en muchas casos reimplementando cosas que ya existen en las otras (caso yum, apt). Ya sea por falta de coordinación, o por alegar carencias de las alternativas, las distros de Linux continúan día a día re-inventando la rueda. No me malinterpreten, estoy de acuerdo que es bueno tener alternativas pues nos da la libertad de elegir. Sin embargo, esa misma libertad/flexibilidad es la que impide que haya una mayor cohesión en el sistema y, en consecuencia, impone más dificultades a la hora de lidiar con problemas. En cierta medida, yo lo veo como una analogía entre los lenguajes de programación Python y Perl. En Perl (que en este caso sería Linux) la filosofía es tener muchas formas (diferentes) de hacer las cosas para que sea el programador quien opte por la de su preferencia y que asi, de cierta manera, el código tenga un "toque de arte" propio. Python, en cambio, opta por hacer hincapié en el hecho de tener una única forma oficial/aceptada/intuitiva de hacer las cosas de manera de preservar al máximo la coherencia en el código y asi promover la legibilidad de códigos ajenos. Yo, particularmente, me inclino por la filosofía Python.
Actualización: !Gracias a todos los barrapunteros por sus comentarios!. A raíz de ellos he decidido reemplazar el ícono original del artículo por uno más "neutral". Mi intención nunca fue la de iniciar un "flame war" sino simplemente contar mi experiencia personal con ambos sistemas operativos. Espero haber reflejado esa idea en el texto y reconozco que el ícono original no fue una decisión muy inteligente.