1. 개요
Portable Operating System Interface + X[1]읽는 발음에 대한 이견이 몇 가지 존재하나, 몇몇 거장들이 불렀던 예를 따라 "포직스"라고 읽는 것이 대세.
POSIX는 IEEE가 제정한 유닉스의 애플리케이션 프로그래밍 인터페이스(API) 규격이다. 초창기 실용적인(상용) 범용 컴퓨터기기들이 대부분 각자의 유닉스 시스템에서 운영되었는데, 각기 다른 유닉스 시스템간의 호환성 및 이식성 확보를 필요한 표준을 정립한 것이 POSIX이다. (MS 및 DOS 진영을 제외하고) 이후 UNIX에서 영향받아 탄생한 많은 OS들이 유닉스 호환성 표준을 따르는 성향이 많았기 때문에 결국 수많은 현존 OS들은 유닉스 호환성을 따르게 되었다.
이 규격을 따르면 유닉스와 직접적인 연관이 없어도 유닉스 호환(Unix-like) 운영체제라고 부른다. 리눅스가 이런 케이스인데, 유닉스와는 별도로 개발되었지만 POSIX 표준을 거의 다 준수하기 때문에 리눅스는 유닉스 호환 운영 체제로 본다. 다만 공식 인증을 받은 경우는 흔치 않으며, 넓게 봐서 호환 운영 체제라는 얘기.
Unix-like OS들은 적극적이든 소극적이든 POSIX 표준을 따르는 형국이 되었다. 적극적으로 지키면서 인증까지 획득한 경우나, 대부분의 표준을 지켰지만 굳이 인증까지는 획득하지 않은 경우, 혹은 어느 정도 따르면서 다른 OS 사용자들과의 호환 편의성만 챙겨주는 경우 (당연히 인증 못 받음) 등으로 나뉠 수 있다.
BSD와 macOS의 경우, BSD는 유전적 유닉스 계열이기에 당연히 포직스 호환이 있다(4.4BSD-Lite Release 2 및 FreeBSD). macOS는 초기에 BSD 기본에서 파생되었으므로 호환성을 갖추다가 잡스 복귀 후 NeXTSTEP 인티그레이션에 따라 완전 호환성을 갖춘 뒤 Mac OS X Leopard부터 아예 정식 인증을 받았다. macOS Ventura 또한 Intel 버전과 Apple Silicon 버전 모두 UNIX 03 인증을 받았다.
2. 버전
- POSIX.1
- POSIX.1b
- POSIX.1c
- POSIX.2
- POSIX.1-2001
- POSIX.1-2008
- POSIX.1-2017
3. MS Windows 운영 체제에서
한 때 Microsoft社의 윈도우에서도 유닉스 소프트웨어 지원을 위해 POSIX 1.0에 준하는 서브시스템을 탑재하였으나, 실질적으로 사용할만한 기능은 아니었고 Windows NT 커널 기반의 Windows XP가 일반 사용자를 위한 운영 체제로 변모하면서 POSIX 지원이 제거되었다. Windows Server 2003 R2부터는 POSIX 2.0에 준하는 서브 시스템을 지원하나 제어판에서 SUA(Subsystem for UNIX-based Applications)를 활성화해야 한다.[2] 이후 Windows 8에서[3] SUA가 미탑재되면서 POSIX 지원도 제거되었다. 이 때문에 한동안 Windows에서 POSIX 환경을 이용하려면 Cygwin을 이용하는 방법밖에는 없었다가, Windows 10 Anniversary Update에 들어서 WSL(Windows Subsystem for Linux)이라는 리눅스 서브시스템을 다시 탑재하여 POSIX 환경을 이용할 수 있게 되었다.[4]4. 기타
정규 표현식이 POSIX의 일부이지만, 워낙 오래된 규격이라 속도상의 손해가 있어 상당수가 더 빠른 알고리즘을 쓰는 PCRE[5]로 갈아탄 상태이다.PHP에서 예전에 정규표현식 함수로 널리 쓰였던 ereg 계열 함수가 POSIX 기반의 정규표현식 함수였으나, PCRE 기반의 preg 계열 함수로 대체되면서 한동안 레거시 요소로 남아있다가 PHP 7부터는 제거되었다.
5. 관련 문서
[1] UNIX의 X[2] Windows Vista와 7도 얼티밋 에디션 또는 엔터프라이즈 에디션일 경우 제어판에서 SUA를 활성화할 수 있다.[3] 서버 운영체제는 Windows Server 2012 R2부터.[4] 단, WSL1 버전에서는 실제로 리눅스 시스템 콜(이를 POSIX API라고 볼 때)을 Windows API로 구현하는, 즉 일종의 번역 작업을 거쳤으므로 원래의 서브시스템의 정의하고 그나마 비슷하다고 해줄 수 있었으나, WSL2 부터는 Hyper-V 기반으로 동작하기 때문에 아예 실제 리눅스 커널이 가상화로 돌아간다. 따라서 이건 원래 의미로서의 서브시스템이라고 하기 더더욱 애매하기는 하다.[5] Perl Compatible Regular Expressions