¿Qué es exactamente POSIX?

139

Veo POSIX mencionado a menudo y en todas partes, y asumí que es el estándar de referencia de UNIX ... hasta que noté el siguiente extracto en una página de Wikipedia: The Open Group

Open Group es el más famoso como el organismo certificador de la marca registrada UNIX, y su publicación del estándar técnico Single UNIX Specification , que extiende los estándares POSIX y es la definición oficial de un sistema UNIX .

Si la definición oficial de un sistema UNIX es una extensión de POSIX, entonces, ¿qué es exactamente POSIX? ,,, Seguramente parece ser una piedra de toque del mundo UNIX, pero no sé cómo encaja en la imagen general.

Peter.O
fuente
2
SUS es la definición oficial de UNIX ya que The Open Group, no el IEEE, posee la marca registrada UNIX. Se mi respuesta a continuación.
penguin359
stackoverflow.com/questions/1780599/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

125

POSIX primero fue un estándar en 1988 mucho antes de la especificación Single UNIX. Fue uno de los intentos de unificar todos los diversos tenedores UNIX y sistemas similares a UNIX. POSIX es un estándar IEEE, pero como el IEEE no posee la marca registrada UNIX®, el estándar no es UNIX® aunque está basado en la API UNIX existente en ese momento. El primer estándar POSIX.1 se conoce formalmente como IEEE std 1003.1-1988. [ 1 ] IEEE cobró una tarifa sustancial para obtener una copia del estándar.

Open Group lanzó la Especificación UNIX Única (SUSv2) en 1997 basada en el trabajo de IEEE del estándar POSIX. SUSv3 fue lanzado en 2001 de un grupo de trabajo conjunto entre IEEE y The Open Group conocido como el Grupo Austin. SUSv3 también se conoce como POSIX: 2001 [ 2 ]. Ahora también existe POSIX: 2004 y POSIX: 2008, que es el núcleo de SUSv4. En cuanto a lo que es UNIX®, UNIX® es lo que el titular de la marca registrada actual dice que es. Desde 1994, ese es The Open Group.

Novell adquirió el negocio de sistemas UNIX® de AT&T / USL, que es donde nació UNIX®. En 1994, vendieron el derecho a la marca UNIX® a X / Open [ 3 ] ahora conocido como The Open Group. Luego vendieron el código fuente de UNIX® a SCO como UNIXWARE®. [ 3 ] UNIX® se ha bifurcado muchas veces [ 4 ] [ 5 ] en parte debido al modelo de licencia de AT&T. La compra de UNIX® le proporcionó la fuente completa del sistema operativo y toda la cadena de herramientas para construirlo. Cualquier persona que tenga una licencia para UNIX® de AT&T puede distribuir y usar modificaciones a la fuente. El costo de la licencia fue de miles.

BSD fue un proyecto en Berkeley que agregó una serie de mejoras al sistema operativo UNIX®. El código BSD se lanzó bajo una licencia mucho más liberal que la fuente de AT&T y no requirió una tarifa de licencia o incluso un requisito para distribuirse con la fuente, a diferencia de la GPL que usan el Proyecto GNU y Linux. Esto ha provocado que una buena parte del código BSD se incluya con varios tenedores comerciales UNIX. Alrededor de 4.3BSD, casi habían reemplazado cualquier necesidad del código fuente original de AT&T UNIX®. FreeBSD / NetBSD / OpenBSD son todos tenedores de 4.3BSD que son un sistema operativo completo y no tienen ninguno del código fuente original de AT&T. Tampoco tienen derecho a la marca registrada UNIX®, pero gran parte de su código es utilizado por sistemas operativos comerciales UNIX.

Linux se desarrolló en 1991, pero se desarrolló desde cero a diferencia de BSD y utiliza el Proyecto GNU existente, que es una implementación de sala limpia de gran parte del espacio de usuario de UNIX. Implementa gran parte de POSIX por compatibilidad y tiene un diseño similar a UNIX, pero no tiene la conexión cercana a AT&T o UNIX® que tienen los BSD.

pingüino359
fuente
1
Una gran respuesta ... todas (3) respuestas han sido buenas, pero esta fue muy informativa (especialmente después de haber sido preparada por las otras 2); justo lo que necesitaba ... y gracias por el comentario (debajo del cuerpo de la pregunta) sobre SUS, lo entiendo bastante bien ahora, gracias ... (y no me di cuenta de que solo era un párrafo ... Era demasiado interesante :)
Peter.O
2
@Mikel espero que mi ayuda un poco de edición
penguin359
1
¡Esa es una respuesta fantástica allí @ penguin359!
boehj
¿Alguien tiene una buena idea de lo que significa la X? Si es solo un sufijo para indicar una relación con Unix, ¿no debería ser minúscula?
Alex W
Excelente. Gracias. He estado en informática durante gran parte de esa historia, pero los detalles "chismosos" de cómo sucedieron las cosas no fueron algo en lo que me enfoqué. Es bueno ver el camino.
Ken Ingram
55

