FreeBSD vs Debian

Cuando empecé en el mundo de la administración de sistemas hace ya mas de 2 décadas, mi camino rápidamente se orientó hacia Linux/GNU y en concreto Debian. Fue mi acercamiento mas sencillo a la filosofía y conceptos detrás de los sistemas Unix. Con el tiempo fui descubriendo sistemas como OpenBSD por su seguridad, NetBSD y FreeBSD (y algunos de sus derivados notorios como PfSense). Siempre me llamaron la atención por su acercamiento mas «puro» al concepto KISS que va ligado intrínsecamente a UNIX. Pero la inercia de lo ya conocido y el excelente funcionamiento en todos sus aspectos de Debian, no dejaban hueco a aventurarme en un uso mas general, mas allá de tareas concretas, con los sistemas BSD. Y entonces llegó la intrusión de systemd.

No quiero entrar en un debate ya muy hablado y manido entre defensores y detractores de systemd. Cada cual tiene sus argumentos en pro y contra. Yo tengo los míos y systemd no me gusta. Lo utilizo a diario en mi trabajo pues ha sido introducido a la fuerza en casi todo el ecosistema Linux, pero le agradezco haber sido el motivante para aventurarme mas seriamente en el uso de FreeBSD.

Después de muchos años con Debian y algunos menos con FreeBSD quiero intentar compartir las diferencias desde un punto de vista práctico para el administrador de sistemas que no vive en un mundo utópico y necesita tener el trabajo hecho rápida y eficientemente. Quiero puntualizar que lo detallado es siempre desde la perspectiva de la administración de un servidor y no un entorno de escritorio.

Mi primer uso en producción con FreeBSD (excluyendo pfsense) fue la instalación de un servidor para alojar diversas webs en entorno típicamente PHP y la gestión de correos de varios dominios con protección de spam y demás sutilidades varias que se necesitan actualmente en todo moderno servidor smtp. El resultado ha sido muy positivo y me ha servido para toparme de frente en las múltiples particularidades que requiere mantener FreeBSD en su día a día. También tengo funcionando un servidor de FreeBSD para backups en producción disfrutando de las bondades de ZFS. El resultado igualmente inmejorable.

Con esta introducción quiero intentar plasmar que diferencias, pros y contras nos ofrecen cada sistemas. No entraré en detalles sobre la instalación, cualquier administrador de sistemas competente sabrá lidiar con cualquier instalador de ambos sin ningún problema para tener un sistema base correctamente operativo.

Sistema Base

Esto es lo primero que encuentras al llegar a FreeBSD. Existe una perfecta separación entre lo que debe de ser un sistema completo y funcional básico y las funcionalidades extras que quieres añadir en él. Todo está exquisitamente bien pensado, se aprecia el buen hacer de décadas, es un sistema predecible, coherente, sin cambios drásticos entre versiones y perfectamente documentado con un sistema propio e independiente de actualización que funciona a la perfección entre cambios de versiones menores y mayores. Es el sueño de cualquier administrador de sistemas.

Debian en cambio, como toda distribución Linux, es un conglomerado de aplicaciones y librerías con utilidades de gestión propias + un kernel que pretenden crear un sistema coherente. Y generalmente Debian lo hace muy bien, pero no llega al nivel de FreeBSD, ni en documentación oficial ni en perfección ,con cambios de funcionalidades básicas entre versiones (léase systemd) haciendo complicado el actualizar un servidor de una versión de debian a otra mayor. Otro ejemplo claro en este aspecto son las herramientas de red y cortafuegos con varios cambios drásticos en las diferentes versiones de Linux y por ende Debian.

Soporte Hardware

Aquí está clara la ventaja general de Debian, su kernel linux cuenta con un soporte muchísimo mayor tanto de fabricantes como de una comunidad mas amplia lo que le da una mayor fuerza para tener drivers de diferentes dispositivos. Pero esto será mas importante a tener en cuenta en un uso de escritorio. Para el caso de servidores prácticamente no habrá problemas y la mayoría de proveedores de servidores dedicados y cloud/vps serán compatibles con FreeBSD. Y si eres tu quien elige el hardware, verifica antes que sea compatible si lo quieres usar con FreeBSD.

ZFS

Si no conoces este sistema de ficheros, deberías. No es el sistema de ficheros universal para todos los casos ni mucho menos. Tiene su ventajas y desventajas y este no es el artículo para hablar de ZFS. Pero si quieres utilizar este sistema de ficheros, actualmente hay pocos sistemas operativos que lo integre en su base de forma tan magistral como FreeBSD. ZFS también puede ser incluido como módulo en el kernel Linux, incluso algunas distribuciones lo integran de forma predeterminada aunque debian decidió no hacerlo al interpretar incompatible su licencia.

