왜 모든 Mac 응용 프로그램을 Linux로 쉽게 이식 할 수 있습니까?


15

Apple OS-X 운영 체제는 UNIX 파생 (BSD)이고 기본 (Intel) Mac 아키텍처가 동일하기 때문에 Linux에서 Apple 특정 응용 프로그램을 실행하는 것이 왜 그렇게 간단하지 않습니까?

답변:


23

OS X은 실제로 BSD 위에있는 독점 그래픽 쉘입니다. OS X GUI 응용 프로그램을 만들려면 Apple이 공개 한 API를 따라야하므로 플랫폼 간이 아니고 쉽게 이식 할 수 없습니다.
그렇기 때문에 대부분의 라이브러리 그래픽 쉘이 아닌 Linux 쉽게 이식 (실제로는 대부분 Linux에서 개발)됩니다 .

참고 사항 : 크로스 플랫폼 GUI 응용 프로그램을 만들 수있는 프레임 워크가 있습니다. Qt 오릅니다. 그러나 이러한 프레임 워크가 크로스 플랫폼이라는 사실은 "네이티브"GUI 응용 프로그램보다 특정 플랫폼에서 만든 응용 프로그램을 사용자에게 덜 친숙하게 만듭니다. 애플은 다른 플랫폼에 쉽게 맞지 않는 매우 구체적인 사용자 경험을 만들었 기 때문에 이러한 프레임 워크는 모든 플랫폼에서 모든 것이 일반적인 것처럼 보이게 만드는 경향이 있습니다.

편집 (응답에 주석을 포함시키기 위해-@Nick, @kbisset 및 @John 덕분에) :
해결책은 전체 OS X 그래픽 쉘 (폐쇄 된 소스 Cocoa / Core 라이브러리)을 포팅하는 것입니다. )를 Linux로 그리고 기술적으로, 애플은 그렇게 쉽게 할 수 있지만, 전체 비즈니스 모델이 전체 플랫폼 (하드웨어 및 소프트웨어)의 고유성이므로 이유가 없습니다.
누군가 라이브러리를 복제하려고 시도 할 수는 있지만 수십 년이 걸리고, 문서화되지 않은 모든 호출로 인해 복제되지 않아야 할 수도 있습니다.


독점 그래픽 쉘이 BSD에서 실행되는 경우 Linux로 비교적 쉽게 이식 될 수없는 이유는 무엇입니까? 기본 아키텍처가 다른 경우 문제를 이해했지만 이제 기본 아키텍처는 인텔에 불과한 이유는 무엇입니까? 그래서 그래픽 셸이 왜 더 많은 라이브러리가 아닌가?
Nick Pierpoint

8
두 가지 이유가 있습니다. 첫째, 단순한 그래픽 셸입니다. 애플이 수년간 노력해온 것은 유닉스 위의 전체 계층입니다. 둘째, 코드를 사용할 수 없습니다. 따라서 처음부터 다시 작성해야합니다. 애플은 아마 짧은 시간 안에 그것을 할 수 있지만, 그럴 이유가 없다.
KeithB

1
따라서 ... 애플에게는 적어도 기술적 인 문제는 없습니다 .OS-X를 이미 UNIX에서 실행하고 있기 때문에 Linux에서 비교적 쉽게 실행되도록 OS-X를 마이그레이션 할 수 있습니다. 코드가 비공개이고 완전히 공개 된 API가 없기 때문에 다른 모든 사람들에게는 큰 문제가 될 것입니다. 이것이 공정한 요약입니까?
Nick Pierpoint

3
Nick : 본질적으로 그렇습니다. 애플은 OSX를 리눅스 플랫폼으로 옮기는 데 관심 이 없다 . 오픈 소스 Darwin 플랫폼 (BSD 계층)과 폐쇄 소스 Cocoa / Core * 라이브러리 (OSX를 독창적으로 만드는 이유)에 많은 투자를했을 때 왜 그렇게해야합니까? 전체 비즈니스 모델은 전체 플랫폼 (하드웨어 및 소프트웨어)의 고유성입니다. 누군가 라이브러리를 복제하려고 시도 할 수는 있지만 수십 년이 걸리고, 문서화되지 않은 모든 호출로 인해 복제되지 않아야 할 수도 있습니다. 그리고 끝까지?
John Rudy

4
GNUStep은 현재 OS X에있는 많은 핵심 라이브러리의 오픈 소스 구현이지만, 그 이후로 애플이 많이 추가되었으므로 포팅은 여전히 ​​쉽지 않습니다. wiki.gnustep.org/index.php/Cocoa
TRS-80

2

Apple 전용 응용 프로그램이란 GUI 응용 프로그램을 의미합니까? 명령 줄 위로 이동하면 Linux에서 지원되지 않는 모든 것 (그래픽, 사운드 등)에 대한 Apple 전용 API가 있으므로 응용 프로그램을 쉽게 이식 할 수 없습니다.


1

그래픽 레이어는 전혀 다릅니다. 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 월에있었습니다)


1

대부분의 응용 프로그램은 실행중인 컴퓨터의 프로세서 및 기본 아키텍처 이상의 기능에 의존하기 때문입니다. 또한 사용자 인터페이스 툴킷 및 기타 플랫폼 별 라이브러리에 의존합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.