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.
Respuestas:
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.
fuente
Cosas más importantes que POSIX 7 define
API C
Extiende enormemente ANSI C con cosas como:
mkdir
,dirname
,symlink
,readlink
,link
(enlaces duros),poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, semaphorssem_*
, 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 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.
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 .Lenguaje de shell
P.ej,
a=b; echo "$a"
Implementación principal de escritorio de Linux: GNU Bash .
Variables de entorno
Por ejemplo:
HOME
,PATH
.PATH
Se especifica la semántica de búsqueda , incluida la forma en que las barras impiden laPATH
búsqueda .Estado de salida del programa
ANSI C dice
0
oEXIT_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: ¿ Código de salida predeterminado cuando finaliza el proceso?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,
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.Estructura de directorio
Por ejemplo:
/dev/null
,/tmp
El FHS de Linux extiende mucho POSIX.
Nombres de archivo
/
es el separador de rutaNUL
No puede ser usado.
escwd
,..
los padresa-zA-Z0-9._-
Ver también: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
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: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"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 con
setxattr
.¿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
/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: 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
fuente
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).
fuente
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.
fuente