POSIX는 규정적인가요, 아니면 설명적인가요?

POSIX는 규정적인가요, 아니면 설명적인가요?

POSIX는 과거에 응용 프로그램이 UNIX의 각 특정 부분을 구현한 방법에 대한 설명입니까, 아니면 UNIX를 구현해야 하는 방법에 대한 규범적 표준입니까?

설명적인 경우 포함된 모든 구현에 공통적인 기능만 유효합니다. 어떤 구현에서도 기능을 구현하지 않았지만 해당 기능은 "정의되지 않았습니다".

규범적인 경우: 어떤 이론적 틀을 기반으로 합니까? 수학? C 언어? 경험?

답변1

그것은 규범적이다정당한, 그러나 대부분 설명적임사실상.

POSIX는 문서가 게시될 때 이미 존재하는 구현과 향후 구현을 모두 포함하여 구현을 비교할 수 있는 사양 집합입니다. 그래서 그것은 규범적입니다.

실제로 POSIX는 대부분 기존 구현의 공통 하위 집합으로 시작되었습니다. 따라서 이런 의미에서는 대부분 설명적입니다. 그러나 POSIX는 때때로 새로운 동작을 요구합니다. 가장 일반적으로 많은 구현에 존재했지만 인터페이스(함수 이름, 명령줄 옵션 등)가 다른 기능의 경우 POSIX는 다음과 같은 여러 기능과 유틸리티를 도입했습니다.pax( 유닉스 변종에서 매우 다른 tar및 대체 ) 및 다양한cpioposix_xxx기능. POSIX는 또한 새로운 상수 및 명령줄 옵션을 도입했습니다. 예를 들어ps, “이 -A옵션은 BSD -g및 SVID 와 동일합니다 -e. 두 시스템이 다르기 때문에 니모닉 절충안이 선택되었습니다.” 이론적 근거 섹션에서는 이 기능 또는 해당 기능이 포함된 이유를 설명하고, 어떤 구현에 이미 기능이 있는지, 또는 호환되지 않는 구현 중에서 선택이 이루어졌는지 여부에 대해 언급하는 경우가 많습니다.

답변2

POSIX의 의도는 기존 동작을 설명하고 역사적인 동작이 이미 확실한 역사적인 버그로 간주되지 않는 한 역사적인 동작을 중단하지 않는 것입니다(이전 UNIX를 비호환으로 만드는 것이 아닙니다).

POSIX의 추가 의도는 자체 발명품을 도입하는 것이 아닙니다. 소위 자체 발명이 필요하다고 판명되면(기존 구현이 표준화에 유용하지 않기 때문에) POSIX 위원회의 아이디어를 다양한 UNIX(또는 프로그램) 버전의 작성자와 논의하여 다음을 얻습니다. 최고의 솔루션. 이러한 논의는 이미 작성된 시점의 최종 제안을 지원하는 새로운 구현으로 이어지는 경우가 많습니다.

몇 가지 예외가 있습니다. 예를 들어 POSIX는 이미 10년 전에 존재했던 BSD 인터페이스와 충돌하는 방식으로 getpgrp()정의 되었습니다. setpgrp()POSIX는 GNU libc에서 호환되지 않는 인터페이스를 도입하기 전에 거의 30년 동안 존재했던 구현과 완전히 호환되지 않는 방식으로 getline()정의 되었습니다.fexec()

기존 구현이 일치하지 않는 것으로 밝혀지면 어떤 변형이 사용되는지(또는 기존의 다양한 구현이 혼합되어 도입되는지 여부) 결정이 내려지고 posix 특정 이름이 도입됩니다. 이는 예를 들어 posix_xxx()Roger Faulkner(Sun Microsystems)의 이전 참조 구현과 매우 유사한 기능이 도입된 스레드 인터페이스에서 발생했습니다 .

관련 정보