¿POSIX es prescriptivo o descriptivo?

¿POSIX es prescriptivo o descriptivo?

¿Es POSIX una descripción de cómo las aplicaciones han implementado cada parte específica de UNIX en el pasado o es una norma prescriptiva de cómo se debe implementar UNIX?

Si es descriptivo, solo serán válidas las características que sean comunes a todas las implementaciones incluidas. Si bien ninguna implementación ha implementado una característica, esa característica está "indefinida".

Si es prescriptivo: ¿en qué marco teórico se basa? ¿Matemáticas? ¿Lenguaje C? ¿Experiencia?

Respuesta1

es prescriptivode jure, pero sobre todo descriptivode facto.

POSIX es un conjunto de especificaciones con las que se pueden comparar las implementaciones, incluidas tanto las implementaciones que ya existen cuando se publica el documento como las implementaciones futuras. Entonces es prescriptivo.

En la práctica, POSIX comenzó principalmente como un subconjunto común de implementaciones existentes. En este sentido, es principalmente descriptivo. Pero POSIX a veces exige un nuevo comportamiento. Más comúnmente, para características que existían en muchas implementaciones pero con diferentes interfaces (nombres de funciones, opciones de línea de comando, etc.), POSIX ha introducido varias funciones y utilidades, comopax(un reemplazo de tary cpio, que eran muy diferentes en las variantes de Unix) y variosposix_xxxfunciones. POSIX también introdujo nuevas opciones de línea de comando y constantes; por ejemplo, paraps, “La -Aopción es equivalente al BSD -gy al SVID -e. Debido a que los dos sistemas diferían, se seleccionó un compromiso mnemotécnico”. Las secciones de fundamento a menudo explican por qué se incluyó esta o aquella característica, y a menudo mencionan qué implementaciones ya tenían una característica, o por qué se hizo o no una elección entre implementaciones incompatibles.

Respuesta2

La intención de POSIX es describir el comportamiento existente y no romper el comportamiento histórico (no hacer que el UNIX histórico no sea compatible) a menos que el comportamiento histórico pueda verse ya como un error histórico definitivo.

La intención adicional de POSIX no es introducir una invención propia. Si resulta que sería necesaria la llamada invención propia (porque las implementaciones existentes no son útiles para una estandarización), las ideas del comité POSIX se discuten con los autores de varias versiones de UNIX (o programas) para obtener la mejor solucion. Una discusión de este tipo frecuentemente da como resultado nuevas implementaciones que respaldan la propuesta final en el momento en que ya están escritas.

Hay algunas excepciones, por ejemplo, POSIX definido getpgrp()y setpgrp()de una manera que entra en conflicto con las interfaces BSD que ya existían 10 años antes. POSIX definido getline()y fexec()de una manera que es completamente incompatible con implementaciones que existieron durante casi 30 años antes de introducir las interfaces incompatibles de GNU libc.

Si resulta que las implementaciones existentes no coinciden, se toma una decisión sobre qué variante se utiliza (o si se introduce una combinación de diferentes implementaciones existentes) y se introduce un nombre específico de posix. Esto sucedió, por ejemplo, con las interfaces de subprocesos, donde posix_xxx()se han introducido funciones que son muy similares a la implementación de referencia anterior de Roger Faulkner (Sun Microsystems).

información relacionada