อะไรที่ทำให้ BSD สามารถใช้งานไบนารี (และ Unix-like) อื่น ๆ ได้ แต่ Linux (และ Unix-like อื่น ๆ ส่วนใหญ่) ไม่สามารถเรียกใช้ไบนารี BSD ได้?
อะไรที่ทำให้ BSD สามารถใช้งานไบนารี (และ Unix-like) อื่น ๆ ได้ แต่ Linux (และ Unix-like อื่น ๆ ส่วนใหญ่) ไม่สามารถเรียกใช้ไบนารี BSD ได้?
คำตอบ:
กลไกตลาด
มีโปรแกรมอื่น ๆ อีกมากมายที่มุ่งเป้าไปที่ Linux โดยเฉพาะที่ * BSD ซอร์สโค้ดซอฟต์แวร์จำนวนมากสามารถพกพาได้พอที่จะสามารถคอมไพล์ได้ทั้งคู่ แต่ผู้ผลิตซอฟท์แวร์จำนวนมากที่ส่งลีนุกซ์ลีนุกซ์ไม่สนใจที่จะทำเช่นนั้นสำหรับ BSD เนื่องจากมีส่วนแบ่งทางการตลาดที่เล็กกว่าลินุกซ์ ¹
หากชิ้นส่วนของซอฟต์แวร์มีเฉพาะในรูปแบบไบนารีสำหรับระบบปฏิบัติการอื่นการจำลอง ABI เป็นวิธีหนึ่งในการทำให้ทำงานซึ่งเป็นสิ่งที่ BSD ทำ
กาลครั้งหนึ่งเมื่อ x86 Unix ถือครองตลาดส่วนใหญ่บนลีนุกซ์คุณลักษณะiBCSถูกเพิ่มเข้ากับ Linux เพื่อให้สามารถรันไบนารีที่สร้างขึ้นสำหรับ SCO Unix และอื่น ๆ ความสนใจในฟีเจอร์นี้ลดลงเนื่องจากส่วนแบ่งการตลาดของลินุกซ์เพิ่มขึ้นดังนั้นจึงได้รับอนุญาตให้ตกอยู่ในสภาพทรุดโทรมในชุดพัฒนาลินุกซ์ 2.3 ³ คดี SCOช่วยนำคุณลักษณะนี้ออกจากลินุกซ์ บังคับให้เกิดคุณสมบัติ
ไม่มีเหตุผลทางเทคนิคว่าทำไม Linux ไม่สามารถรับคุณสมบัติคล้าย iBCS ในการใช้งานไบนารี BSD ได้ แต่ก็ไม่น่าเป็นไปได้เว้นแต่ว่าตำแหน่งทางการตลาดของ BSD และ Linux จะเปลี่ยนไปด้วยเหตุผลบางประการ
วันนี้มีการเรียกร้องสิ่งเล็กน้อยเช่นนี้ คุณรู้จักโปรแกรมแบบไบนารีเท่านั้นสำหรับ BSD ซึ่งยังไม่ได้สร้างสำหรับ Linux ต้องมีบางอย่าง แต่ฉันเดาที่สุดของพวกเขาสำหรับ BSDs ฝังตัวเช่นJunos คุณลักษณะดังกล่าวจะไม่ถูกสร้างขึ้นหากไม่อนุญาตให้มีชุดโปรแกรมที่สำคัญให้เรียกใช้บน Linux ที่ไม่สามารถใช้งานได้
เชิงอรรถ:
ฉันไม่ได้นับ OS X เป็น BSD ที่นี่เนื่องจากเป็นปัญหาความเข้ากันได้แบบไบนารีแยกต่างหาก FreeBSD, OpenBSD และ NetBSD ใช้เอลฟ์บน x86 ในขณะที่ OS X ใช้รูปแบบการปฏิบัติการแตกต่างอย่างสิ้นเชิง การเชื่อมโยงแบบไดนามิกนั้นแตกต่างกันอย่างมากใน OS X มากกว่าใน x86 BSD แบบดั้งเดิม
ดูคำถามนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องความเข้ากันได้ไบนารีของ Linux ⇔ OS X
เช่นเดียวกับฉลามบางชนิดซอฟต์แวร์ที่หยุดการเคลื่อนที่ไปข้างหน้าจะตาย เราเรียกปรากฏการณ์นี้ว่าการหมุนเล็กน้อยแทนที่จะเกิดภาวะขาดอากาศหายใจเมื่อเกิดขึ้นกับซอฟต์แวร์ แต่สาเหตุและผลกระทบนั้นเหมือนกัน
Contrast NDISwrapperซึ่งอนุญาตให้ Linux รันไดรเวอร์การ์ดเครือข่ายแบบไบนารีเท่านั้นที่เขียนขึ้นสำหรับ Windows XP จำเป็นต้องระบุและต้องการเติม สิ่งนี้จำเป็นต้องใช้ไบนารีของ BSD เท่านั้นหรือไม่
binfmt_misc
โมดูลซึ่งช่วยให้คุณสามารถลงทะเบียนตัวจัดการรูปแบบไบนารีโดยอำเภอใจได้ บางคนใช้แอปพลิเคชั่นโมโนด้วยวิธีนี้ถึงแม้ว่าฉันคิดว่ามันหายาก แต่อย่างที่คุณพูดไม่มีใครมีเหตุผลมากมายที่จะเขียน * bindmt handler * BSD