เหตุใดจึงไม่“ fat ไบนารี” ใช้กันอย่างแพร่หลายสำหรับแอปพลิเคชันข้ามแพลตฟอร์ม


27

เท่าที่ฉันรู้เรียกว่า "fat ไบนารี" - ไฟล์ปฏิบัติการที่มีรหัสเครื่องสำหรับหลายระบบ - ใช้เฉพาะกับ Apple PC เท่านั้นและดูเหมือนว่าพวกเขาใช้เพียงเพราะพวกเขาต้องการเปลี่ยนจาก PowerPC ถึง x86

ทุกวันนี้ซอฟต์แวร์จำนวนมากข้ามแพลตฟอร์มและดูเหมือนว่าการสร้างไบนารีไขมันเพียงครั้งเดียวจะทำได้ง่ายกว่าการติดตามการดาวน์โหลดหลายโหลหรือหลายครั้งที่แตกต่างกันสำหรับการรวมกันของระบบปฏิบัติการและสถาปัตยกรรมแต่ละครั้ง ให้กับลูกค้าที่พวกเขาต้องการ

ฉันสามารถคาดเดาได้มากมายว่าทำไมวิธีการนี้ถึงไม่ติดเช่น:

  • การขาดเครื่องมือการคอมไพล์ข้ามการทำให้ไบนารีหลายระบบเป็นไปไม่ได้
  • คุณต้องทดสอบรหัสในแต่ละระบบปฏิบัติการดังนั้นคุณต้องมีระบบที่สามารถรวบรวมได้ในแต่ละระบบปฏิบัติการ
  • เห็นได้ชัดว่าโปรแกรม 32 บิต "เพิ่งใช้งาน" ในเครื่อง 64 บิตแล้ว
  • การลิงก์แบบไดนามิกทำงานแตกต่างกันไปในแต่ละระบบปฏิบัติการดังนั้น "ไลบรารีไขมัน" อาจไม่ทำงานแม้ว่าจะมี "แอปพลิเคชันอ้วน"

แต่เนื่องจากฉันทำงานกับไลบรารีหรือกรอบงานที่ซ่อนรายละเอียดเฉพาะระบบปฏิบัติการและสถาปัตยกรรมเฉพาะทั้งหมดเหล่านี้จากฉันฉันจึงไม่ทราบว่าเป็นเรื่องจริงเพียงใดหรือถ้ามีปัญหามากขึ้นฉันก็ไม่รู้ เกี่ยวกับ ดังนั้นอะไรคือเหตุผลที่แท้จริงว่าทำไมไบนารีไขมันจึงไม่ถูกใช้โดยทั่วไปในการสร้างซอฟต์แวร์หลายสถาปัตยกรรมและ / หรือระบบปฏิบัติการหลายระบบ? (นอก Apple)


5
มีปัญหาร้ายแรงไหมที่จะแก้ปัญหา? เมื่อฉันไปที่หน้าดาวน์โหลดสำหรับแอพพลิเคชั่นข้ามแพลตฟอร์มที่สำคัญพวกเขาจะตรวจพบระบบปฏิบัติการที่ฉันใช้และชี้ไปในทิศทางที่ถูกต้องโดยอัตโนมัติ ผู้ใช้ Linux มีผู้จัดการแพ็คเกจ ดูเหมือนว่าฉันจะทำเช่นนี้ทั้งหมดก็คือขนาดการดาวน์โหลดที่ขยายตัว
Doval

4
ฉันไม่รู้เกี่ยวกับไบนารีไขมัน แต่พวกเขาไม่ต้องการการสนับสนุนจากระบบปฏิบัติการ (โดยเฉพาะตัวโหลด) จากนั้นฉันไม่เห็นคำอุทธรณ์สำหรับ "ซอฟต์แวร์ระบบปฏิบัติการหลายระบบ" โดยเฉพาะเนื่องจากไม่มีวิธีที่ผู้ขายระบบปฏิบัติการจะเห็นด้วยกับรูปแบบที่ใช้งานร่วมกันได้

7
เพราะเรามีรหัสไบต์และเครื่องเสมือนที่แก้ปัญหานี้ได้ดีกว่า
Robert Harvey

2
ทำให้ฉันสงสัยว่าเป็นไปได้ไหมที่จะสร้างไฟล์ที่เรียกทำงานได้หลายภาษาที่ทำงานได้ทั้งใน Windows และ * NIX
aaaaaaaaaaaa

2
สำหรับบันทึกประวัติวันที่ไบนารีไขมันจากการเปลี่ยนแปลง PPC -> PPC ไม่ใช่การเปลี่ยน PPC -> x86
Mark

คำตอบ:


9

วิธีไบนารีไขมันทำให้รู้สึกมากที่สุดถ้า:

  1. สถาปัตยกรรมทั้งสองอยู่ร่วมกันในระบบเดียวกัน
  2. ทุกอย่างอื่นจะเหมือนกันมากหรือน้อยสำหรับสถาปัตยกรรมทั้งหมด