Pero la cuestión no es si lo puedes utilizar o no, la cuestión es «como» y en este sentido la ventaja de FreeBSD es absoluta. Está perfectamente integrado en su base, actualización del sistema y documentación.

Virtualización / Contenedores / VPS / Cloud

Simplificando, básicamente existen dos opciones para tener un sistema independiente del anfitrión/hypervisor: virtualización con kernel independiente o contenedores con kernel compartido. Ambos casos puedes utilizarlos tanto en Debian como FreeBSD.

En cuanto a la virtualización, en Debian los mas común es utilizar KVM, FreeBSD cuenta con Bhyve. En este aspecto podemos decir que kvm tiene ventaja actualmente al tener un mayor soporte tanto de la comunidad como de grandes empresas, bhyve es mas joven pero avanza a buen ritmo con tecnología mas actual y quizás en el futuro de mejor resultado que kvm. Personalmente tengo un par de máquinas virtualizadas en Bhyve con debian instaladas en ellas y no he encontrado problemas de rendimiento mayores, tampoco son máquinas críticas. Una de ellas ejecuta la suite Collabora Online para nextcloud que no ofrece una forma sencilla de instalarlo en FreeBSD.

Pero si hablamos de contenedores se invierten las tornas. En linux ha habido y existen múltiples opciones: Linux-Vservers, OpenVz, lxc, systemd-nspawn, lxd, docker… y otros tantos mas. Yo he utilizado durante bastantes años Linux-Vservers, lástima que no haya tenido la atracción necesaria por la comunidad. En FreeBSD tenemos los famosos Jails, una auténtica joya integrado perfectamente en el sistema (como es habitual en FreeBSD).

Comparando FreeBSD con Debian/Linux en este caso veo una ventaja por su sencillez, facilidad e integración en el sistema base en el primero. LXC (con cgroups, apparmor…) es la tecnología subyacente para la mayoría de contendedores y es un sistema complejo que dependes de la implementación de la distribución y estás atado a utilizar systemd aunque no quieras y las diferentes capas de gestión del manager. FreeBSD le otorgo aquí una clara ventaja, filosofía UNIX y principio KISS. Que si, que luego está docker que es muy fácil en linux y puede facilitar la vida del administrador vago y automatizar procesos… pero no es el mismo objetivo que un sistema completo y tiene sus problemas de diseño.

Aplicaciones y Sistema de paquetes

Este es un apartado importante a tener en cuenta. Un sistema base coherente es fundamental pero luego tenemos que añadir lo necesario para nuestro objetivo. Es aquí donde hay que sopesar mejor las ventajas e inconvenientes de cada SO.

Debian por un lado, ofrece uno de los repositorios mas amplios en cuanto aplicaciones. Entre sus características:

  •  gran cantidad de aplicaciones a instalar
  •  paquetes difieren del original en su configuración a la «debian way»
  •  soporte de seguridad de vulnerabilidades rápido
  •  versión de la aplicación no cambia a nuevas versiones superiores y quedas anclado a la versión instalada durante toda la vida tu versión de debian, si necesitas nuevas versiones tienes que recurrir al «backports» o a fuentes externas a debian que hayan compilado el paquete por ti (con los riegos de seguridad que puede implicar) o buscarte la vida y compilar a mano
  •  para cada aplicación existen diferentes versiones del mismo según diferentes opciones de compilación (postfix-sqlite, postfix-mysql, postfix-ldap…).

Por otro lado, FreeBSD históricamente se ha basado en el sistema de «ports» en el que cada usuario «compila» la aplicación para su sistema, los ports son unos Makefile (y algo más) que ayudan y automatizan esta tarea. Actualmente el sistema pkg (paquetes derivados de los ports con opciones concretas) ha avanzado mucho y es posible tenerlo casi todo como binario instalado. A destacar:

  • La cantidad de diferentes ports/packages para FreeBSD es equiparable al de Debian y utiliza el concepto «rolling release» en el que no mantienen la misma versión inicial del paquete aplicando parches de seguridad si no que van a la par con la versión de aplicación original.
  • No existe apenas y no es necesario el concepto de fuentes externas de terceros ya que tu te compilas lo que necesitas y creas tus propios repositorios fácilmente si lo precisas.
  • A diferencia de Debian, no existe diferentes versiones de un mismo paquete para diferentes opciones de compilación, se incluye uno básico y si necesitas otra cosa… compilas.
  • Para ayudarte en gestionar los ports y packages existen multiples herramienteas como poudriere y synth que alivian esta tarea pero aún así puede ser tedioso.
  • Si utilizas los pkgs precompilados puedes tardar mas tiempo en recibir actualizaciones de seguridad debido a que los recursos de FreeBSD son menores y compilar todo para todas las plataformas soportadas lleva tiempo.
  • Si utilizas paquetes binarios tienes dos repositorios diferentes: «latest» y «quartely». El primero incorpora siempre la última actualización realizada en los ports, sobre todo de nuevas versiones. «Quartely» por otro lado se mantiene «estable» durante tres meses sin modificar versión salvo que haya un problema de seguridad u otro problema serio, en tal caso si se aplica una actualización.

