GetVersionEx 같은 경우에는 프로그램의 호환성 설정에서 "특정 운영체제인 것 처럼" 프로그램을 실행시킬 수 있어 프로그램의 입장에서 GetVersionEx를 그냥 호출하면 호환성 설정에서 맞춰놓은 운영체제 버전이 반환된다고 하더군요.. http://www.jiniya.net/wp/archives/14774 이런식으로 따로 처리를 해야하는 듯 합니다
하위 호환이 안 된다고 징징대는 곳이 많으니, 확실하게 윈도 10을 지원한다고 명시하지 않은 프로그램에게는 "나 윈도 8임 ㅎ" 하고 알려주려는 목적이겠지요.
서브시스템도 그런 맥락에서 존재하는 걸겁니다. 메인 커널의 버전은 올라가도 과거 커널과 호환되는 서브시스템을 두고 있을 수 있겠죠. 사실 MSDN에서 받을 수 있는 것들 중에 POSIX(!) 표준을 지원하는 Subsystem도 있습니다. fork를 비롯한 유용한 함수들을 사용할 수 있게 되지요.
네, 아무 이유 없이 GetVersionEx 함수를 봉인한 건 아니겠지만, 꼭 그렇게 해야만 했는가 여러 의문이 드는 게 있습니다. 개인적으로는 the old new thing 블로그의 운영자 같은 분이 나중에 이 주제에 대해서도 글을 좀 썼으면 하는 바람이 있습니다.
운영체제와 서브시스템의 버전 구분도 처음엔 그런 것 때문에 따로 구분해 놓았겠지만 오늘날은 별 의미 없는 구분이 돼 있지요. =_=;;