นั่นเป็นเหตุผลที่พวกเขาไม่ได้ใช้สำหรับรหัสข้ามแพลตฟอร์ม (ทั้งสองเกณฑ์ใช้ไม่ได้) หรือเพื่อสนับสนุนการกระจาย Linux ที่แตกต่างกันด้วยหนึ่งไบนารี (1. ไม่ได้ใช้, 2 ใช้กับระดับหนึ่ง)

บน Linux เกณฑ์ทั้งสองจะยังคงใช้ถ้าคุณต้องการที่จะสนับสนุนทั้ง32 และ 64 บิตในการกระจาย แต่ทำไมต้องกังวลถ้าคุณต้องสนับสนุนการแจกแจงหลาย ๆ

บนWindowsการเปลี่ยนจาก 16 บิตเป็น 32 บิตเกิดขึ้นในตอนแรกด้วยการเปิดตัว Windows NT ซึ่งเป็นค่าเบี่ยงเบนหลักจากโลก Windows 16 บิตในหลาย ๆ ด้าน (หน่วยความจำเสมือนการควบคุมการเข้าถึงผู้ใช้หลายคนการเปลี่ยนแปลง API ... ) จากการเปลี่ยนแปลงทั้งหมดเหล่านี้มันเป็นการดีกว่าที่จะแยกโลก 32 และ 16 บิตออกจากกัน NT มีแนวคิดของ "ระบบย่อย" ที่รองรับ OS "personae" ที่แตกต่างกัน (Win32, POSIX) ดังนั้นการทำให้ Win16 เป็นระบบย่อยตัวที่สามจึงเป็นทางเลือกที่ตรงไปตรงมา

การเปลี่ยน Win32 เป็น Win64 นั้นไม่ได้เกี่ยวข้องกับการเปลี่ยนแปลงครั้งใหญ่ที่คล้ายกัน แต่ Microsoft ก็ใช้วิธีการที่คล้ายกันอยู่แล้วอาจเป็นเพราะมันได้รับการพิสูจน์แล้วและพยายาม


11

การกระจายอายุของอินเทอร์เน็ตลอจิสติกส์ทำให้ไบนารีไขมันลดความอ้วนในสองวิธี:

  1. จุดขายไม่เกี่ยวข้องกับสินค้าทางกายภาพและดังนั้นจึงชอบ SKU น้อยลงอย่างเช่นในกรณีที่ผลิตภัณฑ์แข่งขันกับพื้นที่วางจำหน่ายปลีกและลูกค้ามีโอกาส จำกัด ในการซื้อ

  2. ค่าใช้จ่ายของแบนด์วิดท์นั้นจะส่งมอบบิตที่จำเป็นขั้นต่ำสำหรับแพ็คเกจซอฟต์แวร์เฉพาะ การจัดส่งเลขฐานสองแบบอ้วนลงลวดจะลดประสิทธิภาพของลูกค้าและโครงสร้างพื้นฐานผู้ขาย

ไบนารีไขมันมีเหตุผลมากกว่าเมื่อซอฟต์แวร์ถูกห่อหุ้มด้วยสื่อกายภาพ


1
สำหรับการปรับใช้ซอฟต์แวร์ค่าใช้จ่ายของแบนด์วิดท์แทบจะไม่สำคัญในปัจจุบัน หากยังคงมีปัญหาอยู่ให้รออีก 5 นาที
Robert Harvey

2
@ RobertHarvey แต่นั่นเป็น 5 นาทีฉันไม่อยากรอ
Arturo Torres Sánchez

2

สาเหตุส่วนหนึ่งที่ทำให้ไบนารีไขมันไม่ประสบความสำเร็จคือมีข้อกำหนดมากกว่าABI & โปรเซสเซอร์ (ที่จริงชุดคำสั่ง ) เพื่อทำให้ไบนารีที่ปฏิบัติการได้ไม่ถูกต้อง ไบนารีที่ปฏิบัติการได้มักจะขึ้นอยู่กับทรัพยากรอื่น ๆ โดยเฉพาะอย่างยิ่งไลบรารีแบบไดนามิก (ดูนรก DLL ), บริการภายนอก (คิดว่า DBMS เช่นPostGreSQL .... ), การกำหนดค่าระบบ (เช่นตำแหน่งของไฟล์การตั้งค่าภายใต้/etc/บน Linux) เป็นต้น . ฯลฯ ....

เพียงสำหรับลินุกซ์ / x86-64 มันเป็นในทางปฏิบัติยากที่จะทำให้ไบนารีปฏิบัติการสามารถทำงานได้ในทุกลินุกซ์ (เพราะมันมักจะผูกติดอยู่กับรุ่นที่เฉพาะเจาะจงของlibcหรือของlibstdc++) FatELFมีอยู่ แต่ไม่ประสบความสำเร็จมาก