Cosas más importantes que POSIX 7 define

  1. API C

    Extiende enormemente ANSI C con cosas como:

    • más operaciones de archivo: mkdir, dirname, symlink, readlink, link(enlaces duros), poll(), stat, sync,nftw()
    • proceso y los hilos: fork, execl, wait, pipe, semaphors sem_*, la memoria compartida ( shm_*), kill, parámetros de programación ( nice, sched_*), sleep, mkfifo,setpgid()
    • redes: socket()
    • gestión de memoria: mmap, mlock, mprotect, madvise,brk()
    • utilidades: expresiones regulares ( reg*)

    Esas API también determinan los conceptos de sistema subyacentes de los que dependen, por ejemplo, forkrequiere un concepto de proceso.

    Muchas llamadas al sistema Linux existen para implementar una función específica API POSIX C y hacer que Linux compatible, por ejemplo sys_write, sys_read, ... Muchas de esas llamadas al sistema también tienen extensiones específicas de Linux sin embargo.

    Implementación principal de escritorio de Linux: glibc, que en muchos casos solo proporciona una envoltura superficial para las llamadas al sistema.

  2. Utilidades CLI

    Por ejemplo: cd, ls, echo, ...

    Muchas empresas de servicios están frente al shell directa termina para una función C API correspondiente, por ejemplo mkdir.

    Mayor Linux aplicación de escritorio: GNU coreutils para los más pequeños, proyectos GNU separadas para los grandes: sed, grep, awk, ... Algunas de las utilidades de la CLI son implementadas por Bash como muebles empotrados .

  3. Lenguaje de shell

    P.ej, a=b; echo "$a"

    Implementación principal de escritorio de Linux: GNU Bash .

  4. Variables de entorno

    Por ejemplo: HOME, PATH.

    PATH Se especifica la semántica de búsqueda , incluida la forma en que las barras impiden la PATHbúsqueda .

  5. Estado de salida del programa

    ANSI C dice 0o EXIT_SUCCESSpara el éxito, EXIT_FAILUREpara el fracaso, y deja el resto de la implementación definida.

    POSIX agrega:

  6. Expresión regular

    Hay dos tipos: BRE (Básico) y ERE (Extendido). Basic está en desuso y solo se mantiene para no romper las API.

    Esos son implementados por las funciones de la API de C y se utilizan en todas las utilidades de CLI, por ejemplo, grepacepta BRE de forma predeterminada y ERE con -E.

    P.ej: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Implementación principal de Linux: glibc implementa las funciones bajo regex.h que programas como greppueden usarse como backend.

  7. Estructura de directorio

    Por ejemplo: /dev/null,/tmp

    El FHS de Linux extiende mucho POSIX.

  8. Nombres de archivo

    • / es el separador de ruta
    • NUL No puede ser usado
    • .es cwd, ..los padres
    • nombres de archivos portátiles
      • utilizar como máximo 14 caracteres y 256 para la ruta completa
      • solo puede contener: a-zA-Z0-9._-

    Ver también: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Convenciones de API de utilidad de línea de comando

    No obligatorio, utilizado por POSIX, pero casi en ningún otro lugar, especialmente en GNU. Pero es cierto, es demasiado restrictivo, por ejemplo, solo banderas de una letra (por ejemplo -a), no hay versiones largas de doble guión (por ejemplo --all).

    Algunas convenciones ampliamente utilizadas:

    • - significa stdin donde se espera un archivo
    • --termina banderas, por ejemplo, ls -- -lpara enumerar un directorio llamado-l

    Ver también: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "POSIX ACL" (Listas de control de acceso), por ejemplo, tal como se usa como backend setfacl.

    Esto se retiró pero se implementó en varios sistemas operativos, incluso en Linux consetxattr .

¿Quién se ajusta a POSIX?

Muchos sistemas siguen a POSIX de cerca, pero pocos están realmente certificados por Open Group, que mantiene el estándar. Los certificados notables incluyen:

La mayoría de las distribuciones de Linux son muy compatibles, pero no están certificadas porque no quieren pagar la verificación de cumplimiento. El K-UX de Inspur y el EulerOS de Huawei son dos ejemplos certificados.

