linux - threads - ¿Cuál es el significado de “POSIX”?
posix windows (13)
¿Qué es POSIX? He leído el artículo de Wikipedia y lo leo cada vez que encuentro el término. El hecho es que nunca entendí realmente lo que es.
¿Puede alguien explicármelo explicando también "la necesidad de POSIX"?
En 1985, individuos de empresas de la industria informática se unieron para desarrollar el estándar POSIX (Interfaz del sistema operativo portátil para entornos informáticos), que se basa en gran medida en la Definición de la Interfaz del Sistema V de UNIX (SVID) y otros esfuerzos de estandarización anteriores. Estos esfuerzos fueron impulsados por el gobierno de los EE. UU., Que necesitaba un entorno informático estándar para minimizar sus costos de capacitación y adquisición. Lanzado en 1988, POSIX es un grupo de estándares IEEE que definen las interfaces de API, shell y utilidades para un sistema operativo. Aunque está dirigido a sistemas similares a UNIX, los estándares pueden aplicarse a cualquier sistema operativo compatible. Ahora que estas normas han ganado aceptación, los desarrolladores de software pueden desarrollar aplicaciones que se ejecutan en todas las versiones compatibles de UNIX, Linux y otros sistemas operativos.
Del libro: Una guía práctica para Linux
Algunos datos sobre POSIX que no son tan brillantes.
POSIX es también la interfaz de llamada del sistema o API, y tiene casi 30 años.
Fue diseñado para el acceso de datos serializados al almacenamiento local , utilizando computadoras individuales con CPU individuales.
La seguridad no fue una preocupación importante en POSIX por diseño, lo que llevó a numerosos ataques de condición de carrera a lo largo de los años y obligó a los programadores a solucionar estas limitaciones.
Aún se están descubriendo errores graves, errores que podrían haberse evitado con un diseño de API POSIX más seguro.
POSIX espera que los usuarios emitan una llamada sincrónica a la vez y esperen los resultados antes de emitir la siguiente. Los programadores de hoy esperan emitir muchas solicitudes asíncronas a la vez para mejorar el rendimiento general.
Esta API síncrona es particularmente mala para acceder a objetos remotos y en la nube, donde la alta latencia es importante.
Este estándar proporciona una base común para sistemas operativos similares a Unix. Especifica cómo debería funcionar el shell, qué esperar de comandos como ls y grep, y una serie de bibliotecas de C que los autores de C pueden esperar tener disponibles.
Por ejemplo, las tuberías que los usuarios de la línea de comandos utilizan para encadenar comandos se especifican en detalle aquí, lo que significa que la función popen de C (tubería abierta) es POSIX estándar, no ISO C estándar.
POSIX define el conjunto de estándares para un sistema operativo o un programa. El objetivo es escribir un nuevo software que sea compatible con sistemas similares a UNIX.
Por ejemplo, un programa que se ejecuta en Linux también se puede compilar y ejecutar en otros sistemas similares a UNIX como Solaris, HP-UX, AIX, etc.
Los ejemplos más populares son GNU Bash
que es 100% compatible con POSIX y utilidad gawk
.
POSIX es un conjunto de estándares establecidos por IEEE y The Open Group que describe cómo funcionaría un Unix ideal. Los programadores, los usuarios y los administradores pueden familiarizarse con el documento POSIX y esperar que un Unix con reclamo POSIX proporcione todas las instalaciones estándar mencionadas.
Dado que cada Unix hace las cosas de manera un poco diferente (Solaris, Mac OS X, IRIX, BSD y Linux tienen sus peculiaridades), POSIX es especialmente útil para aquellos en la industria, ya que define un entorno estándar para operar. Por ejemplo, la mayoría de las funciones en la biblioteca de C están basadas en POSIX; por lo tanto, un programador puede usar uno en su aplicación y esperar que se comporte de la misma manera en la mayoría de Unices.
Sin embargo, las áreas divergentes de Unix son típicamente el foco, en lugar de las estándar.
Lo bueno de POSIX es que puedes leerlo tú mismo:
El número 7 se conoce como POSIX.1-2008, y hay cosas nuevas allí. Sin embargo, Google-fu para POSIX.1 y eso le permitirá ver el historial completo de qué es Unix.
POSIX es un estándar para sistemas operativos que se suponía debía facilitar la escritura de software multiplataforma. Es especialmente importante en el mundo de Unix.
Permítanme darles la explicación "no oficial" churlish.
POSIX es un conjunto de estándares que intenta distinguir los sistemas "UNIX" y similares a UNIX de aquellos que son incompatibles con ellos. Fue creado por el gobierno de los Estados Unidos para fines de adquisición. La idea era que las adquisiciones federales de los EE. UU. Necesitaban una forma de especificar legalmente los requisitos para varios tipos de ofertas y contratos de una manera que podría usarse para excluir sistemas a los que una base de código existente o personal de programación NO sería portátil.
Dado que POSIX se escribió a posteriori ... para describir un conjunto similar de sistemas competidores ... NO se escribió de una manera que pudiera implementarse.
Entonces, por ejemplo, el NT de Microsoft fue escrito con suficiente conformidad POSIX para calificar para algunas ofertas ... aunque el subsistema POSIX fue esencialmente inútil en términos de portabilidad práctica y compatibilidad con los sistemas UNIX.
Varias otras normas para UNIX se han escrito durante décadas. Cosas como el SPEC1170 (once mil setecientas setenta llamadas de función que debían implementarse de manera compatible) y varias encarnaciones del SUS (Especificación Única de UNIX).
En su mayor parte, estos "estándares" han sido inadecuados para cualquier aplicación técnica práctica. La mayoría existen para la argumentación, disputas legales y otras razones disfuncionales.
Posix es más como un sistema operativo, es un "estándar de sistema operativo". Puedes imaginarlo como un sistema operativo imaginario, que en realidad no existe, pero tiene una documentación. Estos documentos son el "estándar posix", definido por el IEEE, que es la organización estándar grande de los EE. UU. Los sistemas operativos que implementan esta especificación son "compatibles con Posix".
Las regulaciones gubernamentales prefieren soluciones compatibles con Posix en sus inversiones, por lo tanto, ser compatible con Posix tiene una ventaja financiera significativa, particularmente para las grandes compañías de TI de los EE. UU.
La recompensa por un sistema operativo que sea totalmente compatible con Posix, es una garantía de que compilará y ejecutará todas las aplicaciones compatibles con Posix a la perfección.
Linux es el más conocido. OSX, Solaris, NetBSD y Windows NT también juegan aquí. Free y OpenBSD solo son "casi" compatibles con Posix. El cumplimiento de posix de WinNT es solo una pseudo solución para evitar esta regulación gubernamental anterior.
Posix rige la interoperabilidad, la portabilidad y en otras áreas, como el uso y el mecanismo de la bifurcación, los permisos y los estándares del sistema de archivos, como / etc, / var, / usr, etc. Por lo tanto, cuando los desarrolladores escriben un programa bajo un sistema compatible con Posix como, por ejemplo, Linux, generalmente, no siempre, se garantiza que se ejecute en otro sistema compatible con posix, como el sistema AIX de IBM u otras variantes comerciales de Unix. Posix es bueno tener como tal, facilita el desarrollo de software para la máxima portabilidad por la que se esfuerza. Espero que esta respuesta tenga sentido.
Gracias a Jed Smith y Tinkertim por señalar mi error, ¡¡¡mi mal !!! :(
Una especificación (modelo) sobre cómo hacer que un sistema operativo sea compatible con el sistema operativo de UNIX tardío (¡que Dios lo bendiga!). Esta es la razón por la cual macOS y GNU / Linux tienen líneas de comando de terminal, GUI, bibliotecas, etc. muy similares, ya que ambas se diseñaron de acuerdo con el plan POSIX.
POSIX no les dice a los ingenieros y programadores cómo codificar, sino qué codificar.
POSIX es una familia de estándares, especificada por el IEEE , para aclarar y uniformar las interfaces de programación de la aplicación (y los problemas auxiliares, como las utilidades de shell de línea de comandos) proporcionados por los sistemas operativos Unix-y. Cuando escribe sus programas para confiar en los estándares POSIX, puede estar bastante seguro de poder portarlos fácilmente entre una gran familia de derivados Unix (incluido Linux, ¡pero sin limitarse a ellos!); si y cuando usa una API de Linux que no está estandarizada como parte de Posix, tendrá más dificultades si desea portar ese programa o biblioteca a otros sistemas Unix-y (por ejemplo, MacOSX) en el futuro.
POSIX es:
POSIX (pronunciado / ˈpɒzɪks /) o "Interfaz del sistema operativo portátil [para Unix]" 1 es el nombre de una familia de estándares relacionados especificados por el IEEE para definir la interfaz de programación de aplicaciones (API), junto con las interfaces de shell y utilities para software Compatible con las variantes del sistema operativo Unix, aunque el estándar puede aplicarse a cualquier sistema operativo.
Básicamente, fue un conjunto de medidas para aliviar el dolor del desarrollo y el uso de diferentes sabores de UNIX al tener una (la mayoría) API y utilidades comunes. El cumplimiento limitado de POSIX también se extendió a varias versiones de Windows.
Lo más importante que define POSIX 7
Amplia grandemente ANSI C con cosas como:
- Más operaciones de archivo:
mkdir
,dirname
,symlink
,symlink
readlink
,link
(link
duros),poll
,sync
- proceso y subprocesos:
fork
,execl
,pipe
,sem_*
, memoria compartida (shm_*
),kill
, parámetros de programación (nice
,sched_
),sleep
- redes
- expresiones regulares
- gestión avanzada de la memoria:
mmap
,mlock
,mprotect
,madvise
Esas API también determinan los conceptos subyacentes del sistema de los que dependen, por ejemplo,
fork
requiere un concepto de proceso.Existen muchas llamadas al sistema Linux para implementar una función API POSIX C específica y hacer que Linux sea compatible, por ejemplo,
sys_read
,sys_read
, ...Implementación principal de escritorio de Linux: glibc, que en muchos casos solo proporciona un envoltorio superficial para las llamadas al sistema.
- Más operaciones de archivo:
Por ejemplo:
cd
,ls
,echo
, ...Muchas utilidades son front end de front-shell para una función de C API correspondiente, por ejemplo,
mkdir
.Implementación de escritorio Linux importante: GNU Coreutils para los pequeños, proyectos GNU separados para los grandes:
sed
,grep
,awk
, ... Bash implementa algunas utilidades CLI como integradas .Por ejemplo,
a=b; echo "$a"
a=b; echo "$a"
Implementación importante de escritorio de Linux: GNU Bash.
Ej .:
HOME
,PATH
.ANSI C dice
0
oEXIT_SUCCESS
para el éxito,EXIT_FAILURE
para el error y deja el resto de la implementación definida.POSIX añade:
126
: comando encontrado pero no ejecutable.127
: comando no encontrado.> 128
: terminado por una señal.Pero POSIX no parece especificar la regla
128 + SIGNAL_ID
utilizada por Bash: https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
Hay dos tipos: BRE (Básico) y ERE (Extendido). Básico está en desuso y solo se mantiene para no romper las API.
Éstas se implementan mediante las funciones de la API de C y se utilizan en todas las utilidades de CLI, por ejemplo,
grep
acepta BRE de forma predeterminada y ERE con-E
.Ej:
echo ''a.1'' | grep -E ''a.[[:digit:]]''
echo ''a.1'' | grep -E ''a.[[:digit:]]''
Implementación importante de Linux: glibc implementa las funciones en regex.h que los programas como
grep
pueden usar como backend.Por ejemplo:
/dev/null
,/tmp
El FHS Linux amplía enormemente POSIX.
-
/
es el separador de ruta -
NUL
no puede ser usado -
.
escwd
,..
padre - nombres de archivos portátiles
- usar a lo sumo 14 caracteres como máximo y 256 para la ruta completa
- solo puede contener:
a-zA-Z0-9._-
Ver también: ¿qué es el cumplimiento de posix para el sistema de archivos?
-
Convenciones de la API de la utilidad de línea de comandos
No obligatorio, utilizado por POSIX, pero casi en ninguna otra parte, especialmente no en GNU. Pero cierto, es demasiado restrictivo, por ejemplo, solo banderas de una sola letra (por ejemplo,
-a
), no hay versiones con doble guión largo (por ejemplo,--all
).Algunas convenciones ampliamente utilizadas:
-
-
significa stdin donde se espera un archivo -
--
termina las banderas, por ejemplo,ls -- -l
para listar un directorio llamado-l
Vea también: ¿Existen estándares para los parámetros y argumentos de la línea de comandos de Linux?
-
¿Quién se ajusta a POSIX?
Muchos sistemas siguen a POSIX de cerca, pero pocos son certificados por Open Group, que mantiene el estándar. Los notables certificados incluyen:
- OS X (Apple) X significa tanto para 10 como para UNIX. Fue el primer sistema POSIX de Apple, lanzado alrededor del año 2001. Vea también: ¿OSX es un sistema operativo POSIX?
- AIX (IBM)
- HP-UX (HP)
- Solaris (Oracle)
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. K-UX de Inspur y 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 .
Windows
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 fue obsoleto en Windows 8:
- ¿Dónde se encuentra actualmente la implementación POSIX de Microsoft Windows 7?
- https://superuser.com/questions/495360/does-windows-8-still-implement-posix
- Solicitud de https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support : https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
En 2016 se anunció una nueva API oficial similar a Linux llamada "Subsistema de Windows para Linux". Incluye llamadas al sistema Linux, ejecución de ELF, partes del sistema de archivos /proc
, Bash, GCC, (¿TODO es probable que glibc?), apt-get
y más: https://channel9.msdn.com/Events/Build/2016/P488 por lo que creo que permitirá a Windows ejecutar gran parte de POSIX, si no todos. Sin embargo, se enfoca en desarrolladores / implementación 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 con Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin es un conocido proyecto de terceros de GPL que "proporciona una funcionalidad sustancial de API POSIX" para Windows, pero requiere que "reconstruya su aplicación desde la fuente si desea que se ejecute en Windows". MSYS2 es un proyecto relacionado que parece agregar más funciones a Cygwin.
Androide
Android tiene su propia biblioteca de C (Bionic) que no es totalmente compatible con POSIX a partir de Android O: ¿Es compatible con POSIX de Android?
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 fáciles de leer y buscar: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Obtenga una versión completa en zip de las páginas HTML para grepping: ¿Dónde está la lista de las funciones de la API POSIX C?