ฉันสามารถใช้เคอร์เนล Linux และใช้ร่วมกับพูด FreeBSD และในทางกลับกัน (เคอร์เนล FreeBSD พูดเป็น Debian) ได้หรือไม่ มีคำตอบสากลหรือไม่? ข้อ จำกัด คืออะไร? สิ่งกีดขวางคืออะไร?
/proc
หรือระฆังและนกหวีดเฉพาะ Linux อื่น ๆ
ฉันสามารถใช้เคอร์เนล Linux และใช้ร่วมกับพูด FreeBSD และในทางกลับกัน (เคอร์เนล FreeBSD พูดเป็น Debian) ได้หรือไม่ มีคำตอบสากลหรือไม่? ข้อ จำกัด คืออะไร? สิ่งกีดขวางคืออะไร?
/proc
หรือระฆังและนกหวีดเฉพาะ Linux อื่น ๆ
คำตอบ:
ไม่เคอร์เนลจากการใช้ระบบปฏิบัติการ Unix แบบต่าง ๆ ไม่สามารถใช้แทนกันได้เนื่องจากพวกมันทั้งหมดนำเสนออินเตอร์เฟสที่แตกต่างกันไปยังส่วนที่เหลือของระบบ (พื้นที่ผู้ใช้) - การเรียกระบบของพวกเขา (รวมถึงioctl
เฉพาะ) ระบบไฟล์เสมือนต่างๆ ..
สิ่งที่สามารถเปลี่ยนแปลงได้บ้างในระดับต้นทางคือการรวมกันของเคอร์เนลและไลบรารี C หรือค่อนข้าง API ระดับผู้ใช้ที่เคอร์เนลและไลบรารีเปิดเผย (โดยพื้นฐานแล้วคือมุมมองที่เลเยอร์ที่อธิบายโดย POSIX โดยไม่มี พิจารณาว่าเป็น POSIX จริงหรือไม่) ตัวอย่างของสิ่งนี้ ได้แก่ Debian GNU / kFreeBSDซึ่งสร้างระบบ Debian ที่ด้านบนของเคอร์เนล FreeBSD และDebian GNU / Hurdซึ่งสร้างระบบ Debian ที่ด้านบนของ Hurd
สิ่งนี้ไม่ได้อยู่ที่ระดับของความสามารถในการสับเปลี่ยนเคอร์เนล แต่มีความพยายามที่จะสร้างมาตรฐานของแอ็พพลิเคชันไบนารีอินเตอร์เฟสทั่วไปเพื่ออนุญาตให้ไบนารีใช้บนระบบต่าง ๆ โดยไม่จำเป็นต้องคอมไพล์ใหม่ ตัวอย่างหนึ่งคือมาตรฐานความเข้ากันได้ของ Intel Binaryซึ่งอนุญาตให้ไบนารีที่สอดคล้องกับมันทำงานบนระบบ Unix ใด ๆ ที่ใช้งานรวมถึง Linux เวอร์ชันเก่ากว่าด้วยเลเยอร์ iBCS 2 ฉันใช้สิ่งนี้ในช่วงปลายยุค 90 เพื่อเรียกใช้ WordPerfect บน Linux
ดูเพิ่มเติมวิธีการสร้างภายใน FreeBSD chroot ของลินุกซ์
เมล็ดบางตัวมีความเข้ากันได้แบบไบนารีช่วยให้คุณสามารถผสมโปรแกรม userspace กับ ABIs ที่แตกต่างกัน (เช่น freebsd สามารถทำงานกับ linux binaries ได้ในระดับหนึ่ง) - อย่างไรก็ตามไบนารีหลัก (เช่นโปรแกรม init, ตัวโหลดโมดูลเครื่องมือตั้งค่าไดรเวอร์อุปกรณ์) เครื่องมือที่จำเป็นในการติดตั้งระบบแฟ้ม ... ) ในทางปฏิบัติจะมีความจำเป็นมากที่จะต้องรู้เกี่ยวกับอินเตอร์เฟสระดับเคอร์เนลเพื่อบูตระบบด้วยเคอร์เนลต่างประเทศได้สำเร็จ
นอกจากนี้ระบบไฟล์จะต้องเข้ากันได้ นอกจากนี้ตัวเลือกความเข้ากันได้แบบไบนารีจะต้องรวบรวม "ยาก" ลงในเคอร์เนล - สิ่งที่นำมาใช้เป็นโมดูลเคอร์เนลต้องการล้มเหลวเพราะคุณไม่สามารถเรียกใช้โมดูลโหลด
ตามที่กล่าวไว้สภาพแวดล้อมของผู้ใช้มักจะค่อนข้างพกพาหากคุณยินดีที่จะคอมไพล์ซ้ำ - เช่นระบบเดเบียนที่ใช้ freebsd หรือตั้งค่าระบบ netbsd pkgsrc บน linux (ไม่ใช่เรื่องเล็กน้อย แต่สนับสนุนและเป็นไปได้!)