답변:
OS X은 실제로 BSD 위에있는 독점 그래픽 쉘입니다. OS X GUI 응용 프로그램을 만들려면 Apple이 공개 한 API를 따라야하므로 플랫폼 간이 아니고 쉽게 이식 할 수 없습니다.
그렇기 때문에 대부분의 라이브러리 는 그래픽 쉘이 아닌 Linux 로 쉽게 이식 (실제로는 대부분 Linux에서 개발)됩니다 .
참고 사항 : 크로스 플랫폼 GUI 응용 프로그램을 만들 수있는 프레임 워크가 있습니다. Qt 가 떠 오릅니다. 그러나 이러한 프레임 워크가 크로스 플랫폼이라는 사실은 "네이티브"GUI 응용 프로그램보다 특정 플랫폼에서 만든 응용 프로그램을 사용자에게 덜 친숙하게 만듭니다. 애플은 다른 플랫폼에 쉽게 맞지 않는 매우 구체적인 사용자 경험을 만들었 기 때문에 이러한 프레임 워크는 모든 플랫폼에서 모든 것이 일반적인 것처럼 보이게 만드는 경향이 있습니다.
편집 (응답에 주석을 포함시키기 위해-@Nick, @kbisset 및 @John 덕분에) :
해결책은 전체 OS X 그래픽 쉘 (폐쇄 된 소스 Cocoa / Core 라이브러리)을 포팅하는 것입니다. )를 Linux로 그리고 기술적으로, 애플은 그렇게 쉽게 할 수 있지만, 전체 비즈니스 모델이 전체 플랫폼 (하드웨어 및 소프트웨어)의 고유성이므로 이유가 없습니다.
누군가 라이브러리를 복제하려고 시도 할 수는 있지만 수십 년이 걸리고, 문서화되지 않은 모든 호출로 인해 복제되지 않아야 할 수도 있습니다.
그래픽 레이어는 전혀 다릅니다. OS X는 독점 그래픽 프레임 워크를 사용하고, Linux는 X (X11 / X.org)를 사용합니다
거의 모든 기본 OS X 응용 프로그램은 Cocoa, CoreAnimation 등과 같은 프레임 워크를 사용하며 OS X에서만 사용할 수 있습니다.
예를 들어 OS X에서 사용자 암호를 저장하는 응용 프로그램이 있다고 가정하면 키 체인 시스템과 관련 API를 사용합니다. 이것을 Linux로 포팅하려는 경우 직접 동등한 기능이 없으므로이 전체 기능을 다시 구현해야합니다. 이는 작은 기능이며 큰 재 작성이 필요합니다.
GTK, Qt 또는 wxWidgets와 같은 크로스 플랫폼 GUI 라이브러리를 사용하여 응용 프로그램을 작성하면 이식이 훨씬 쉬워 지지만 (또는 "가능한") 운영 체제는 여전히 UI 측면에서 매우 다릅니다 (예 : OS). X는 별도의 메뉴 막대를 사용하지만 Linux는 각 창마다 메뉴 막대를 갖는 경향이 있습니다)
내가 본 최고의 크로스 플랫폼 포트 중 하나는 Transmission 입니다. 전송 은 주요 기능을 라이브러리 (가능한 한 적은 플랫폼 별 코드가 포함되어 있음)로 구현 한 다음 각 플랫폼에 대한 고유 GUI를 개별적으로 만듭니다. 이것은 각 포트가 많은 코드를 공유하지만 모두 기본 인터페이스가 훌륭하다는 것을 의미합니다 (Linux에는 잘 맞지만 OS X에는 위치하지 않거나 그 반대 인 단일 인터페이스가 아님).
Cocotron 이라는 프로젝트가 있는데 , "Apple의 Cocoa 문서에 기술 된 것과 유사한 크로스 플랫폼 Objective-C API를 구현하는 것을 목표로한다"는 프로젝트가 있지만 포팅이 훨씬 쉬워 질 것입니다. (마지막 블로그 게시물은 2008 년 12 월에있었습니다)