¿Es Windows compatible con POSIX?

La respuesta rápida es que sí, en un momento dado, para cumplir con el estándar FIPS-151 y responder a una licitación de la Fuerza Aérea, Microsoft aseguró que Windows era efectivamente compatible con POSIX. Aunque no creo que Microsoft mantuviera la certificación en ediciones posteriores, después de haberla desaprovechado. En Windows 10 recuperaron gran parte de ella con sabor a Linux, aunque no creo que se hayan molestado en recertificar.

La respuesta larga es esta.... A finales de los años 90, el Gobierno de los Estados Unidos, con el estándar FIPS-151, exigió que todos los sistemas vendidos al Gobierno de los Estados Unidos fueran compatibles con "POSIX" [los detalles de gran parte de esto se detallan en el libro de John Quarterman UNIX, POSIX, and Open Systems]. En un momento dado, después de la publicación de FIPS-151, la Fuerza Aérea de los Estados Unidos licitó una oferta que DEC y Microsoft querían perseguir con NT/Alpha. Microsoft/DEC (que sólo había completado esa interfaz *.1 con su subsistema posix), ganó la licitación. Unisys demandó diciendo que el subsistema *.1 sólo, no era el espíritu del requisito. La defensa de Microsoft fue que ellos habían construido la API y que estaban permitiendo a terceros hacer el trabajo del espacio de usuario, ya que su propio espacio de usuario era Windows y su Win32API. Al final, se permitió a Microsoft/DEC seguir adelante siempre que apareciera una tercera parte que llenara ese hueco en alguna fecha (he olvidado los detalles). En efecto, se les exigió que produjeran un sistema NT basado en POSIX completamente funcional para dicha fecha.

Para cumplir con el requisito, Microsoft llegó a un acuerdo con una pequeña empresa (Softway Systems) para desarrollar el mismo que fue lanzado como el producto "Interix" de Softway. Que de hecho, no apestaba. Para los verdaderos tipos de UNIX como yo, hizo que Windows fuera soportable y francamente tiene menos extrañeza que los esfuerzos posteriores de UNIX para Windows (que es una conversación diferente) porque la solución de Softway realmente vive al lado de Windows, y llama al uKernel de NT directamente, es decir no utiliza la API de Windows bajo las cubiertas (Cygin, UWIN, et al - se sientan en la parte superior del Win32S por lo que en última instancia, se limitan a las características y convenciones que Windows proporciona bajo las cubiertas).

La gente de Softway en realidad tenía las fuentes de NT de Microsoft y añadió algunas APIs que faltaban (por ejemplo, el sistema de archivos de NT siempre ha soportado hard y softlinks, pero Win32S no tiene llamadas para crearlos). Las correcciones se retomaron y se publicaron en las actualizaciones de Windows según fuera necesario. Los comandos se tomaron principalmente de FreeBSD y gnu según fuera necesario, y se cumplieron todos los requisitos de "código abierto" - en el sentido de que todo lo que Softway había tomado con una GPL se puso a disposición (que era sólo código de espacio de usuario, como gcc y sus bibliotecas).

Como usuario, significaba que se podía compilar ejecutar código POSIX como se esperaba sin ningún mapeo real. El principal problema al "portar" código desde un "UNIX real" como Solaris, Tru64 o una distro de Linux; tendía a ser que el sistema de archivos NT soporta un modelo de seguridad diferente al que POSIX requiere y las APIs de POSIX no tienen formas de soportar algunas de esas características.

Evidentemente, Microsoft compró Softway y trajo el producto Interix dentro de la empresa y lo lanzó como SFU - Servicios para Unix, y más tarde lo renombró como SUA - Subsistema para Aplicaciones basadas en UNIX. Sin embargo, en Windows 8, SUA fue depreciado y más tarde lo eliminó de Windows 8.1.

A partir de Windows 10, Microsoft lanzó WSL - Windows Subsystem for Linux, que resucitó el subsistema, pero trabajando con Canonical, hacer la API una API de Linux y los comandos basados en versiones de Linux. La emulación del kernel era "clean room" y estaba basada en el código anterior, así que nada de eso está contaminado por la GPL. Pero cualquier cosa en el espacio de usuario que utilice GPL está de nuevo disponible para su descarga según las licencias GPL. Se puede recompilar localmente, aunque creo que la intención era que los binarios del espacio de usuario de una imagen de Ubuntu 14.04 se supone que pueden ejecutarse tal cual bajo el subsistema. Los cambios en el código del espacio de usuario es realmente para hacer que el comando interactúe de una manera que es más fácil de utilizar la base NTFS y vivir razonablemente en el mismo uKernel de lado a lado con un subsistema Win10.