user photo

Un mes trabajando con FreeBSD. Mis conclusiones.

Published on
Sergio Perea · 10 min read
freebsd

Como aficionado al cacharreo que soy, llevo un tiempo trabajando con FreeBSD en mi portátil. Simplemente quería experimentar lo que era trabajar con ese sistema, y la verdad es que tras un mes de uso estoy bastante contento. No echo de menos casi nada de Linux, y tengo un sistema mucho más rápido y que cubre perfectamente mis necesidades profesionales. A menudo se acerca gente que me ve trabajar y me pregunta por ello, ya que no es habitual ver a alguien desarrollando con un sistema BSD. A la gente le suele inquietar la cuestión de si es excesivamente complicado de instalar, o si encontrarán soporte para las herramientas que utiliza habitualmente.

Pues bien, en este artículo trataré de resumir mis impresiones iniciales.

Cuando alguien menciona FreeBSD, probablemente piensa servidores y dispositivos de almacenamiento en red (NAS). Sin duda, FreeBSD es un excelente sistema operativo para esos propósitos. Sin embargo, existen algunos mitos que afirman que FreeBSD no es bueno para uso en entornos de escritorio y concretamente para los desarrolladores de software (salvo que tengas un Mac).

freebsd

Lo cierto es que FreeBSD ha evolucionado mucho en este aspecto. Es un sistema operativo moderno, completo y robusto. Tanto administradores de sistemas como desarrolladores de software pueden usarlo para sus tareas diarias. Sobre todo si quieres experimentar lo que es trabajar con un sistema Unix puro o no eres especialmente simpatizante de los Windows o los Mac.

¿En qué lenguajes se puede programar con FreeBSD?

La pregunta más importante para los desarrolladores de software es si su lenguaje es compatible con FreeBSD.

Bueno, pues todos los lenguajes populares son compatibles con FreeBSD. Creo que realmente no hay límite.

¿Que quieres hacer tu nuevo sitio web con Node.js, PHP o Python? pues FreeBSD los soporta a todos. Si estás buscando programación de bajo nivel como Go o Rust, FreeBSD lo tiene. También podrás encontrar una nueva versión de clang y gcc en los ports. Incluso puedes trabajar con Java a través de OpenJDK o C# a través de Mono.

Lo genial es que en la mayoría de casos, el administrador de paquetes nativo de FreeBSD, pkg, te permitirá instalar el compilador necesario. En el caso de PHP, Ruby o Python, por ejemplo se proporcionan muchísimos paquetes a través de pkg. Y si por lo que sea quieres instalar algo que no esté disponible a través de pkg, puedes hacerlo a través de los ports de FreeBSD.

pkg install py{27,36}-game

Esto te permitirá administrar todos los paquetes que tienes instalados en el sistema. No he visto administrador de paquetes más sencillo y limpio, la verdad. Si quieres instalar un wordpress, no tienes más que escribir:

pkg install wordpress

Los ports de FreeBSD son un sistema de gestión de paquetes para el sistema operativo FreeBSD. En realidad consisten en un conjunto de scripts y archivos de configuración que facilitan la instalación de software.

Cada port contiene información sobre cómo compilar y configurar un paquete específico para que funcione en FreeBSD. Los usuarios pueden descargar los ports desde el repositorio oficial de FreeBSD y utilizarlos para instalar software adicional en el sistema.

En cuanto a cómo permiten ejecutar software de otros sistemas como GNU/Linux, FreeBSD tiene un soporte nativo para ejecutarlo mediante un sistema llamado "Linux compatibility layer", que permite a las aplicaciones Linux correr en FreeBSD sin necesidad de una máquina virtual o de un sistema operativo GNU/Linux completo. A menudo en los foros se avisa de que esto no garantiza la compatibilidad completa con todas las aplicaciones Linux, y algunas pueden presentar problemas o no funcionar correctamente. Pero puedo afirmar que yo a día de hoy no he encontrado problema alguno con ellos y todo funciona incluso más fluidamente que en un Ubuntu.

