맥OS는 전통적으로 dynamic 이 아닌 static link 를 굉장히 선호 하고, 만약 dynamic 으로 배포 하더라도 한 파일로 다 패키징 해서 배포하는게 보통이라 (요즘은 규모가 커지다보니 덜 그렇지만... 간단하게 윈도우에서 DLL 이나 모든 데이터를 다 exe 파일의 리소스로 넣는 식이라고 보시면 편합니다) 그런문제가 덜합니다. 심지어는 iOS 는 아예 dynamic link 자체가 안되요
그리고 컴파일러와 OS 의 버전 차이로 생길수 있는 문제는.... 그냥 새 컴파일러로 빌드 안하면 새 OS에서 안돌아가게 만들어 버리는걸로 해결합니다 (...)
윈도우 처럼 하위버전 컴파일러에서 상위 OS의 API 를 동적으로 끌어다 쓰는것도 가능 하긴 하지만 ... 사실상 OS가 아니라 펌웨어가 되버린 상황이라 거의 대부분의 유저들이 버전 업을 하니 그런 면에서는 부담이 적은 편이지요
감사합니다. 맥까지 정말 모르는 게 없으시네요~ ^^;; OS가 아니라 펌웨어래.. ㅋㅋㅋㅋ
확실히 Windows만 유난히도 DLL+스레드를 좋아하긴 하는군요.
그리고 옵씨는 메시지 방식이어서 Windows의 C++ 개발처럼 가상 함수가 바뀔 때마다 DLL 심벌이 다 바뀌고 바이너리 호환성이 깨지는 걱정을 할 필요가 없어서 참 좋긴 하겠습니다.
그 당시엔 커넥션간 인터렉션 자체가 거의 없는 시대이기도 했고(사실 요즘 그 시절로 다시 돌아가는게 아닌가 싶기도 합니다.... 게임이나 메신저 같은게 아니라면) 프로세스 생성이 굉장히 가볍기도 하고... Linux 같은경우는 상당히 오랜 기간 Kernel mode thread 가 없었다는 이유도 있었겠지요. 작업용이 아니라 서버용이었으니까
윈도는 프로세스 생성이 아무래도 상당히 느린 편이고 대신 Thread 성능이 굉장히 좋은 편인데다 개인용으로 많이 쓰이는 이슈가 컸을 것 같습니다.
개인용으로 쓸땐 아무래도 프로세스가 여러개 체인이 걸리면 사용자 실수로 죽일 가능성도 높으니까요
진짜로 엔트리포인트 함수의 프로토타입의 차이밖에 없는 거나 마찬가지 같네요.
EXE는 int func() 밖에 없고 나머지 핸들 같은 부가정보는 C 라이브러리가 GetStartupInfo, GetModuleHandle, GetCommandLine 같은 Windows API를 따로 호출해서 얻어 와서 WinMain에다 전달하는 반면,
DLL과 함께 전달되는 reason은 운영체제가 직통으로 함수 인자로 전해 주지요~
오덕 인증. ㅋㅋㅋㅋ
그나저나 확실히 개발 분야뿐만 아니라 개발 환경의 세대차이를 느끼게 하는 대목이네요. 기윤 님 정도의 Windows 프로그래밍 경력으로 DLL을 만들 일이 지금까지 없으셨다니. <날개셋> 한글 입력기는 커널 라이브러리는 말할 것도 없고 플러그 인, IME 외부 모듈, 훅 프로시저까지 전부 DLL이지요.