Vì hệ điều hành Apple OS-X là một công cụ phái sinh UNIX (BSD) và kiến trúc Mac (Intel) bên dưới là như nhau, tại sao việc ứng dụng dành riêng cho Apple chạy trên Linux lại không đơn giản?
Vì hệ điều hành Apple OS-X là một công cụ phái sinh UNIX (BSD) và kiến trúc Mac (Intel) bên dưới là như nhau, tại sao việc ứng dụng dành riêng cho Apple chạy trên Linux lại không đơn giản?
Câu trả lời:
OS X thực sự (chủ yếu) là vỏ đồ họa độc quyền trên BSD. Để tạo một ứng dụng GUI OS X, người ta phải tuân theo api mà Apple đã tiếp xúc, và do đó đây không phải là nền tảng chéo và không dễ dàng mang theo.
Đó là lý do tại sao hầu hết các thư viện đều dễ dàng chuyển (thực ra hầu hết được phát triển trên Linux) sang Linux nhưng không phải là vỏ đồ họa của họ.
Một lưu ý phụ: Có những khung công tác mà bạn có thể tạo các ứng dụng GUI đa nền tảng. Qt đến với tâm trí. Nhưng thực tế là các khung đó là đa nền tảng cũng làm cho các ứng dụng được tạo với chúng ít thân thiện với người dùng hơn trên một nền tảng cụ thể so với ứng dụng GUI "gốc". Các khung đó có xu hướng làm cho mọi thứ trông chung chung trên các nền tảng, trong trường hợp của Apple là xấu, bởi vì Apple đã tạo ra trải nghiệm người dùng rất cụ thể mà không dễ dàng "phù hợp" với các nền tảng khác.
Chỉnh sửa (để kết hợp các nhận xét trong câu trả lời - cảm ơn @Nick, @kbisset và @John):
Một giải pháp sẽ là chuyển toàn bộ vỏ đồ họa OS X (thư viện Cacao / Core nguồn đóng - đó là điều làm cho OS X thực sự độc đáo ) sang Linux. Và về mặt kỹ thuật, Apple có thể làm điều đó khá dễ dàng, nhưng họ không có lý do gì, vì toàn bộ mô hình kinh doanh của họ là sự độc đáo của toàn bộ nền tảng của họ - phần cứng và phần mềm.
Điều quan trọng là ai đó có thể cố gắng sao chép các thư viện, nhưng sẽ phải mất hàng thập kỷ để thực hiện, và có lẽ sẽ không bao giờ đúng do tất cả các cuộc gọi không có giấy tờ sẽ phải được sao chép.
Lớp đồ họa không giống nhau chút nào. OS X sử dụng khung đồ họa độc quyền, linux sử dụng X (X11 / X.org)
Hầu như tất cả các ứng dụng OS X gốc đều sử dụng các khung như Ca cao, CoreAnimation, v.v., chỉ có trên OS X.
Ví dụ: giả sử bạn có một ứng dụng lưu mật khẩu cho người dùng - trên OS X, ứng dụng này sẽ sử dụng hệ thống Keychain và các API có liên quan. Nếu bạn đã chuyển cái này sang Linux, thì không có tương đương trực tiếp, vì vậy bạn sẽ phải thực hiện lại toàn bộ tính năng này. Đó là một tính năng nhỏ, và sẽ yêu cầu viết lại lớn.
Nếu bạn viết ứng dụng của mình bằng thư viện GUI đa nền tảng như GTK, Qt hoặc wxWidgets và việc chuyển sẽ dễ dàng hơn nhiều (hoặc, "có thể") - nhưng các hệ điều hành vẫn rất khác nhau về giao diện người dùng (ví dụ: HĐH X sử dụng một thanh menu riêng, trong khi Linux có xu hướng có thanh menu cho mỗi cửa sổ)
Một trong những cổng đa nền tảng tốt nhất mà tôi thấy là Transmission , thực hiện chức năng chính của nó là một thư viện (chứa càng ít mã cụ thể nền tảng càng tốt), sau đó tạo GUI riêng cho từng nền tảng, riêng biệt. Điều này có nghĩa là mỗi cổng chia sẻ rất nhiều mã, nhưng tất cả đều có giao diện gốc, tốt (thay vì một giao diện duy nhất phù hợp với Linux, nhưng không phù hợp với OS X hoặc ngược lại)
Có một dự án tên là Cocotron , "nhằm mục đích triển khai API Objective-C đa nền tảng tương tự như mô tả của tài liệu Cacao của Apple Inc." có khả năng giúp chuyển dễ dàng hơn nhiều, nhưng dường như có rất ít hoạt động muộn (bài đăng trên blog cuối cùng là vào tháng 12 năm 2008)
Bởi vì hầu hết các ứng dụng phụ thuộc nhiều vào bộ xử lý và kiến trúc cơ bản của máy mà chúng đang chạy. Chúng cũng phụ thuộc vào bộ công cụ giao diện người dùng và các thư viện dành riêng cho nền tảng khác.