Entornos de desarrollo

Otra pregunta importante para los desarrolladores de software es si su entorno de desarrollo integrado (IDE) favorito funcionará en FreeBSD. Cuando hablamos de un entorno de desarrollo, probablemente asocias Unix con vim y emacs. Pero eso en 2023 ya no es cierto, ya que también encontrarás IDEs más modernos para tu trabajo, como:

  • Eclipse
  • Sublime Text
  • Pycharm (versión gratuita y comercial)
  • IntelliJ (versión comunitaria y comercial)

Si tu IDE no admite directamente FreeBSD, siempre puedes intentar ejecutarlos usando Linuxulator, una capa de compatibilidad de Linux en FreeBSD.

freebsd

Tampoco tienes que preocuparte por tu sistema de control de versiones de código. Encontrarás todos los sistemas populares de control de versiones de código abierto, como git, mercurial o svn.

Una manera excelente de mantener tu entorno y probar tu software es usando "jails".

Si necesitas tener varias versiones de tu aplicación para diferentes clientes o múltiples bases de datos, entonces los "jails" son lo que debes utilizar. También puedes combinarlos con ZFS y fácilmente subir tus cambios a producción. Actualmente, administrar "jails" es más sencillo que nunca utilizando iocage o ezjail.

A veces los jails no son suficientes y necesitamos trabajar con diferentes sistemas operativos. FreeBSD también tiene esto cubierto. Si estás buscando una virtualización ligera de cualquier sistema operativo moderno como Windows, Linux, OpenBSD, NetBSD o FreeBSD, bhyve es la manera de hacerlo.

La organización de las carpetas

En FreeBSD, la estructura de directorios es ordenada y fácil de entender. No te costará hacerte a ella si vienes de un entorno Linux.

Por ejemplo: los binarios específicos de FreeBSD que se incluyen con el sistema operativo se encuentran en /bin y /sbin, mientras que los binarios adicionales se encuentran en /usr/bin y /usr/sbin. Además, todo el software de terceros se instala en /usr/local/bin y /usr/local/sbin. Esto hace que sea fácil de mantener y organizar el sistema.

Un descubrimiento: DTrace

DTrace es una herramienta poderosa para los desarrolladores que permite el seguimiento dinámico del software. Con solo unas pocas líneas de código en D, se pueden ver las trazas de un programa, analizar el rendimiento, rastrear la entrada de funciones y mucho más.

Además, DTrace tiene la capacidad de generar gráficos de llama que permiten identificar las rutas de código más frecuentes. Esta herramienta es especialmente útil para depurar aplicaciones de bajo nivel y por supuesto está disponible de forma nativa en FreeBSD.

Otras herramientas útiles para los desarrolladores en FreeBSD incluyen procstat, ktrace/kdump, pmccontrol y pmcstat. En cuanto a depuración de bajo nivel, lldb es una excelente alternativa a gdb.

Tecnologías interesantes que encontrarás en un sistema FreeBSD

FreeBSD es un sistema operativo que ha sido pionero en muchas tecnologías, como ZFS o los contenedores. Es compatible con el estándar POSIX (recuerda que Linux no es UNIX puro, sino un clon que no respeta al 100% este estándar), pero también introduce o integra muchas API excelentes que el resto del mundo aún no ha adoptado completamente.

Un ejemplo de esto es kqueue, una herramienta que proporciona un sistema de tuberías eficientes para eventos de entrada y salida entre el kernel y el usuario. Es mucho más eficiente, especialmente al monitorear eventos en un gran número de descriptores de archivo.

