Tôi biết có nhiều sự khác biệt giữa OSX và Linux, nhưng điều gì làm cho chúng hoàn toàn khác nhau, khiến chúng không tương thích về cơ bản?
Tôi biết có nhiều sự khác biệt giữa OSX và Linux, nhưng điều gì làm cho chúng hoàn toàn khác nhau, khiến chúng không tương thích về cơ bản?
Câu trả lời:
Toàn bộ ABI là khác nhau, không chỉ là định dạng nhị phân (Mach-O so với ELF) như sepp2k đã đề cập.
Ví dụ, trong khi cả Linux và Darwin / XNU (hạt nhân của OS X) đều sử dụng sc
trên PowerPC và int 0x80
/ sysenter
/ syscall
trên x86 cho mục nhập tòa nhà, không có nhiều điểm chung từ đó.
Darwin chỉ đạo các số tòa nhà âm ở hạt nhân Mach và số tòa nhà dương ở hạt nhân nguyên khối BSD - xem xnu / osfmk / mach / syscall_sw.h và xnu / bsd / kern / syscalls.master . Các số tòa nhà của Linux thay đổi theo kiến trúc - xem linux / arch / powerpc / include / asm / unistd.h , linux / arch / x86 / include / asm / unistd_32.h và linux / arch / x86 / include / asm / unistd_64.h - nhưng tất cả đều không âm. Vì vậy, rõ ràng là số tòa nhà , tranh luận về tòa nhà , và thậm chí cả tòa nhà chọc trời tồn tại là khác nhau.
Các thư viện thời gian chạy C tiêu chuẩn cũng khác nhau; Darwin chủ yếu thừa hưởng libc của FreeBSD, trong khi Linux thường sử dụng glibc (nhưng có những lựa chọn thay thế, như eglibc và dietlibc và uclibc và Bionic).
Chưa kể rằng toàn bộ ngăn xếp đồ họa là khác nhau; bỏ qua toàn bộ thư viện Cacao Objective-C, các chương trình GUI trên OS X nói chuyện với WindowServer qua các cổng Mach, trong khi trên Linux, các chương trình GUI thường nói chuyện với máy chủ X qua các ổ cắm tên miền UNIX bằng giao thức X11. Tất nhiên, có những trường hợp ngoại lệ; bạn có thể chạy X trên Darwin và bạn có thể bỏ qua X trên Linux, nhưng các ứng dụng OS X chắc chắn không nói về X.
Giống như Wine, nếu ai đó đưa tác phẩm vào
sau đó có thể chạy một chương trình OS X "nguyên bản" trên Linux. Nhiều năm trước, Kyle Moffet đã thực hiện một số công việc cho mục đầu tiên, tạo ra một nguyên mẫu binfmt_mach-o cho Linux, nhưng nó chưa bao giờ được hoàn thành và tôi không biết về các dự án tương tự nào khác.
(Theo lý thuyết này là hoàn toàn có thể, và những nỗ lực tương tự đã được thực hiện nhiều lần; ngoài Rượu, Linux chính nó có hỗ trợ cho việc chạy mã nhị phân từ UNIXes khác như HP-UX và Tru64, và Glendix mục tiêu dự án để mang lại Plan 9 tương thích để Linux.)
Ai đó đã nỗ lực triển khai trình tải nhị phân Mach-O và trình dịch API cho Linux!
shinh / maloader - GitHub sử dụng cách tiếp cận giống như Wine khi tải nhị phân và bẫy / dịch tất cả các cuộc gọi thư viện trong không gian người dùng. Nó hoàn toàn bỏ qua các tòa nhà chọc trời và tất cả các thư viện liên quan đến đồ họa, nhưng đủ để có nhiều chương trình điều khiển hoạt động.
Darling xây dựng dựa trên trình tải xuống, thêm thư viện và các bit thời gian chạy hỗ trợ khác.
Tại sao các ứng dụng OSX sẽ không chạy tự nhiên trên linux:
Trước hết OSX sử dụng định dạng nhị phân khác với Linux, vì vậy Linux không thể thực thi các tệp nhị phân được biên dịch cho OSX (giống như cách nó không thể thực thi các tệp nhị phân được biên dịch cho Windows hoặc BSD).
Thứ hai, nếu bạn đang nói về các ứng dụng GUI, bộ công cụ GUI của Apple Ca cao a) chỉ khả dụng cho OSX và b) không chạy trên X11.
Tại sao không có rượu tương đương cho các ứng dụng OSX:
Rất nhiều công việc phải được thực hiện trước khi rượu thậm chí có thể sử dụng được một nửa. Vì không có nhiều nhu cầu về tương đương OSX, nên chưa có ai đầu tư cùng một lượng nỗ lực vào một dự án như vậy.
Lý do quan trọng nhất khiến các ứng dụng OS X không chạy được trên Linux là vì các hệ điều hành đó đã sử dụng các tòa nhà khác nhau.
Một số câu trả lời trước đây đã đề cập đến các thư viện nhưng thực tế không phải vậy - Core Foundation phần lớn được Apple mở nguồn dưới tên CFLite và dễ dàng di chuyển tới bất kỳ nền tảng nào (phiên bản Windows của iTunes thực sự nằm trên một cổng Windows của Core Foundation và với Một số chỉnh sửa trình biên dịch, bạn có thể trực tiếp tạo CFLite bằng cách sử dụng clang trên bản phân phối Linux) và cũng có những nỗ lực nguồn mở để chuyển môi trường Objective-C, chủ yếu là Foundation và AppKit sang Linux, đặc biệt là GNUstep, một triển khai GNU của OpenStep, ngày đó sớm hơn so với Cacao của Apple (bắt đầu khi vẫn còn công ty NeXT Computer.)
Nếu ai đó quyết tâm, họ có thể thiết kế một trình nạp sẽ thu thập mọi tòa nhà Mach-O và dịch nó sang tòa nhà Linux tương ứng, cũng như tự động liên kết các thư viện nguồn mở "đối tác" với nhị phân với dịch ABI thích hợp.
Và chỉ với thông tin của bạn, nếu bạn có thể lấy mã nguồn của ứng dụng Mach-O, bạn có thể xem xét cổng và nó có thể rất đơn giản. Ví dụ, ứng dụng TextEdit đi kèm với OS X 10.6 có thể được biên dịch lại liên kết trực tiếp với GNUstep sau khi tước một vài dòng mã CF (không quan trọng) và do đó ngay lập tức có sẵn trong Linux (không đề cập đến TextEdit được gửi cùng với GNUstep biên dịch lại trực tiếp ứng dụng TextEdit từ NeXTSTEP, tiền thân của OS X, thậm chí còn giữ lại nhãn "© 1995 NeXT" của nó). TextEdit theo giấy phép BSD.
Vào ngày 8 tháng 12 năm 2012, dự án mới đã được đưa ra - Em yêu.