เหตุใดแอปพลิเคชัน Mac ทั้งหมดจึงไม่สามารถพกพาไปยัง Linux ได้อย่างง่ายดาย


15

เนื่องจากระบบปฏิบัติการ Apple OS-X เป็นอนุพันธ์ของ UNIX (BSD) และสถาปัตยกรรม Mac พื้นฐาน (Intel) เหมือนกันเหตุใดจึงไม่ตรงไปตรงมาที่จะให้แอปพลิเคชันเฉพาะของ Apple ทำงานบน Linux

คำตอบ:


23

OS X เป็นจริง (ส่วนใหญ่) เชลล์กราฟิกที่เป็นกรรมสิทธิ์ด้านบนของ BSD ในการสร้างแอปพลิเคชัน OS X GUI ผู้ใช้ต้องปฏิบัติตาม api ที่ Apple เปิดเผยและด้วยเหตุนี้จึงไม่ใช่แพลตฟอร์มข้ามและไม่สามารถพกพาได้ง่าย
นั่นเป็นสาเหตุที่ไลบรารีส่วนใหญ่ถูกย้ายอย่างง่ายดาย (จริงๆแล้วส่วนใหญ่พัฒนาบน Linux) ไปยัง Linux แต่ไม่ใช่เชลล์กราฟิกของพวกเขา

จากหมายเหตุด้านข้าง: มีเฟรมเวิร์กที่คุณสามารถสร้างแอพพลิเคชั่น GUI ข้ามแพลตฟอร์มได้ Qtอยู่ในใจ แต่ความจริงที่ว่าเฟรมเวิร์กเหล่านั้นเป็นแพลตฟอร์มข้ามทำให้แอพพลิเคชั่นที่สร้างขึ้นนั้นเป็นมิตรกับผู้ใช้บนแพลตฟอร์มเฉพาะน้อยกว่าแอปพลิเคชัน GUI "ดั้งเดิม" เฟรมเวิร์กเหล่านั้นมีแนวโน้มที่จะทำให้ทุกสิ่งดูทั่วทั้งแพลตฟอร์มซึ่งในกรณีของ Apple นั้นไม่ดีเพราะ Apple สร้างประสบการณ์ผู้ใช้ที่เฉพาะเจาะจงซึ่งไม่ง่าย "พอดี" ในแพลตฟอร์มอื่น ๆ

แก้ไข (เพื่อรวมข้อคิดเห็นในคำตอบ - ขอบคุณ @Nick, @kbisset และ @John):
วิธีแก้ปัญหาคือการย้ายพอร์ตเชลล์กราฟิก X ทั้ง OS X (ไลบรารีโกโก้ / คอร์ที่มาปิด - ซึ่งเป็นสิ่งที่ทำให้ OS X ไม่เหมือนใครอย่างแท้จริง ) เป็น Linux และในทางเทคนิคแล้วแอปเปิลสามารถทำสิ่งนั้นได้ง่าย แต่พวกเขาไม่มีเหตุผลเพราะรูปแบบธุรกิจทั้งหมดของพวกเขานั้นมีเอกลักษณ์ของแพลตฟอร์มทั้งหมด - ฮาร์ดแวร์และซอฟต์แวร์
เป็นเรื่องที่ยอมรับได้ว่าใครบางคนสามารถพยายามลอกเลียนแบบห้องสมุด แต่อาจต้องใช้เวลาหลายสิบปีกว่าจะทำและอาจจะไม่ถูกต้องเนื่องจากการโทรที่ไม่มีเอกสารซึ่งจะต้องทำซ้ำ


ทำไมเชลล์กราฟิกที่เป็นกรรมสิทธิ์จึงไม่สามารถย้ายไปยัง Linux ได้อย่างง่ายดายหากทำงานบน BSD ฉันเข้าใจปัญหาเมื่อสถาปัตยกรรมต้นแบบแตกต่างกัน แต่ตอนนี้สถาปัตยกรรมอ้างอิงเป็นเพียง Intel ดังนั้นทำไมเชลล์กราฟิกจึงไม่เหลืออีกไลบรารีหนึ่ง
Nick Pierpoint

