2010-08-10 23 views

Trả lời

7

Nếu phần mềm Mac sử dụng Cocoa, thư viện hiển thị độc quyền của Apple (mà nó không, nếu nó chạy trên Mac với GUI và không yêu cầu bắt đầu máy chủ X), thì bạn có thể gặp một số sự cố khi chạy mã trên một hệ thống BSD bình thường.

Nếu mã của bạn chỉ sử dụng các hàm do POSIX chỉ định, nó sẽ chuyển sang Linux, BSD và thậm chí cả Windows.

Đúng là Mac OS X và BSD có liên quan. Mặc dù chúng có các hạt nhân khác nhau, chúng có chung một tổ tiên chung và mã vùng người dùng quan trọng. Rõ ràng, tôi không thể định lượng "gần như thế nào" - đó là chủ quan.

+1

@AmokHuginnsson Trên thực tế, Windows XP, 7, Server 2003 và 2003 R2 (mà tôi biết) có một "thành phần" POSIX có thể được cài đặt thông qua mục nhập bảng điều khiển "Thêm hoặc loại bỏ cấu phần Windows". Khi được cài đặt, chúng thực sự trở thành tuân thủ POSIX. – Borealid

4

Mac OS X một hương vị của BSD Unix. Như Borelaid đã chỉ ra, điều đó không nhất thiết có nghĩa là việc chuyển các ứng dụng Mac sang các hương vị khác của BSD sẽ dễ dàng hoặc thậm chí có thể quản lý được, ít hơn nhiều so với các hương vị BSD phổ biến khác. Mỗi một trong số họ mang những chi tiết cụ thể của riêng họ, và OS X nhiều nhất.

Chương trình chuyển từ khác Tính năng BSD cho OS X cũng liên quan đến công việc và không phải lúc nào cũng hoạt động (trơn tru hoặc), nhưng thường đơn giản hơn nhiều.

1

Tùy thuộc vào loại ứng dụng bạn đang cố gắng chuyển. Nếu bạn viết chương trình console C/C++ tương thích POSIX, chúng sẽ biên dịch và hoạt động tốt dưới bất kỳ hệ thống tương thích POSIX nào (chủ yếu là Linux và BSD), nhưng lưu ý rằng OS X thường không thực hiện các chức năng POSIX mới nhất (ví dụ: utimensat)) có sẵn trong Linux. Mặt khác, các ứng dụng đồ họa sử dụng Cocoa hoặc Carbon cũ hơn, vốn sẽ yêu cầu GNUstep. Việc chuyển các ứng dụng đồ họa là khá phổ biến vì mọi môi trường đồ họa đều có các tiêu chuẩn và quy ước thiết kế khác nhau, vì vậy các ứng dụng đồ họa thường phải được viết từ đầu cho mỗi môi trường đồ họa.

26

Quay lại những ngày của OS X 10.4 Tôi đã dành thời gian không viết một VFS cho OS X. Trong những ngày đó, các hệ thống con chính của hạt nhân, chỉ có ngăn xếp mạng và VFS vẫn thực sự là BSD. Vào thời điểm đó, ngay cả VFS đã được viết lại một phần để làm cho nó thêm mô-đun (tất cả các cấu trúc dữ liệu BSD VFS trở thành con trỏ mờ và API được thông qua những gì được gọi là hàm KPI). Tôi tin rằng ngăn xếp mạng cũng giống như vậy. Cũng có một lớp mỏng ở giao diện với userland làm cho hệ điều hành trông giống như BSD cho các chương trình của người dùng.

Mọi thứ khác đã được viết lại khá nhiều hoặc thay thế: quản lý bộ nhớ, quản lý quy trình, vv đến từ vi nhân Mach; hệ thống con trình điều khiển thiết bị được viết từ nền tảng của Apple.

Về mặt lập trình người dùng, OS X rất giống với BSD và các chương trình được viết cho BSD nên dễ dàng di chuyển. Tuy nhiên, OS X có rất nhiều API không có sẵn trong BSD. Chúng bao gồm hầu như tất cả mọi thứ để làm với giao diện người dùng - đồ họa, âm thanh vv Ngoài ra còn có các giao diện khác không tồn tại trong BSD như API khởi chạy, đó là cách ưu tiên của OS X khi khởi chạy các quá trình nền.

0

Đã cài đặt - không.

Được chuyển từ nguồn, có thể - xem Gnustep, Cocotron, EtoileOS - tất cả đều cung cấp mức độ tương thích khác nhau với ngăn xếp phát triển Cocoa (nhưng không phải với Carbon cũ). Có một số lượng giới hạn phần mềm x-platform-C được phát triển theo cách đó.

14

Wikipedia BSD article là tốt (và tuân theo sự hiểu biết của riêng tôi về những gì đáng giá). Nó nói rằng Darwin, hệ thống mà Mac OS X của Apple được xây dựng, là một dẫn xuất của 4.4BSD-Lite2 và FreeBSD và ghi chú rằng 4.4BSD là phiên bản cuối cùng mà Berkeley tham gia.

Vì vậy, Darwin là BSD như bạn có thể nhận được (giống như tất cả các BSD khác!). OS X đề cập đến những phần của bản phân phối không phải là mã nguồn mở, chủ yếu là GUI, nhưng bao gồm một loạt các khung công tác và bất kỳ thứ gì dựa trên các khung này sẽ không thể di chuyển được.

Toàn bộ hệ điều hành X là hệ thống UNIX 03. Điều đó tương đương với việc thực sự là một hệ thống tuân thủ POSIX (trái ngược với POSIX).

Như câu trả lời khác đã lưu ý, các bộ phận Userland của hệ điều hành đang gây ngạc nhiên cho bất cứ ai có kinh nghiệm unix nhiều, và tôi đã hiếm khi có bất kỳ khó khăn xây dựng cầm tay-unix phần mềm trên OS X.

Ngược lại, các phần không phải là userland của hệ điều hành khá khác nhau. Apple dường như sẵn sàng đổi mới ở những khu vực đó khá vui vẻ. Tôi nghĩ (nhưng tôi không tích cực) rằng những thay đổi này chính thức là một phần của Darwin. Một trong những khác biệt rõ ràng nhất là launchd đã thay thế cron, at, inetd và phần lớn cơ sở hạ tầng khởi động.