เนื่องจากระบบปฏิบัติการ Apple OS-X เป็นอนุพันธ์ของ UNIX (BSD) และสถาปัตยกรรม Mac พื้นฐาน (Intel) เหมือนกันเหตุใดจึงไม่ตรงไปตรงมาที่จะให้แอปพลิเคชันเฉพาะของ Apple ทำงานบน Linux
เนื่องจากระบบปฏิบัติการ Apple OS-X เป็นอนุพันธ์ของ UNIX (BSD) และสถาปัตยกรรม Mac พื้นฐาน (Intel) เหมือนกันเหตุใดจึงไม่ตรงไปตรงมาที่จะให้แอปพลิเคชันเฉพาะของ Apple ทำงานบน Linux
คำตอบ:
OS X เป็นจริง (ส่วนใหญ่) เชลล์กราฟิกที่เป็นกรรมสิทธิ์ด้านบนของ BSD ในการสร้างแอปพลิเคชัน OS X GUI ผู้ใช้ต้องปฏิบัติตาม api ที่ Apple เปิดเผยและด้วยเหตุนี้จึงไม่ใช่แพลตฟอร์มข้ามและไม่สามารถพกพาได้ง่าย
นั่นเป็นสาเหตุที่ไลบรารีส่วนใหญ่ถูกย้ายอย่างง่ายดาย (จริงๆแล้วส่วนใหญ่พัฒนาบน Linux) ไปยัง Linux แต่ไม่ใช่เชลล์กราฟิกของพวกเขา
จากหมายเหตุด้านข้าง: มีเฟรมเวิร์กที่คุณสามารถสร้างแอพพลิเคชั่น GUI ข้ามแพลตฟอร์มได้ Qtอยู่ในใจ แต่ความจริงที่ว่าเฟรมเวิร์กเหล่านั้นเป็นแพลตฟอร์มข้ามทำให้แอพพลิเคชั่นที่สร้างขึ้นนั้นเป็นมิตรกับผู้ใช้บนแพลตฟอร์มเฉพาะน้อยกว่าแอปพลิเคชัน GUI "ดั้งเดิม" เฟรมเวิร์กเหล่านั้นมีแนวโน้มที่จะทำให้ทุกสิ่งดูทั่วทั้งแพลตฟอร์มซึ่งในกรณีของ Apple นั้นไม่ดีเพราะ Apple สร้างประสบการณ์ผู้ใช้ที่เฉพาะเจาะจงซึ่งไม่ง่าย "พอดี" ในแพลตฟอร์มอื่น ๆ
แก้ไข (เพื่อรวมข้อคิดเห็นในคำตอบ - ขอบคุณ @Nick, @kbisset และ @John):
วิธีแก้ปัญหาคือการย้ายพอร์ตเชลล์กราฟิก X ทั้ง OS X (ไลบรารีโกโก้ / คอร์ที่มาปิด - ซึ่งเป็นสิ่งที่ทำให้ OS X ไม่เหมือนใครอย่างแท้จริง ) เป็น Linux และในทางเทคนิคแล้วแอปเปิลสามารถทำสิ่งนั้นได้ง่าย แต่พวกเขาไม่มีเหตุผลเพราะรูปแบบธุรกิจทั้งหมดของพวกเขานั้นมีเอกลักษณ์ของแพลตฟอร์มทั้งหมด - ฮาร์ดแวร์และซอฟต์แวร์
เป็นเรื่องที่ยอมรับได้ว่าใครบางคนสามารถพยายามลอกเลียนแบบห้องสมุด แต่อาจต้องใช้เวลาหลายสิบปีกว่าจะทำและอาจจะไม่ถูกต้องเนื่องจากการโทรที่ไม่มีเอกสารซึ่งจะต้องทำซ้ำ
โดยแอปพลิเคชันเฉพาะของ Apple คุณหมายถึงแอพ GUI หรือไม่ เมื่อคุณเลื่อนขึ้นเหนือบรรทัดคำสั่งจะมี API เฉพาะของ Apple สำหรับทุกอย่าง (กราฟิก, เสียง, ฯลฯ ) ที่ไม่ได้รับการสนับสนุนบน Linux ดังนั้นคุณจึงไม่สามารถพอร์ตแอปพลิเคชันได้อย่างง่ายดาย
เลเยอร์กราฟิกไม่เหมือนกันเลย OS X ใช้เฟรมเวิร์กกราฟิกที่เป็นกรรมสิทธิ์ลินุกซ์ใช้ X (X11 / X.org)
แอปพลิเคชั่น OS X แบบเนทีฟเกือบทั้งหมดใช้เฟรมเวิร์กเช่น Cocoa, CoreAnimation และอื่น ๆ ซึ่งมีเฉพาะใน OS X เท่านั้น
ตัวอย่างเช่นสมมติว่าคุณมีแอปพลิเคชันที่เก็บรหัสผ่านสำหรับผู้ใช้ - บน OS X นี่จะใช้ระบบ Keychain และ API ที่เกี่ยวข้อง หากคุณจะย้ายพอร์ตนี้ไปยัง Linux จะไม่มีการเทียบเคียงโดยตรงดังนั้นคุณจะต้องใช้คุณลักษณะทั้งหมดนี้อีกครั้ง นั่นเป็นคุณสมบัติเล็ก ๆ และจะต้องมีการเขียนใหม่
หากคุณเขียนแอปพลิเคชันของคุณโดยใช้ไลบรารี GUI ข้ามแพลตฟอร์มเช่น GTK, Qt หรือ wxWidgets และการย้ายจะง่ายกว่ามาก (หรือ "เป็นไปได้") - แต่ระบบปฏิบัติการยังคงแตกต่างกันมากในแง่ของ UI (เช่น OS X ใช้แถบเมนูแยกขณะที่ Linux มีแนวโน้มที่จะมีแถบเมนูสำหรับแต่ละหน้าต่าง)
หนึ่งในพอร์ตข้ามแพลตฟอร์มที่ดีที่สุดที่ฉันเคยเห็นคือการ ส่งซึ่งใช้ฟังก์ชันการทำงานหลักเป็นไลบรารี (ซึ่งมีรหัสเฉพาะแพลตฟอร์มน้อยที่สุดเท่าที่จะทำได้) จากนั้นสร้าง GUI ท้องถิ่นสำหรับแต่ละแพลตฟอร์มแยกกัน ซึ่งหมายความว่าแต่ละพอร์ตแชร์โค้ดจำนวนมาก แต่ทั้งหมดมีอินเตอร์เฟซแบบเนทีฟที่ดี (แทนที่จะเป็นอินเทอร์เฟซเดียวที่เหมาะกับ Linux อย่างดี แต่ไม่ได้อยู่บน OS X หรือในทางกลับกัน)
มีโครงการที่เรียกว่าCocotronซึ่ง "มุ่งหวังที่จะใช้ Objective-C API ข้ามแพลตฟอร์มซึ่งคล้ายกับที่อธิบายไว้ในเอกสาร Cocoa ของ Apple Inc. " ซึ่งอาจทำให้การย้ายพอร์ตง่ายขึ้นมาก แต่ดูเหมือนว่าจะมีกิจกรรมน้อยมาก (โพสต์บล็อกล่าสุดเมื่อเดือนธันวาคม 2551)
เพราะแอพพลิเคชั่นส่วนใหญ่ขึ้นอยู่กับโปรเซสเซอร์และสถาปัตยกรรมพื้นฐานของเครื่องที่ใช้งานอยู่ พวกเขายังขึ้นอยู่กับชุดเครื่องมือส่วนติดต่อผู้ใช้และห้องสมุดเฉพาะแพลตฟอร์มอื่น ๆ