Tại sao tất cả các ứng dụng Mac không dễ dàng mang theo Linux?


15

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:


23

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.


Tại sao trình bao đồ họa độc quyền không thể được chuyển sang Linux tương đối dễ dàng nếu nó đang chạy trên BSD? Tôi đã hiểu vấn đề khi kiến ​​trúc cơ bản khác nhau, nhưng bây giờ kiến ​​trúc cơ bản chỉ là Intel thì tại sao vỏ đồ họa không chỉ là một thư viện nữa?
Nick Pierpoint

8
Hai lý do. Đầu tiên, nó chỉ là một vỏ đồ họa. Nó là toàn bộ lớp trên Unix, mà Apple đã làm việc trong nhiều năm. Thứ hai, mã không có sẵn. Vì vậy, nó sẽ cần phải được viết lại từ đầu. Apple có thể có thể làm điều đó trong một khoảng thời gian ngắn, nhưng không có lý do gì để họ làm vậy.
KeithB

1
Vì vậy, ... đối với Apple ít nhất thực sự không có vấn đề kỹ thuật - họ có thể di chuyển OS-X để chạy trên Linux tương đối dễ dàng vì họ đã có nó chạy trên UNIX. Rõ ràng là một vấn đề lớn đối với những người khác vì mã là nguồn đóng và không có API được xuất bản đầy đủ. Đó có phải là một bản tóm tắt công bằng?
Nick Pierpoint

3
Nick: Về cơ bản, vâng. Apple không quan tâm đến việc chuyển OSX sang nền tảng Linux; Tại sao họ nên đầu tư rất nhiều vào nền tảng Darwin nguồn mở (lớp BSD) và thư viện Cacao / Core * nguồn đóng của họ (đó là điều làm cho OSX thực sự độc đáo). 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. Và đến cuối cùng là gì?
John Rudy

4
GNUStep là một triển khai mã nguồn mở của nhiều thư viện cốt lõi hiện có trong OS X, tuy nhiên, Apple đã bổ sung nhiều từ đó nên việc chuyển đổi vẫn không dễ dàng: wiki.gnustep.org/index.php/Cocoa
TRS-80

2

Ứng dụng dành riêng cho Apple có nghĩa là ứng dụng GUI? Khi bạn di chuyển lên trên dòng lệnh, có các API cụ thể của Apple cho mọi thứ (đồ họa, âm thanh, v.v.) không được hỗ trợ trên Linux do đó bạn không thể dễ dàng chuyển các ứng dụng.


1

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)


1

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.