La lista oficial de sistemas certificados se encuentra en: https://www.opengroup.org/openbrand/register/ y también en la página wiki .

Ventanas

Windows implementó POSIX en algunas de sus distribuciones profesionales.

Como era una característica opcional, los programadores no podían confiar en ella para la mayoría de las aplicaciones de usuario final.

El soporte quedó en desuso en Windows 8:

En 2016 se anunció una nueva API oficial similar a Linux llamada "Windows Subsystem for Linux". Incluye llamadas al sistema Linux, ejecución ELF, partes del /procsistema de archivos, Bash, GCC, (¿TODO probablemente glibc?), apt-getY más: https://channel9.msdn.com/Events/Build/2016/P488, así que creo que permitirá que Windows ejecute mucho, si no todo, POSIX. Sin embargo, se centra en desarrolladores / despliegue en lugar de usuarios finales. En particular, no había planes para permitir el acceso a la GUI de Windows.

Descripción histórica de la compatibilidad oficial de Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin es un conocido proyecto de terceros de la GPL que "proporciona una funcionalidad sustancial de API POSIX" para Windows, pero requiere que "reconstruya su aplicación desde el origen si desea que se ejecute en Windows". MSYS2 es un proyecto relacionado que parece agregar más funcionalidades además de Cygwin.

Androide

Android tiene su propia biblioteca C (Bionic) que no es totalmente compatible con POSIX a partir de Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Nivel de bonificación

La base estándar de Linux amplía aún más POSIX.

Utilice los índices sin marcos, son mucho más legibles y buscables: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Obtenga una versión comprimida completa de las páginas HTML para grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
La pregunta era sobre POSIX y SUS, pero esta respuesta no menciona a SUS en absoluto ...
Kidburla
1
@Kidburla es una gran oportunidad para agregar su propia respuesta y obtener un representante :-) (o editarlo en el mío y darme un representante jeje)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@phuclv gracias, lo he agregado a la respuesta.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
16

POSIX es el estándar del sistema operativo portátil. Describe ciertas utilidades, API y servicios que un sistema operativo compatible debe proporcionar al software (por ejemplo, sockets, E / S de archivos y subprocesos) junto con convenciones sobre cómo deben llamarse desde un programa.

La idea es que un programa escrito para un sistema operativo compatible con POSIX sería más fácil de portar a otro sistema operativo compatible con POSIX que portar entre sistemas operativos no compatibles con POSIX. Es por eso que es mucho más fácil portar una aplicación de, por ejemplo, FreeBSD a Linux que portarla de FreeBSD a Windows (aunque Windows aparentemente admite un subconjunto de POSIX).

Andrew Lambert
fuente
14

POSIX es un subconjunto de UNIX que está destinado a cubrir diversos entornos similares a Unix para otros sistemas operativos; Esto originalmente incluía entornos como Eunice para VMS, la personalidad POSIX de Windows NT y Apollo Domain / OS. Puede considerarlo como una API de portabilidad estándar para el subconjunto de servicios del sistema operativo cuyo comportamiento es común entre Unix y no Unix. Consulte http://standards.ieee.org/develop/wg/POSIX.html para obtener más información.

geekosaur
fuente
He leído más sobre esto ahora, y ciertamente parece que Uinx era el pollo y POSIX era el huevo ... pero me pregunto si UNIX todavía gobierna el gallinero ... es decir ... ¿POSIX tiene vida propia ahora? y UNIX debe cumplir con POSIX? ... por cierto. parece que el nombre POSIX fue acuñado por Richard Stallman ...
Peter.O
@ fred.bear: Respuesta corta: UNIX (la marca comercial) debe cumplir con POSIX; Unix (el producto) fue la base principal de POSIX; los unices (la familia de sistemas operativos) se conforman en su mayoría pero tienen más en común Ver ¿Es Linux un Unix? y es Mac OS X, UNIX? para discusiones relacionadas.
Gilles
@ Fred-lleve Muchas personas argumentan que el estándar POSIX es hoy en día guiado por la comunidad de desarrollo del núcleo de Linux, que (si es verdadera) En mi humilde opinión no es una buena cosa ...
sakisk
1
@faif Nunca he escuchado esto y me parece poco probable, ¿puedes publicar una referencia?
penguin359
2
@Gilles The Open Group, propietario de la marca registrada UNIX®, también está a cargo de la certificación y especificación UNIX®, que denominan Especificación UNIX Única o SUS. POSIX es desarrollado por el IEEE que no está a cargo de UNIX®. Desde 2001, se han desarrollado en gran medida sincronizados, pero técnicamente es SUS, que ahora está en la versión 4 que definió UNIX®.
penguin359