ถึงแม้จะมีกำหนดไว้อย่างดี ABI และชุดคำสั่งการเพิ่มประสิทธิภาพจะแตกต่างกันเกี่ยวกับแบรนด์ที่ประมวลผลต่างๆ - ดู-mtune=native การเพิ่มประสิทธิภาพ x86ธงGCC

Apple ประสบความสำเร็จเพียงบางส่วนในการมีไบนารีไขมันเพียงเพราะพวกเขาให้ระบบนิเวศของทรัพยากรการคำนวณอย่างใกล้ชิด

ซอฟต์แวร์ฟรีเป็นอีกวิธีหนึ่งในการแก้ปัญหาความสะดวกในการพกพาของคุณ: หากแอปพลิเคชันเป็นซอฟต์แวร์เสรี (เข้ารหัสอย่างระมัดระวังสำหรับการพกพา) จะได้รับการจัดส่งไปยังระบบที่คล้ายกัน และแม้ว่าซอร์สโค้ดดั้งเดิมจะไม่ทำงานตามที่ตั้งใจไว้ในระบบของคุณคุณสามารถปรับมัน (หรือจ่ายเงินให้คนอื่นทำงาน) โดยปกติแล้วจะมีเหตุผลง่าย ๆ (แน่นอนว่าซอฟต์แวร์ฟรีผูกติดอยู่กับ OS หรือ ABI หรือโปรเซสเซอร์ไม่ง่าย พอร์ตคุณจะต้องใช้ความพยายามมากขึ้นในการนั้น) และมาตรฐานเช่นPOSIXหรือLinux Standard Baseก็ช่วยได้เช่นกัน

คุณสามารถจ่าย (หรือถาม) บางคนเพื่อพอร์ตซอฟต์แวร์ (ฟรี) บางอย่างที่มีซอร์สโค้ด แต่มันไม่สมจริงในการพอร์ตปฏิบัติการไบนารี

ที่ล่าสุดหลายกรอบที่มีอยู่เพื่อช่วยเหลือ porting บนระบบปฏิบัติการหลายคน (รหัสที่มาให้มีความพร้อมใช้งาน) เช่นQtและPOCO

แม้การใช้รหัสไบต์ที่ระบุไว้อย่างดีเช่นJVMนั้นไม่ได้รับประกันความสามารถในการพกพาได้เสมอ: บางแอปพลิเคชัน Java เป็นที่รู้จักกันดีว่าไม่สามารถพกพาได้ (เช่นเพราะพวกเขาคาดว่าลำดับชั้นของไฟล์

BTW ระบบคอมพิวเตอร์ในปัจจุบันมีความหลากหลายน้อยกว่าในช่วงทศวรรษ 1980 หรือต้นปี 1990 (หรือในยุคเมนเฟรม)

ในที่สุดไบนารีไขมันเป็นไขมัน: คุณจะใช้ทรัพยากรจำนวนมาก (เวลาสร้างแบนด์วิดท์ขนาดที่ใช้งานได้) สำหรับปัญหาการพกพาที่อาจไม่เกี่ยวข้องกับคนจำนวนมาก จำคำพังเพย: "ไม่มีซอฟต์แวร์พกพาเฉพาะซอฟต์แวร์ที่ได้รับการพอร์ต" (ไปยังระบบบางระบบ)


4
ฉันโต้แย้งความคิดที่ว่าการทำซอฟต์แวร์ "ฟรี" ยังทำให้พกพาได้ง่าย
Robert Harvey

3
มันไม่ได้ทำให้ซอฟต์แวร์พกพาได้ แต่มันช่วยให้บางคนใช้ความพยายามในการย้ายพอร์ตไปยังแพลตฟอร์มอื่น ๆ (ซึ่งคุณไม่สามารถทำได้จริงถ้าคุณไม่มีการเข้าถึงและสิทธิ์ในการแก้ไขซอร์สโค้ด)
Basile Starynkevitch

2
@RobertHarvey อาจไม่มีการเชื่อมโยงพื้นฐานในหลักการ แต่มีเหตุผลเชิงเหตุผลหลายประการที่ทำไมซอฟต์แวร์เสรีจึงแพร่กระจายอย่างกว้างขวางไปทั่วแพลตฟอร์มจำนวนมากและสร้างเครื่องมือสร้างข้ามแพลตฟอร์มและเครื่องมือเครือข่ายมากมาย
itsbruce

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

4
@RobertHarvey มันไม่ได้ ซอฟต์แวร์ฟรีที่เป็นระเบียบอย่างสมบูรณ์ในการพอร์ตมันยังคงเป็นระเบียบอย่างสมบูรณ์ต่อพอร์ต - คุณเพียงแค่เพิ่มพื้นผิวที่คุณอาจจับคนที่ใส่ใจเกี่ยวกับการใช้มันบนสถาปัตยกรรมหรือ OS เฉพาะพอที่จะพอร์ตหรือแนะนำเส้นทางที่อาจ ทำสิ่งที่ไม่ทำให้คนตกเลือด
Tim Post
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.