Single UNIX Specification

단일 유닉스 규격(Single UNIX Specification)은 컴퓨터 운영체제가 유닉스란 이름을 사용하기 위해 지켜야 하는 규약을 말한다.

이 규격은 1980년대 중반, 여러 유닉스 계열의 인터페이스를 표준화하기 위해서 시작한 프로젝트에서부터 시작하게 되었다. 업체마다 각기 다른 운영체제 사이의 소프트웨어 이식에 들어가는 비용을 되도록이면 줄여달라는 운영 기업들의 요청으로 인해 시작되었다. 이때, 표준화 운영체제로 선택된 운영체제는 유닉스인데 유닉스가 특정 회사에 의해서 만들어진 운영체제가 아닌 데다가 특정 회사 제품에 의한 종속성이 없었기 때문에 유닉스를 사용하게 되었다. 이 프로젝트로 만들어진 것이 바로 POSIX이다.

그러나 1990년대, 이시기에는 유닉스 전쟁이란 말로 전부 해설이 가능한 시기이다. 몇 군데의 회사들이 COSE(Common Open Source Environment) 협정을 결성하여, Common API Specification 또는 Spec 1170이라 불리는 사양을 내놓았다. 이 사양은 POSIX와는 달리 무료로 입수할 수 있었기에 IEEE에 접근하여 인증받는 비용을 부담해야 하는 POSIX보다 널리 일반화되었다. 1998년에 Austin Group이라 불리는 공동의 워킹 그룹이 이 사양들의 통합을 시작하여, 그 결과로 Single UNIX Specification version 3(단일 유닉스 규격 제3판)이 탄생하게 된다.

단일 유닉스 규격에서 규정하는 운영체제와 사용자 및 소프트웨어 사이의 인터페이스는 다음의 4 가지로 분류된다.

  • Base Definitions : 표준 규격을 기술하는 데 사용되고 있는 정의와 규약 등의 목록과, 이에 따르는 운영체제가 반드시 제공해야 할 C 언어의 헤더 파일 목록들.
  • Shell and Utilities : 유틸리티(약 160개의 명령들)의 목록 및 셸(sh)의 내역.
  • System Interfaces : 제공되어야 하는 시스템 호출 및 C 라이브러리의 목록들.
  • Rationale : 위의 표준에 대한 해설들.

이 표준에 의한 사용자 명령 줄 인터페이스와 스크립트 인터페이스는 초기 콘 셸에 바탕을 둔 본 셸의 확장판인 POSIX 셸이다. 이 밖에 사용자 레벨의 프로그램 또는 서비스, 유틸리티로는 awk, echo, ed 등 수백여개의 목록이 포함되어 있다. 프로그램 레벨에서 필요로 하는 서비스로는 입출력(파일, 터미널, 네트워크) 등이 있다. 이 표준을 테스트하는 프로그램 모음인 PCTS(Posix Certification Test Suite)가 있다. PCTS는 NIST에서 오픈 소스로 공개되어 있다.

이 사양이 알려주는 것중에 제일 주의할 점은 사양을 만족하기 위해 AT&T의 유닉스 소스 코드를 사용하지 않아도 된다는 점을 주의해야 한다. (실제의 예로, IBM의 z/OS (OS/390)은 소스코드는 완전히 독자적으로 만들어졌으나, ‘UNIX’란 이름을 사용하도록 허용받고 있다.)

단일 유닉스 규격을 따르고 있는 유닉스들은 다음과 같다.

  • AIX
  • HP-UX
  • Mac OS X: 10.5 레오파드부터 인증에 통과했다.
  • Reliant UNIX

  • SCO
  • Solaris
  • Tru64 Unix
  • z/OS
  • NCR UNIX SVR4
  • NEC UX/4800
  • SGI IRIX 6.5

유닉스 계열로 분류되면서 단일 유닉스 규격을 만족하지 않는 운영체제들

  • BSD 계열: C99 and POSIX Conformance Project에 의해 제작된 BSD 계열은 단일 유닉스 규격을 만족하지 않는다. FreeBSD, OpenBSD도 마찬가지 이유. ㅇㅂㅇ
  • 리눅스: 유닉스 운영체제에서 파생되어 나온 것이지만 전체적으로 규격이 많이 다르다.

POSIX(Portable Operatiing System Interface)…?

POSIX(Portable Operatiing System Interface)는 서로 다른 유닉스 운영체제의 공통 API를 정리하여 이식성이 높은 유닉스 운영체제 프로그램 개발을 위한 목적으로 정의된 인터페이스 규격입니다. 규격의 정의는 IEEE에 정의가 되어 있고, 최신 규격으로는 2.0 버전까지 정의되어 있습니다.

유닉스의 장점인 높은 이식성은 바로 이 규격을 통하여 이용되는 장점이죠… 커널 수준의 시스템 콜뿐만 아니라 사용자 레벨 프로그램, 프로세스 환경, 파일과 디렉토리 관련, 시스템 데이터베이스, 압축 포맷 등등의 다양한 분야에서 이용되는 표준 규격 인터페이스이기 때문에 여러 유닉스, 리눅스에서도 거의 동일하게 프로그램 소스를 컴파일해서 이용할 수 있는 장점을 가지게 되는 겁니다.

실제로 사용하는 데 있어서 차이점이 있다면 각 운영체제마다 가지는 환경적인 특징들만 차이가 날 것이지 쓰는데는 별 지장이 없다는 것을 알게 될 겁니다. 유닉스, 리눅스 프로그램들의 경우에는 프로그램 바이너리 파일만 받아서 그대로 make 돌려도 거의 바로 이용할 수 있는 게 바로 이 POSIX 규격에 맞춘 프로그램 바이너리이기 때문이죠. 소스 코드만 받아서 바로 컴파일 해서 쓰는 프로그램들도 표준 C 컴파일러조차 POSIX 규격에 맞춰서 시스템마다 동일하게 적용되어 있기 때문입니다. 간혹 페도라라던가 AIX와 같이 독자 환경이 있는 경우에는 좀 손을 봐서 처리해야 겠지만 규격에 준수가 되어 있는 대부분의 유닉스, 리눅스에서는 별 문제가 없습니다….ㅇㅅㅇ;;

윈도우 NT 계열에서도 POSIX 서브시스템을 탑재하고 있어서, POSIX 응용 프로그램을 서브시스템에서 실행할 수 있었습니다. 이게 윈도우 2000까지는 POSIX 서브시스템을 탑제하고 있었으나, XP에서 폐지되었습니다. 이후에 2003 서버에서부터 POSIX 2.0을 준수하는 서브시스템을 통하여 POSIX를 지원하는 형식으로 갖추고 있게 되었습니다. 윈도우에 보면 프로그램 추가/제거에 보면 유닉스 서브시스템이라고 되어 있는 것이 이 POSIX 지원 기능이죠. ㅇㅅㅇ;;

헷갈리면 안되는 게 윈도우 XP에 프로그램 추가 -> 윈도우 추가 제거에 보면 유닉스 시스템에서 프린터 공유하는 기능이 있습니다. 이걸 착각해서 예기하는 분이 있긴 한데.. 이거 아닙니다…ㅡㅅㅡ;;; 옛날부터 있던 프린터 공유 기능입니다.