어느 정도 삽질을 각오했느냐에 따라 답이 달라지는데 컴파일 언어에서는 안 된다고 보는 게 속편함.
1. 우선 맥에서 윈도우로 넘어가면 ARM 아키텍처에서 x64 아키텍처로 넘어가야 하기 때문에 기계어 레벨에서 호환성 문제가 있음. 그래도 이거는 LLVM 같은 크로스 컴파일러에서 삽질을 좀 거치면 다른 아키텍처용으로도 프로그램을 뽑아낼 수 있긴 해.
2. 설령 아키텍처가 똑같거나 크로스컴파일로 문제를 해결했다 쳐도 더 큰 문제가 라이브러리임. OS가 달라지면, 또는 OS가 같더라도 아키텍처가 달라지면 사용하는 라이브러리 파일도 서로 달라지기 때문에 다른 OS용 라이브러리 파일을 직접 구해오지 않는 이상 제대로 동작할 리가 없음. 라이브러리 파일이 있어도 크로스링킹 지원하는 링커에 오만가지 옵션을 주면서 기도해야 함.
1. 컴파일된 후 링크해서 만들어진 실행 파일 구조가 달라서 OS가 못 읽어들임.(가상화로 푸는 방법을 따로 구현하면 가능.)
2. 아키텍처라고 CPU 명령어에 따라서 달라짐.(가상화로 명령어 매칭하면 가능.)
3. OS에서 지원해주는 라이브러리의 명령어랑 기능이 약간씩 다름.(가상화로 해당 OS 라이브러리를 지원해주면 가능.)
이 3가지를 돌리기 위한 가상화를 돌리면, 사용자 입장에선 가상화를 위한 컴퓨터 리소스를 사용해서 성능이 떨어지고, 개발자 입장에선 그걸 다 신경쓰면서 개발해야되기 때문에 엄청 소수만 살아 남아있음.