(미해결) [Java] JAVA 소스코드는 왜 플랫폼에 독립적인가??

Java 소스코드가 운영체제에 독립적이라는 이유는
Javac의 중간수준 컴파일 결과인 ByteCode가 JVM에 의해서 운영체제에 맞게 실행되기 때문이다.
그렇다면 가상의 개념 CVM이 있다하자.
CVM은 (C/C++ Virtual Machine) 이 머신의 역할은 .c 파일을 컴파일하고 실행결과를 출력한다.
또한, 운영체제마다 CVM은 다르게 구현되어 있으며, 각 운영체제들의 특성에 맞게 구현 되어있다 하자.
또한 CVM은 하드웨어에 대한 직접적인 제어를 추상화하여 라이브러리나 프레임워크를 통해 일관된 인터페이스를 제공할 수 있다
따라서, 운영체제에 CVM이 설치되어있다면 .c 소스코드는 CVM에 의해서 해당 운영체제에서 컴파일+실행결과 출력을 보장받는다.
위와 같은 가정에서
CVM은 JVM의 ByteCode 와 동일하게 .c파일이 운영체제에 독립적이라고 볼 수 있는가?
사실상 내가 원하는 답변은 C/C++ 에서 분기가 되는 시점에서 compiler + linker = CVM 의 개념을 도입하면
CVM도 JVM의 논리와 같이 플랫폼에 독립적이어야 하는거 아닌가 생각이 든다.
좀더 과장을 보태자면 ByteCode가 독립적이라면 .c 소스파일도 독립적이지 못할 이유는 없다고 생각하는게
1) ByteCode를 실행하는 주체는 JVM이다. 그런데 JVM 자체는 운영체제에 종속적이다.
2) .c소스코드를 컴파일 하는 주체는 compiler이다. 이때 이 compiler 자체는 운영체제에 종속적이다. 이후 linker가 실행파일을 만들기만 할 뿐 아니라 운영체제에 맞춰서 실행결과도 출력한다면 1), 과 2) 는 동일하게 취급할 수 있는거 아닌가?
2)의 표현을 좀 더 명확히 걷어내보자면,
.c소스코드를 컴파일&실행 하는 주체는 compiler+linker(실행결과출력보장)이다. (즉, CVM 가상의 개념)
이제 정리해서 다시 써보자면
1) ByteCode를 실행하는 주체는 JVM이다. 그런데 JVM 자체는 운영체제에 종속적이다.
*2) .c소스코드를 실행하는 주체는 CVM이다. 그런데 CVM 자체는 운영체제에 종속적이다.
1)과 *2)는 같은 수준에서 볼 수 있는거 아닌가? 생각이 든다. 모형상에서 C/C++과 Java 자체는 같다고 보인다.