![POSIX는 규정적인가요, 아니면 설명적인가요?](https://linux55.com/image/170438/POSIX%EB%8A%94%20%EA%B7%9C%EC%A0%95%EC%A0%81%EC%9D%B8%EA%B0%80%EC%9A%94%2C%20%EC%95%84%EB%8B%88%EB%A9%B4%20%EC%84%A4%EB%AA%85%EC%A0%81%EC%9D%B8%EA%B0%80%EC%9A%94%3F.png)
POSIX는 과거에 애플리케이션이 UNIX의 각 특정 부분을 구현한 방법에 대한 설명입니까, 아니면 UNIX를 구현해야 하는 방법에 대한 규정 사양입니까?
설명적인 경우 포함된 모든 구현에 공통된 기능만 유효합니다. 어떤 구현에서도 구현되지 않은 기능은 "정의되지 않음"입니다.
그것이 규범적이라면, 어떤 이론적 틀을 기반으로 하는가? 수학? C 언어? 경험?
답변1
이는 규범적이다법학, 그러나 주로 설명적임사실은.
POSIX는 발행 당시 존재했던 사양과 향후 구현될 사양 모두에 일치할 수 있는 사양 세트입니다. 그래서 이것은 규범적입니다.
실제로 POSIX는 주로 기존 구현의 공통 하위 집합으로 시작되었습니다. 그런 의미에서 그것은 대부분 설명적입니다. 그러나 POSIX는 때때로 새로운 동작을 요구합니다. 가장 일반적으로 POSIX는 다양한 구현에 존재하지만 인터페이스(함수 이름, 명령줄 옵션 등)가 다른 기능에 대한 여러 기능과 유틸리티를 도입합니다.pax
tar
( 및 에 대한 대체 cpio
, 이는 Unix 변형에서 매우 다름) 및 다양한posix_xxx
기능. POSIX는 또한 다음과 같은 새로운 상수와 명령줄 옵션을 도입합니다.ps
, "이 옵션은 BSD 및 SVID -A
와 동일합니다 . 두 시스템이 다르기 때문에 니모닉 절충안이 선택되었습니다." 이론적 근거 섹션에서는 일반적으로 이 기능 또는 해당 기능이 포함된 이유를 설명하고, 어떤 구현에 이미 특정 기능이 있는지 또는 왜 포함되는지를 자주 언급합니다. 호환되지 않는 구현 사이에서 선택이 이루어지거나 이루어지지 않습니다.-g
-e
답변2
POSIX의 목적은 과거 동작을 이미 명확한 역사적 오류로 간주할 수 없는 한, 역사적 동작을 깨뜨리는 것이 아니라(역사적 UNIX를 호환되지 않게 만드는 것이 아니라) 기존 동작을 설명하는 것입니다.
POSIX의 추가 목적은 자신의 발명품을 소개하는 것이 아닙니다. 소위 자체 발명이 필요한 것으로 밝혀지면(기존 구현이 표준화에 유용하지 않기 때문에) POSIX 위원회의 아이디어는 다양한 UNIX(또는 프로그램) 버전의 작성자와 논의하여 최상의 솔루션에 도달합니다. 이러한 논의는 최종 제안이 작성될 때 이를 지원하는 새로운 구현으로 이어지는 경우가 많습니다.
10년 전에 존재했던 BSD 인터페이스 getpgrp()
와 충돌하는 방식으로 정의된 POSIX와 같은 몇 가지 예외가 있습니다. setpgrp()
POSIX가 정의된 방식은 GNU libc가 호환되지 않는 인터페이스를 도입하기 전 거의 30년 동안 존재했던 구현 getline()
과 fexec()
완전히 호환되지 않습니다 .
기존 구현 간의 불일치가 발견되면 사용할 변형(또는 기존의 다양한 구현을 혼합하여 도입할지 여부)을 결정하고 POSIX 관련 이름을 도입합니다. 예를 들어 posix_xxx()
Roger Faulkner(Sun Microsystems)의 이전 참조 구현과 매우 유사한 기능이 도입된 스레딩 인터페이스에서 이런 일이 발생했습니다 .