¿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.
¿Alguien puede explicarme esto también explicando "la necesidad de POSIX"?
¿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.
¿Alguien puede explicarme esto también explicando "la necesidad de POSIX"?
Respuestas:
POSIX es una familia de estándares, especificada por el IEEE , para aclarar y uniformar las interfaces de programación de aplicaciones (y problemas auxiliares, como las utilidades de shell de línea de comandos) proporcionadas por los sistemas operativos Unix-y. Cuando escribe sus programas para confiar en los estándares POSIX, puede estar seguro de poder portarlos fácilmente entre una gran familia de derivados de Unix (¡incluido Linux, pero no limitado a él!); si usa alguna API de Linux que no está estandarizada como parte de Posix, tendrá más dificultades si quiere portar ese programa o biblioteca a otros sistemas Unix-y (por ejemplo, MacOSX) en el futuro.
Microsoft's market share on desktops, at least, makes it "what the world follows"
- Interesante observar cuánto han cambiado las cosas desde este comentario de 2009 :)
Las cosas más importantes que POSIX 7 define
Extiende enormemente ANSI C con cosas como:
mkdir
, dirname
, symlink
, readlink
, link
(enlaces duros), poll()
, stat
, sync
,nftw()
fork
, execl
, wait
, pipe
, semaphors sem_*
, la memoria compartida ( shm_*
), kill
, parámetros de programación ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
socket()
mmap
, mlock
, mprotect
, madvise
,brk()
reg*
)Esas API también determinan los conceptos de sistema subyacentes de los que dependen, por ejemplo, fork
requiere un concepto de proceso.
Muchas llamadas al sistema Linux existen para implementar una función de API específica POSIX C y hacer compatible con Linux, 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.
Por ejemplo: cd
, ls
, echo
, ...
Muchas utilidades son interfaces directas de shell para una función correspondiente de C API, 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 ejecutadas por Bash como muebles empotrados .
P.ej, a=b; echo "$a"
Implementación principal de escritorio de Linux: GNU Bash .
Por ejemplo: HOME
, PATH
.
PATH
Se especifica la semántica de búsqueda , incluida la forma en que las barras impiden la PATH
búsqueda .
ANSI C dice 0
o EXIT_SUCCESS
para el éxito, EXIT_FAILURE
para el fracaso, y deja el resto de la implementación definida.
POSIX agrega:
126
: comando encontrado pero no ejecutable.
127
: Comando no encontrado.
> 128
: terminado por una señal.
Pero POSIX no parece especificar la 128 + SIGNAL_ID
regla utilizada por Bash: /unix/99112/default-exit-code-when-process-is-terminated
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 usan en todas las utilidades de la CLI, por ejemplo, grep
acepta 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 grep
pueden usarse como backend.
Por ejemplo: /dev/null
,/tmp
El FHS de Linux extiende mucho POSIX.
/
es el separador de rutaNUL
No puede ser usado.
es cwd
, ..
los padresa-zA-Z0-9._-
Ver también: ¿qué es el cumplimiento posix para el sistema de archivos?
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 -- -l
para enumerar un directorio llamado-l
Ver también: ¿Hay estándares para los parámetros y argumentos de la línea de comandos de Linux?
"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ó obsoleto 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 /proc
sistema de archivos, Bash, GCC, (¿TODO probablemente glibc?), apt-get
Y 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: ¿Es compatible con Android POSIX?
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 completa comprimida de las páginas HTML para grepping: ¿Dónde está la lista de las funciones de la API POSIX C?
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 interfaces de shell y utilidades para software compatible con variantes del sistema operativo Unix, aunque el estándar puede aplicarse a cualquier sistema operativo.
Básicamente, se trataba de un conjunto de medidas para aliviar el dolor del desarrollo y el uso de diferentes sabores de UNIX al tener una API y utilidades (en su mayoría) comunes. El cumplimiento limitado de POSIX también se extendió a varias versiones de Windows.
Permítanme dar la grosera explicación "no oficial".
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 con fines de adquisición. La idea era que las adquisiciones federales de los EE. UU. Necesitaran una forma de especificar legalmente los requisitos para varios tipos de ofertas y contratos de una manera que pudiera usarse para excluir sistemas en los que una base de código existente o un personal de programación NO serían portátiles.
Dado que POSIX se escribió post facto ... para describir un conjunto de sistemas competitivos más o menos similares ... 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 ... a pesar de que el subsistema POSIX era esencialmente inútil en términos de portabilidad práctica y compatibilidad con sistemas UNIX.
Varias otras normas para UNIX se han escrito a lo largo de las décadas. Cosas como el SPEC1170 (especificó mil ciento setenta llamadas de función que tuvieron que implementarse de manera compatible) y varias encarnaciones del SUS (Especificación UNIX única).
En su mayor parte, estos "estándares" han sido inadecuados para cualquier aplicación técnica práctica. La mayoría existen por argumentación, disputas legales y otras razones disfuncionales.
POSIX es un estándar para sistemas operativos que supuestamente facilitaría la escritura de software multiplataforma. Es un gran problema en el mundo de Unix.
POSIX es un conjunto de estándares presentados 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 de 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 C se basan en POSIX; un programador puede, por lo tanto, usar uno en su aplicación y esperar que se comporte igual en la mayoría de los Unices.
Sin embargo, las áreas divergentes de Unix suelen ser el foco, en lugar de las estándar.
Lo mejor 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 toda la historia detrás de lo que es Unix.
En 1985, personas de empresas de toda la industria informática se unieron para desarrollar el estándar POSIX (Interfaz de sistema operativo portátil para entornos informáticos), que se basa en gran medida en la definición de 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 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 estos estándares han ganado aceptación, los desarrolladores de software pueden desarrollar aplicaciones que se ejecutan en todas las versiones conformes de UNIX, Linux,
Del libro: una guía práctica para Linux
Posix es más como un sistema operativo, es un "estándar del sistema operativo". Puede 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 gran organización estándar de los Estados Unidos. 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 que cumplir con Posix tiene una ventaja financiera significativa, particularmente para las grandes empresas de TI de los Estados Unidos.
La recompensa de que un sistema operativo sea totalmente compatible con posix, es una garantía de que compilará y ejecutará todas las aplicaciones compatibles con Posix sin problemas.
Linux es el más conocido. OSX, Solaris, NetBSD y Windows NT también juegan aquí. Free- y OpenBSD son solo "casi" compatibles con Posix. El cumplimiento posix de WinNT es solo una pseudo-solución para evitar esta regulación gubernamental anterior.
Este estándar proporciona una base común para sistemas operativos tipo Unix. Especifica cómo debería funcionar el shell, qué esperar de comandos como ls y grep, y una serie de bibliotecas C que los autores de C pueden esperar tener disponibles.
Por ejemplo, las tuberías que usan los usuarios de la línea de comandos para unir los comandos se especifican aquí en detalle, lo que significa que la función popen (tubería abierta) de C es el estándar POSIX, no el estándar ISO C.
POSIX significa Interfaz de sistema operativo portátil y es un estándar IEEE diseñado para facilitar la portabilidad de la aplicación. POSIX es un intento de un consorcio de proveedores para crear una única versión estándar de UNIX.
POSIX define un 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 y AIX, etc.
Los ejemplos más populares son GNU Bash
el 100% de cumplimiento y gawk
utilidad POSIX .
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. Es bueno tener Posix como tal, ya que 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 & Tinkertim por señalar mi error: ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ :(
Una especificación (plan) sobre cómo hacer que un sistema operativo sea compatible con el sistema operativo 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, porque ambos fueron diseñados de acuerdo con el plan POSIX.
POSIX no les dice a los ingenieros y programadores cómo codificar sino qué codificar.
Algunos hechos sobre POSIX que no son tan brillantes.
POSIX también es la interfaz de llamada del sistema o API, y tiene casi 30 años.
Fue diseñado para el acceso de datos en serie al almacenamiento local , utilizando computadoras individuales con CPU individuales.
La seguridad no era una preocupación importante en POSIX por diseño, lo que condujo a numerosos ataques de condición de carrera a lo largo de los años y obligó a los programadores a evitar estas limitaciones.
Todavía 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 síncrona a la vez y esperen sus 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.