¿Qué es POSIX y para qué sirve este estándar?
Si te estás formando en gestión de sistemas, seguro que alguna vez habrás oído nombrar la palabra POSIX o sistema operativo POSIX ¿Quieres saber qué significa y por qué es importante este estándar de sistemas Unix?
¿Qué es POSIX?
Bien, comencemos aclarando qué es POSIX, un acrónimo que viene de las siglas Portable Operating System Interface. Consiste en un conjunto de estándares definidos por IEEE (IEEE 1003) que especifican cómo debe comportarse un sistema operativo que aspira a ser compatible con UNIX.
Por supuesto, cuando nos referimos a UNIX en realidad englobamos todos los sistemas operativos parecidos a éste. De modo que POSIX establece un marco de funcionamiento que también soportan otros sistemas, entre los que se encuentran cualquier distribución de Linux así como el sistema operativo macOS, propiedad de Apple.
Este marco de trabajo definido por POSIX permite que el software que desarrollamos pueda ejecutarse en todo ese conjunto de sistemas operativos, sin que tengamos que hacer adaptaciones importantes para su portabilidad.
Para conseguirlo, POSIX define una buena cantidad de interfaces: llamadas al sistema, utilidades, comportamiento de la shell y API que los sistemas operativos deben implementar para ser considerados compatibles. Gracias a estas interfaces los desarrolladores consiguen tener una buena cantidad de herramientas en las que pueden apoyarse para desarrollar su software.
¿Para qué sirve el estándar POSIX en el desarrollo actual?
En el desarrollo actual POSIX sirve para definir cómo deben ser los sistemas operativos de la familia de Unix, ofreciendo una base sólida para que luego se puedan construir programas compatibles para ellos.
Aunque han pasado muchos años desde que estas estandarizaciones se crearon, POSIX sigue desarrollando un papel clave en el desarrollo moderno, especialmente en entornos backend, cloud y sistemas distribuidos.
Garantía de interoperabilidad entre diferentes distribuciones y sistemas
Lo primero y más importante es que POSIX nos ofrece una garantía de que las aplicaciones que diseñamos para el sistema UNIX funcionarán perfectamente en éste y otros sistemas operativos similares, sin necesidad de hacer costosas adaptaciones.
Portabilidad del código fuente: Escribe una vez, compila en cualquier lugar
Gracias a eso, conseguimos que un software pueda escribirse una sola vez y luego se pueda compilar en cualquier plataforma donde necesitemos que funcione, siempre que se respete POSIX por supuesto.
Esta portabilidad es esencial para que las aplicaciones tengan menores costes de producción y mantenimiento, algo muy importante cuando están dirigidas a distintos tipos de plataformas.
Estandarización de la interfaz de línea de comandos (Shell y utilidades)
Una de las cosas que POSIX define y que resulta más útil y relevante es la interfaz de comandos del sistema operativo. Gracias a esto nosotros podemos hacer comandos que se apoyen en esas acciones disponibles en el shell. Si nos ceñimos al estándar POSIX esos comandos funcionarán de manera consistente en cualquiera de los entornos compatibles.
Esto es interesante por ejemplo cuando hacemos programas que tienen que ejecutarse en servidores, ya que una vez que hemos construido estos scripts tendremos la garantía de que funcionen en cualquiera de los sistemas operativos Unix like.
Definición de API comunes para la gestión de procesos y archivos
Por supuesto, este conjunto de estándares también se ocupa de otras tareas importantes como es la gestión del sistema de almacenamiento, la gestión de procesos o las señales de control que se pueden enviar a los programas en ejecución.
Gracias a estas herramientas podemos construir programas que funcionan a más bajo nivel, disfrutando de servicios del sistema operativo de manera fiable en todas las plataformas.
Base fundamental para la orquestación de contenedores y microservicios
POSIX es la base fundamental de herramientas populares como Docker y Kubernetes, que funcionan como sabes de una manera consistente en todas las distribuciones de Linux e incluso en macOS. Esta es la clave que permite que los contenedores se ejecuten de manera consistente, independientemente del sistema host donde se encuentren.
Interoperabilidad en entornos de computación híbrida
Aparte de los contenedores también resulta útil en entornos híbridos, donde tenemos infraestructura que funciona on-premise e infraestructura que funciona en el cloud. En estos casos POSIX también nos ayuda, ya que facilita que las aplicaciones funcionen de forma homogénea en distintos proveedores y sistemas.
Desarrollo de sistemas críticos en tiempo real
Ya si nos ponemos más técnicos, también podemos sacarle partido en el desarrollo de sistemas críticos que trabajan en tiempo real. Es por eso que POSIX resulta esencial para sistemas utilizados en sectores como telecomunicaciones, automoción o aeronáutica.
Componentes clave definidos por POSIX
Ahora vamos a detallar un poquito mejor cuáles son los componentes clave que define el estándar POSIX, desde las APIs hasta las utilidades de usuario.
Las API de llamadas al sistema (System Calls)
POSIX define una serie de llamadas al sistema que permiten interactuar con el kernel del sistema operativo donde se ejecute el software. Puedes considerar estas API como el punto central de las comunicaciones con el kernel (núcleo) del sistema operativo.
Aunque estas API son la base para desarrollar software que trabaja con el núcleo del sistema, son también esenciales para aplicaciones a más alto nivel que requieren servicios de diversos componentes y librerías que a su vez se apoyan en POSIX.
Gestión de hilos y concurrencia (POSIX Threads o Pthreads)
En esta categoría encontramos Pthreads que es un estándar para el trabajo en programación concurrente y que permite definir cómo distintos hilos de ejecución tienen que funcionar en las aplicaciones de alto rendimiento. .
Sistema de archivos y jerarquía de directorios estándar
Como hemos dicho antes, POSIX establece convenciones sobre cómo se organizan los ficheros y directorios en el sistema de archivos del ordenador. Gracias a estas definiciones podemos realizar software que trabaja con carpetas o archivos de una manera compatible con cualquier sistema operativo de la familia de Unix.
Expresiones regulares y utilidades de texto (grep, sed, awk)
Aparte de todo lo demás POSIX también ofrece un estándar definido para la utilización de expresiones regulares. Éstas, combinadas con distintos comandos del sistema pueden dar lugar a operaciones muy potentes. Nuevamente, el hecho de estar definidas por POSIX garantiza que estas herramientas funcionen sin ningún tipo de inconsistencia en distintos sistemas operativos.
Sistemas operativos compatibles con POSIX
El estándar POSIX fue introducido en el mundo de Unix pero su aplicación se ha ido ampliando a toda una serie de sistemas operativos actuales que se utilizan tanto para ordenadores de escritorio como servidores de Internet.
En este área tenemos que establecer una distinción entre sistemas operativos que están certificados con POSIX y sistemas operativos que compilan a POSIX, aunque no estén certificados específicamente.
Sistemas certificados como macOS, Solaris y versiones comerciales de UNIX
Dentro de los sistemas operativos certificados con POSIX el más popular actualmente es macOS, sin embargo, como puedes imaginarte también está certificado el sistema UNIX así como otros sistemas operativos un poquito antiguos y ya no tan utilizados como Solaris.
El hecho de estar certificados significa que han pasado por procesos oficiales que afirman su compatibilidad estricta con el estándar.
Sistemas POSIX-compliant (no certificados) como Linux y BSD
Aparte de los sistemas certificados también tenemos una cantidad enorme de sistemas operativos que son compatibles perfectamente con POSIX, aunque no hayan pasado por los procesos de certificación.
En esta área tenemos todos los sistemas operativos Linux así como BSD.
Compatibilidad parcial en entornos Windows
Ya por lo que respecta a Windows tenemos que decir que no es un sistema operativo compatible con POSIX. Sin embargo, en los últimos años han aparecido medios que permiten trabajar de manera natural con aplicaciones POSIX en el sistema operativo de Microsoft.
Nos referimos a herramientas como WSL (Windows Subsystem for Linux) que permiten usar aplicaciones que antes estaban tradicionalmente vinculadas a Linux, como Docker o Kubernetes.
Como ves, este estándar sigue siendo una pieza clave para que los desarrolladores puedan trabajar de manera cómoda independientemente del sistema operativo que usen en su ordenador personal.
Ventajas de programar siguiendo el estándar POSIX
Con todo lo que hemos explicado hasta este punto seguramente tendrás una buena idea de las ventajas que tiene adoptar POSIX en nuestros desarrollos. No es solo una cuestión de buenas prácticas en realidad es más bien una forma construir software más sostenible en el tiempo y, a la vez, dotarlo de un alcance mayor.
Vamos a detallar las ventajas más importantes que queremos que queden claras.
Reducción de costes en la migración de aplicaciones
Trabajar siguiendo el estándar POSIX te ayudará en el desarrollo ya que encontrarás menos problemas de compatibilidad. Sin embargo, donde le sacamos más partido es cuando tenemos que mover la aplicación de un sistema a otro. Gracias a POSIX se vuelve una tarea mucho más amable y menos laboriosa. Es decir, no tendrás que perder días o semanas reescribiendo partes críticas del núcleo, ni depender de software que solo existe en un sistema operativo concreto.
De hecho, si no estuviera POSIX sería complicado atender a sistemas operativos distintos, o cambiar nuestra infraestructura. Si adoptamos POSIX tendremos dedicar menos tiempo a «arreglar» cosas que ya funcionaban cuando queremos cambiar de plataforma.
Independencia del proveedor (vendor lock-in)
Esto quiere decir que no te vas a quedar atrapado en un solo proveedor sino que tendrás la libertad de moverte entre sistemas operativos o proveedores de cloud sin problemas, ya que tu software seguirá trabajando igualmente.
Facilidad para el mantenimiento de software a largo plazo
Al desarrollar en base a unos estándares garantizamos que el software se pueda usar durante un plazo de tiempo mayor, ya que nos estamos apoyando en recursos que son muy estables.
De hecho, el estándar POSIX lleva décadas siendo estable, lo que nos permite hacernos una idea de lo adecuado que es adoptarlo. Por tanto, lo que escribamos hoy siguiendo sus normas tiene muchísimas papeletas de seguir funcionando dentro de diez o veinte años, lo que resulta super interesante para cualquier empresa o desarrollador de software.
Seguridad y robustez en la gestión de permisos y señales
Además de poder migrar los sistemas y poder usarlos durante un tiempo mayor, también debemos considerar a POSIX como un aliado para mejorar la seguridad y la robustez de las aplicaciones. En otras palabras, los estándares que define están bien estudiados y mantenidos, lo que nos permite construir aplicaciones mucho más seguras y predecibles.
Consistencia en el manejo de procesos y señales
El modelo de procesos funciona de la misma manera en todos los sistemas que respetan el estándar POSIX. Por eso, cuando trabajamos a bajo nivel es ideal, porque te garantiza que vas a usar las funcionalidades del núcleo de la forma en la que están pensadas para usarse.
Acceso a un ecosistema masivo de herramientas de depuración
También hay que señalar que, al tratarse de un estándar de muy largo recorrido, el ecosistema que tenemos es muy amplio. Por ejemplo, en lo que respecta a depuración nos ofrece un conjunto de recursos muy amplio, con utilidades que nos permiten examinar muy a fondo lo que está pasando en los sistemas operativos. Esto no solo nos permite depurar, sino también optimizar el rendimiento de nuestro código.
Facilidad para el cumplimiento de estándares de seguridad industrial
Por último, si trabajamos con POSIX será mucho más fácil cumplir normativas estrictas en sectores diversos de la industria, como el médico, el automovilístico o el aeronáutico.
Desafíos y limitaciones del estándar POSIX
Hasta aquí nos hemos dedicado a ensalzar los beneficios de POSIX, sin embargo no todo son ventajas. También es justo abordar los retos que nos plantea adoptar este estándar, especialmente con las tecnologías que usamos actualmente.
El conflicto entre la innovación de funciones modernas y el estándar antiguo
Habrás comprobado muchas veces que los estándares ralentizan un poco la incorporación de innovaciones. Incluso hoy ocurre más todavía, en un marco donde las tecnologías avanzan a un ritmo vertiginoso. Es por ello que a veces puedes sentir que POSIX acaba por ser un problema a la hora de escoger tu stack de tecnologías de una manera libre.
Es por ello que muchas veces te vas a ver en la necesidad de decidir entre aprovechar una característica avanzada de lenguajes o librerías modernas y ceñirte a las convenciones de POSIX.
Complejidad de la certificación oficial para proyectos Open Source
Una cosa es desarrollar adoptando el conjunto de estándares POSIX, que lo puede hacer todo el mundo en la práctica, y otra bien distinta es conseguir los certificados oficiales.
Si lo que estás pensando es certificar tus aplicaciones como compatibles con POSIX, ya te adelantamos que el proceso resulta bastante burocrático y relativamente caro. Es este el motivo por lo que las distribuciones Linux son compatibles con POSIX pero no certificadas oficialmente, ya que es un proceso que muchas veces sale de las posibilidades de las distintas comunidades de software libre.
Extensiones específicas de Linux (GNU) que rompen la compatibilidad POSIX
Hoy existen muchas extensiones específicas de Linux que realmente no forman parte del estándar POSIX, de modo que si las utilizamos comprobaremos que nuestro software no funciona de la misma manera en sistemas como macOS o BSD.
Así que, cuando desarrollamos de manera estricta debemos estar pendientes de cuáles son las librerías que utilizamos, de modo que podamos asegurarnos de no tener sorpresas cuando queramos iniciar los procesos de portabilidad.
Preguntas frecuentes sobre POSIX
Vamos a acabar repasando una lista de preguntas y respuestas típicas de personas que están comenzando a adentrarse en los estándares de POSIX.
¿Es Linux un sistema operativo 100% POSIX?
Bueno, podríamos decir que no es así al 100%. De todos modos, la respuesta depende de lo que entiendas con ser POSIX. Si te refieres a la compatibilidad, efectivamente Linux es un sistema operativo POSIX, o por lo menos altamente compatible con POSIX. Sin embargo, el sistema operativo también nos ofrece muchas extensiones y librerías que no forman parte de los estándares POSIX, por lo que podemos decir que su ecosistema es bastante más rico.
¿Por qué Windows no utiliza el estándar POSIX de forma nativa?
La arquitectura del sistema operativo Windows es muy diferente a la de los sistemas Unix like. Por lo tanto adoptar POSIX es literalmente imposible en el sistema operativo de Microsoft.
Sin embargo, afortunadamente en la actualidad tenemos algunas alternativas viables para conseguir ejecutar software POSIX en el sistema Windows por ejemplo a través de WSL.
¿Qué es una señal POSIX y para qué la usamos nosotros?
Una señal es una especie de solicitud que se puede enviar desde un proceso a otro para avisarle de algo, de modo que los programas puedan interactuar entre ellos. Por poner un ejemplo, SIGTERM es una señal que se envía a un programa para solicitarle que cierre sus procesos y libere sus recursos para terminar de trabajar en el sistema.
¿Es necesario que aprendamos POSIX para ser buenos programadores de sistemas?
Es una pregunta que depende mucho del objetivo que te plantees como programador de sistemas. Incluso depende también mucho del sistema operativo al que te estés dirigiendo.
En resumen podrías funcionar perfectamente sin conocer los detalles sobre el estándar POSIX, aunque sí que te ofrecería una excelente base de conocimiento y recursos para trabajar con servidores de un modo más profesional.