En hablando de descriptores, también deberíamos mencionar los descriptores de procesos, una nueva forma de agregar una referencia (descriptor) al proceso. Los identificadores de procesos (PID) utilizados por muchos sistemas operativos a veces no son fiables del todo. Entre la verificación del estado del proceso y el envío de señales, pueden ocurrir muchas cosas en el sistema operativo y, en teoría, el PID puede ser utilizado por otro proceso justo en ese momento, generando problemas o cuelgues indeseados. Los descriptores de procesos resuelven esos problemas al brindar una referencia confiable para agregar al proceso. Si el proceso ha terminado, todavía tendrás una referencia para informarte sobre él.

También existe la técnica de sandboxing en FreeBSD llamada Capsicum. Capsicum en un mecanismo de seguridad basado en capacidades. La seguridad basada en capacidades significa que los procesos solo pueden realizar acciones que no tienen impacto global. Pior ejemplo: los procesos no pueden abrir archivos mediante su ruta absoluta o no pueden abrir conexiones de red. La idea es proteger tu aplicación teniendo en cuenta la separación de privilegios del proceso.

Además, para asegurar tus aplicaciones, también puedes considerar usar CloudABI. CloudABI toma una función POSIX, agrega seguridad basada en capacidades y elimina todo lo que es incompatible con ella. Esto obliga a los desarrolladores de software a utilizar conjuntos muy específicos de funciones en sus aplicaciones, pero aumenta la seguridad de la aplicación.

En resumen, y para no alargar este tema, FreeBSD está trabajando en muchas tecnologías interesantes que en el futuro seguramente se convertirán en el estándar en otros sistemas operativos como Linux. Si quieres estar al día, deberías echarle un vistazo a este sistema operativo.

¿Qué tal es la documentación y la comunidad alrededor?

FreeBSD es conocido por tener una buena documentación. Y en lo relativo al desarrollo de software, esto no es distinto.

¿Cuántas veces has buscado en Google una tabla ASCII? Pues en FreeBSD, de forma predeterminada, tienes una página man para ella: ascii(7). Lo mismo ocurre con cosas específicas de arquitectura/lenguaje como:

• arch(7) - detalles específicos de arquitectura como el tamaño de un puntero, números o páginas. • operator(7) - precedencia y orden de evaluación de operadores en C y C++. • zstyle(9) - el mejor estilo C que encontrarás, FreeBSD lo ha utilizado durante décadas. • hier(7) - para entender la estructura de directorios de Unix.

Todo esto nos facilita bastante el trabajo de los programadores.

En cuanto a la comunidad, hay que decir que no es ni de lejos tan enorme como la que puede tener Linux. Y eso puede ser un problema. De todos modos la comunidad de FreeBSD es muy activa, cuenta con varias listas de distribución y grupos de noticias, así como una gran cantidad de grupos de usuarios en diferentes partes del mundo. Incluso creo que todavía cuenta con una comunidad activa en el IRC. Además muchos desarrolladores de FreeBSD mantienen blogs donde comparten detalles de su trabajo en el sistema operativo.

Lo cierto es que no hay tanta gente en torno a este sistema prestando ayuda, pero también es cierto que los que hay generalmente tienen un perfil técnico bastante alto y suelen ser muy buenos resolviendo problemas. Pero si buscas una comunidad como la de Linux, puedes ir olvidándote. Lidiar con los problemas de FreeBSD te recordará a los primeros tiempos de Linux, en algunos casos. Sólo para mentes inquietas.

Conclusión

Las posibilidades a la hora de desarrollar software con FreeBSD son ilimitadas. Este sistema operativo cuenta con un montón de características interesantes como Jails, bhyve, ZFS y DTrace que hacen la vida más fácil para los desarrolladores de software. Es tremendamente rápido y lo notarás trabajando dia a dia con él: una gran forma de darle una segunda vida a un portátil algo desfasado.

Además, cuenta con una documentación muy útil en el sistema. Y sin mencionar la gran cantidad de software de terceros.

Al principio será un poco duro, pero puede ser una experiencia interesante intentar aprenderlo y probablemente cuando te hagas a él no lo abandones nunca.