8
ด้วยเหตุผลสองประการ ก่อนอื่นมันเป็นมากกว่าแค่เปลือกกราฟิก มันเป็นเลเยอร์ทั้งหมดเหนือ Unix ที่ Apple ทำงานมาหลายปีแล้ว ประการที่สองรหัสไม่สามารถใช้ได้ ดังนั้นจะต้องมีการเขียนใหม่ตั้งแต่ต้น Apple อาจจะทำได้ในระยะเวลาอันสั้น แต่ก็ไม่มีเหตุผลที่พวกเขาจะทำได้
KeithB

1
ดังนั้น ... สำหรับ Apple อย่างน้อยก็ไม่มีปัญหาด้านเทคนิค - พวกเขาสามารถโยกย้าย OS-X ไปใช้งานบน Linux ได้อย่างง่ายดายเนื่องจากพวกเขาใช้งานบน UNIX อยู่แล้ว เห็นได้ชัดว่าเป็นเรื่องใหญ่สำหรับคนอื่น ๆ เนื่องจากรหัสนั้นเป็นแหล่งข้อมูลปิดและไม่มี API ที่เผยแพร่อย่างสมบูรณ์ นั่นเป็นบทสรุปที่ยุติธรรมใช่ไหม
Nick Pierpoint

3
นิค: เป็นหลักใช่ Apple ไม่มีความสนใจในการย้าย OSX ไปยังแพลตฟอร์ม Linux เหตุใดพวกเขาจึงควรลงทุนเมื่อพวกเขาลงทุนจำนวนมากในแพลตฟอร์มโอเพ่นซอร์สของดาร์วิน (เลเยอร์ BSD) และไลบรารี่ Cocoa / Core * ที่เป็นแหล่งปิด (ซึ่งเป็นสิ่งที่ทำให้ OSX มีความโดดเด่นอย่างแท้จริง) รูปแบบธุรกิจทั้งหมดของพวกเขาคือเอกลักษณ์ของแพลตฟอร์มทั้งหมด - ฮาร์ดแวร์และซอฟต์แวร์ เป็นเรื่องที่ยอมรับได้ว่าใครบางคนสามารถพยายามลอกเลียนแบบห้องสมุด แต่อาจต้องใช้เวลาหลายสิบปีกว่าจะทำและอาจจะไม่ถูกต้องเนื่องจากการโทรที่ไม่มีเอกสารซึ่งจะต้องทำซ้ำ และสิ่งที่จะจบ?
John Rudy

4
GNUStep เป็นการใช้งานโอเพ่นซอร์สของห้องสมุดหลักหลายแห่งที่ตอนนี้อยู่ใน OS X แต่ Apple ได้เพิ่มจำนวนมากตั้งแต่นั้นมาดังนั้นการย้ายพอร์ตยังไม่สะดวก: wiki.gnustep.org/index.php/Cocoa
TRS-80

2

โดยแอปพลิเคชันเฉพาะของ Apple คุณหมายถึงแอพ GUI หรือไม่ เมื่อคุณเลื่อนขึ้นเหนือบรรทัดคำสั่งจะมี API เฉพาะของ Apple สำหรับทุกอย่าง (กราฟิก, เสียง, ฯลฯ ) ที่ไม่ได้รับการสนับสนุนบน Linux ดังนั้นคุณจึงไม่สามารถพอร์ตแอปพลิเคชันได้อย่างง่ายดาย


1

เลเยอร์กราฟิกไม่เหมือนกันเลย 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)


1

เพราะแอพพลิเคชั่นส่วนใหญ่ขึ้นอยู่กับโปรเซสเซอร์และสถาปัตยกรรมพื้นฐานของเครื่องที่ใช้งานอยู่ พวกเขายังขึ้นอยู่กับชุดเครื่องมือส่วนติดต่อผู้ใช้และห้องสมุดเฉพาะแพลตฟอร์มอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.