¿Por qué la mayoría de las distribuciones de Linux no son compatibles con POSIX? He visto en muchos lugares que no lo son (por ejemplo,Mayormente compatible con POSIX) pero no ha habido una explicación real que respalde esto.
¿Hay algo que la biblioteca C y/o las herramientas puedan hacer para solucionar este problema (es decir, sin modificaciones en el núcleo en sí)? ¿Lo que hay que hacer?
El supuesto duplicado pregunta qué distribución de Linux es compatible con POSIX; Esto nos pregunta por qué la mayoría de las distribuciones de Linux no son compatibles con POSIX. Estoy pidiendo detalles específicos (es decir, alguna función o comando no es compatible), no las razones por las que las distribuciones específicas no (intentan) obtener la certificación.
Este comentario de @PhilipCouling (¡gracias!) lo explica bien:
El cumplimiento y la certificación son temas diferentes. Las respuestas apuntan al costo de la (re)certificación, que es irrelevante para el tema del (in)cumplimiento.
Respuesta1
POSIX no especifica una interfaz de kernel, por lo que Linux es en gran medida irrelevante. Especifica la interfaz del sistema, varias herramientas y extensiones del estándar C, que podrían existir sobre cualquier núcleo. No es compatible con POSIX en el sentido de que no se menciona, o es compatible con POSIX en el sentido de que no se menciona, a su elección.
Existen distribuciones de Linux certificadas por UNIX®, por lo que ciertamente es posible tener sistemas operativos totalmente compatibles con POSIX utilizando Linux.EulerOS de Huawei es unoque tiene y que puedes comprar si quieres. La mayoría del resto no ha pagado su dinero y por eso no tiene acceso alBanco de pruebaspara comprobar la conformidad.
No está claro si lo cumplirían en la práctica, pero algunos se esfuerzan más que otros. Sospecho que algunos de los BSD están más cerca que la mayoría de las distribuciones de Linux, pero eso es una suposición: por ejemplo, sé que execlp("cd", "/", NULL)
falla en la mayoría de las distribuciones de Linux, pero funciona en muchas BSD y POSIX lo requiere.