Es difícil decidir cual sistema es mejor en este aspecto. Valga tres ejemplos ilustrativos gestionados con FreeBSD y con Debian: postfix, php, percona.

1. Postfix/Dovecot/Rspamd

Cuando instalé mi servidor SMTP para mis dominios decidí utilizar FreeBSD. Para mi configuración particular requería de postfix con soporte para sqlite, lo mismo para dovecot y también opciones específicas para rspamd. En debian, por defecto, tengo el paquete postfix-sqlite al igual que para dovecot. La instalación habría sido directa. En FreeBSD en cambio, el pkg compilado por defecto es muy básico y para tener soporte para sqlite necesitaba compilar. Para ello cree mi propio repositorio con synth donde mantengo y compilo los paquetes que necesito para los diferentes servidores FreeBSD con lo que de forma transparente para estos siempre utilizo pkgs. Lo malo es que me obliga a estar compilando cada vez que hay una actualización de seguridad, suele ser rápido, pero hay que andar con ojo pues puedes acabar compilando hasta el último paquete del servidor (todos están relacionados, ya entraré en detalle de esto en otro post futuro). La ventaja, que para rspamd no existía la opción que necesitaba en debian y habría sido bastante mas tedioso tener que compilar y mantener a mano sin la ayuda de un sistema como los ports/synths/poudriere de FreeBSD.

2. PHP

Con php veremos claro grandes diferencias de concepto entre ambos sistemas de paquetes. Generalmente, en un entorno hosting suelen cohabitar múltiples versiones de php, incluso algunas muy antiguas y no soportadas desde hace algún año. Digamos que quieres tener disponible desde la versión 5.6 a la 7.4. En Debian, de base, lo tienes muy complicado, existe una sola versión de php soportada en la versión de debian que tengas instalada, en Buster por ejemplo te tendrías que conformar solo con php7.3, ¿ qué haces entonces ? pues necesitas utilizar una fuente externa (sury.org), un repositorio externo en el que depositas tu confianza para instalar binarios en tu servidor y que altruistamente se dedica a preparar y compilar diferentes versiones de php para una versión de Debian concreta. Sin este repositorio «altruista» tendrías que ver para compilar desde cero php sin ayuda de un sistema como los ports con lo que ello puede implicar de complicaciones y tiempo extra de mantenimiento.

FreeBSD en cambio te ofrece en su lista de paquetes todas las versiones de php actualmente soportadas por el propio php, a la fecha actual las 7.2,7.3 y 7.4 pero plantea otros problemas. No es posible hacer cohabitar múltiples versiones de php (he reportado un bug en FreeBSD solicitando a los encargados del paquete de php que remedien este asunto) con lo que para utilizar las diferentes versiones es necesario o compilar modificando las opciones en los ports o bien utilizar un «jail» por cada versión de php-fpm. Para las versiones mas antiguas de php puedes bajarte el último port del mismo desde el repositorio subversion y compilarlo fácilmente, como no hay mas actualizaciones por ser versiones no soportadas por php solo tendrás que compilar una vez.

3. Percona mysql

Hace poco tiempo un cliente me pidió un nuevo servidor con la última versión 8 de Percona mysql. Mi intención inicial fue instalar FreeBSD pero antes verifique si Percona estaba disponible. Lamentablemente no era así en su versión 8, si las 5.5, 5.6 y 5.7. En teoría podría ver de bajar las fuentes y compilar manualmente sin ayuda de los ports y tal… pero a largo plazo esto habría planteado incomodidades en el mantenimiento además del tiempo inicial de puesta en marcha que no serían cubiertos por el presupuesto. Para Debian, Percona no está tampoco disponible (en ninguna versión) en su base pero la propia Percona proporciona un repositorio externo en el que te tienes que fiar y puedes instalar percona sin problemas (bueno, alguno que otro hubo). La elección en este caso estuvo clara y demuestra que el mayor soporte de las empresas a Debian/Linux juega en su favor.

Finalizar este apartado con un concepto importante en la configuración básica e interacción del sistema de paquetes en las actualizaciones. La configuración por defecto de FreeBSD suele estar cercana a la configuración por defecto de la aplicación dejando gran parte de la responsabilidad de configurar la app/servicio al administrador, incluso en los upgrades de servicios estos no son reiniciados habitualmente por pkg y la mayoría de las veces es necesario una intervención manual. En Debian este aspecto está mucho mas automatizado y los scripts postinstall y preinstall, etc intentan minimizar lo posible y hacer automático los upgrades. El problema es que muchas veces esto, en servicios y sistemas complejos entrelazados, puede resultar en errores. Puedes controlar un servicio automáticamente pero difícilmente su interrelación con múltiples otros factores con lo que al final suele ser necesario prestar atención a las posibles tareas automatizadas que realizará el sistema de paquetes para que no te deje el sistema KO si pretendes automatizar el upgrade en múltiples servers simultáneamente. Ya es cuestión personal, pero me gusta mas la forma de FreeBSD de intervenir lo mínimo posible en el sistema ya que al final siempre tienes la responsabilidad de verificar que todo sucede correctamente.

Seguridad y «Long Term Support»

Para el mantenimiento de un sistema durante probablemente años es necesario que este de soporte de seguridad y actualizaciones, tanto a su sistema base como a sus aplicaciones (aunque siempre puedas compilar las aplicaciones tu mismo). Tanto Debian como FreeBSD ofrecen un dilatado tiempo de soporte para una versión mayor.

FreeBSD. Según la propia página de soporte/seguridad: «Under the current support model, each major version’s stable branch is explicitly supported for 5 years, while each individual point release is only supported for three months after the next point release.» Así que tenemos 5 años asegurados de soporte para nuestro sistema aunque haya que hacer upgrades menores de la misma versión mayor.

Debian. Ofrece un soporte extendido similar de 5 años aunque una vez ha salido una nueva versión de Debian (generalmente antes de 5 años) no es Debian directamente quien se ocupa del soporte de seguridad si no un proyecto paralelo de voluntarios LTS. Además existe un proyecto comercial «ELTS» que da soporte por algunos años mas a una versión de debian antigua pero solo al sistema y paquetes utilizados por los clientes de esta empresa (Freexian) aunque luego las actualizaciones están disponibles libremente para toda la comunidad Debian.

La diferencia principal en ambos soportes son las versiones de las aplicaciones, para bien y para mal. En FreeBSD durante los 5 años utilizarás la última versión de la aplicación. En Debian no varían las versiones y solo se aplican parches de seguridad a las existentes. En 5 años puedes haber quedado muy atrás en características que por otro lado puede ser interesante si tienes un stack stable que no precisa de posibles nuevas incompatibilidades introducidas por nuevas versiones. Esto último en FreeBSD tampoco es crítico, por ejemplo puedes instalar python2 o python3 y no estarás forzado a cambiar a python3.

Mantenimiento y upgrades

Tratado en parte en el apartado del sistema de paquetes merece mención aparte los upgrades del sistema base. Lo que mas me gusta de FreeBSD es la facilidad de cambiar entre versiones mayores sin grandes problemas. Al ser el sistema base independiente y las aplicaciones tener una política «rolling release» suele ser sencillo el cambio entre versiones. Además gracias a la perfecta integración con ZFS, herramientas como beadm te permiten hacer un snapshot previo al upgrade y si algo sale mal volver a le versión original en cuestión de segundos. En Debian en cambio hay que pensárselo bien dos veces antes de mover de una versión a otra mayor… ¿ ahora init.d o sytemd ? ¿ ifconfig o ip ? ¿ systemd-networkd o etc/network/interfaces ? ¿ iptables o nftables ?…

Rendimiento

Tema peliagudo, si buscas en internet encontrarás múltiples benchmarks comparando Linux y FreeBSD y mas aún fanáticos defendiendo uno u otro sistema y sinceramente da igual. Ambos sistemas funcionan extremadamente bien y con rendimientos óptimos si son bien configurados y se eligen correctamente las tecnologías adecuadas. Si haces bien tu trabajo el rendimiento estricto de uno u otro difícilmente será el factor decisivo.

Conclusiones

No existe la solución perfecta. Con los argumentos expuestos desde mi experiencia y tu propia investigación elige el sistema que te haga la vida mas fácil y mejor se adapte a tu objetivo.